上面的一些代码............ 我希望用户输入数字0或1来选择菜单,设置以下菜单和alacart 不知道为什么无法比较和正确跳转
cmp bufi,0
je set
jne wronginput
cmp bufi,1
je ala
jne wronginput
set:
lea dx, setmeal
call endpar
lea dx, dotline
call endpar
lea dx, menusetA
call endpar
lea dx, menusetB
call endpar
lea dx, menusetC
call endpar
jmp oder
alac:
lea dx, setala
call endpar
lea dx, pasta
call endpar
lea dx, asian
call endpar
wronginput:
lea dx, promptwronginput
call endpar
lea dx, nextLine
call endpar
endpar:
mov ah, 9
int 21h
ret
请留下评论和建议 我很欣赏它
答案 0 :(得分:1)
您不清楚如何填充bufi
,但很可能是用户输入的字符,因此您需要进行测试字符 '0'
或'1'
,而不是整数值 0
或1
。所以改变:
cmp bufi,0
为:
cmp bufi,'0'
同样改变:
cmp bufi,1
为:
cmp bufi,'1'
答案 1 :(得分:1)
正如其他人所说,您必须检查'0'
或'1'
的ASCII值,而不是值0
或1
。
但是你有另一个问题。在腐蚀之后,你仍然有这个:
cmp bufi,'0'
je set
jne wronginput
这意味着永远不会达到接下来的几行,因为如果bufi
不是'0'
,则跳转到wronginput:
而不检查'1'
。删除第一个条件跳转到wronginput:
并执行以下操作:
cmp bufi,'0'
je set
cmp bufi,'1'
je ala
; neither '0' nor '1', so wrong input
jmp wronginput
set:
答案 2 :(得分:0)
用户输入是一个ASCII输入,这意味着你必须比较" bufi"使用该输入的十六进制表示... 0表示其30h,1表示31h,或者您可以简单地与字符“0”进行比较。或者' 1' 。
cmp bufi,30h ; for 0
或
cmp bufi,31h ; for 1