为什么这段代码永远不会跳转到名为true的标签?

-4 x86 assembly dos masm

我一直想弄清楚为什么我的代码不起作用.

我需要在此代码的更大版本中实现此cmp作为主菜单,要求选项继续执行某些操作,但是当比较al, '1'无法识别je并且直接跳转到jne.

我知道这可能是比较时的错误但是正确的方法是什么?

.model small

.stack 100h

.data

wm db 0ah, 0dh, "Welcome! please select one of the following options: $"

op1 db 0ah, 0dh, "Please submit 1 to true and 2 to false: $"

op1_1 db 0ah, 0dh, "its true!!! $"

op1_2 db 0ah, 0dh, "its false!!!! $"


.code

main PROC

    mov ax,@data

    mov ds, ax  
    mov dx, offset wm
    mov ah, 09h
    int 21h  

    mov dx, offset op1
    mov ah, 09h
    int 21h

    mov ah, 0ah
    int 21h

    cmp al, '1'
    je true
    jne false


success:

    mov ah,4ch                   ; function: DOS Exit Program
    mov al, 0                    ; specify return code 0
    int 21h                    ; adios amigo!

true:

    mov dx, offset op1_1
    mov ah, 09h
    int 21h
    jmp success

false:

    mov dx, offset op1_2
    mov ah, 09h
    int 21h
    jmp success

main ENDP

END main
Run Code Online (Sandbox Code Playgroud)

Wea*_*ane 5

您还没有传递足够的信息来运作0ah

mov ah, 0ah
int 21h
Run Code Online (Sandbox Code Playgroud)

这需要缓冲区信息并将一系列字符输入到用户提供的缓冲区中.我建议你用

mov ah, 08h
int 21h
Run Code Online (Sandbox Code Playgroud)

它会al像您期望的那样返回单个字符.它没有回应角色,但功能01h确实如此.