【问题标题】:comparing characters in assembly, nasm比较汇编中的字符,nasm
【发布时间】:2014-05-24 02:39:49
【问题描述】:

我正在尝试从用户那里获取输入,然后我想根据用户输入的内容输出一些文本。

我的问题是由于某种原因它总是认为它是 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

【问题讨论】:

  • 使用JE 而不是JAE
  • 上一条评论的补充:CMP 通过减法进行比较,66 ('B') - 65 ('A') 将给出 1(上图),因此 JAE 将始终跳转(0 如果等于,1 或任何字符大于 65 的更多)。
  • JE 正在工作,谢谢。您能否将其发布为答案,以便我可以将其标记为已解决
  • 我已经发布了答案。

标签: assembly x86 nasm dos


【解决方案1】:

JAE 表示大于等于跳转,也就是说当你比较'A'时,任何编码大于等于'A'的字符都会跳转。

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

【讨论】:

  • 感谢分配现在对我有意义。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多