比较汇编中的字符,nasm

时间:2014-04-10 11:51:39

标签: assembly x86 nasm dos

我正在尝试从用户那里获得输入,然后我想输出一些文本,具体取决于用户输入的内容。

我的问题是出于某种原因,它总是认为它是A,我不知道为什么。 你可以在下面找到我的代码:

            bits 16
            org 0x100
            jmp main
message:    db 'Please enter a A or B:',0ah,0dh,'$'
character:  db 1
outp_a:     db 'IT IS A',0ah,0dh,'$'
outp_b:     db 'IT IS B',0ah,0dh,'$'
finish      db 'good bye',0ah,0dh,'$'

clearscreen:
            mov dx, 10 
            mov bh, 0
            mov ah, 2
            int 10h
            mov cx, 2000 
            mov bh, 0
            mov bl, 01Eh 
            mov al, 20h 
            mov ah, 09h
            int 10h
            ret

disply:     
            mov ah,09h
            int 21h
            ret

get_input:  mov ah,01h
            int 21h
            ret

input_a:    mov dx,outp_a
            call disply
            ret
input_b:    mov dx,outp_b
            call disply
            ret

compare:    mov cl,'A'
            cmp [character],cl
            JAE input_a
            mov cl,'B'
            cmp [character],cl
            JAE input_b 
            ret

main:       call clearscreen
            mov dx,message
            call disply
            call get_input
            mov [character],ax
            call compare
            mov dx,finish
            call disply
            int 20h

1 个答案:

答案 0 :(得分:2)

JAE表示如果大于或等于跳跃,也就是说当您与'A'比较时,将对任何编码大于或等于'A'的字符进行跳转。

您想要的是JE,这意味着只有在值完全相同时才会跳转。