Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 比较2个数字,应该相等,但返回=_Assembly - Fatal编程技术网

Assembly 比较2个数字,应该相等,但返回=

Assembly 比较2个数字,应该相等,但返回=,assembly,Assembly,当用户输入1/2/3/4时,仍然显示错误 我的“下一行”已以宏开头 示例输出: 您的选择:1 请仅输入1或2或3或4!(1/2/3/4) 您的选择:2 请仅输入1或2或3或4!(1/2/3/4) 您的选择:3 请仅输入1或2或3或4!(1/2/3/4) 您的选择:4 请仅输入1或2或3或4!(1/2/3/4) 您的选择: dischoice: mov ah,09h lea dx,msg14 int 21h ;display ur choice xor al,al mov ah,01h int

当用户输入1/2/3/4时,仍然显示错误
我的“下一行”已以宏开头
示例输出:
您的选择:1
请仅输入1或2或3或4!(1/2/3/4)
您的选择:2
请仅输入1或2或3或4!(1/2/3/4)
您的选择:3
请仅输入1或2或3或4!(1/2/3/4)
您的选择:4
请仅输入1或2或3或4!(1/2/3/4)
您的选择:

dischoice:  
mov ah,09h
lea dx,msg14
int 21h ;display ur choice
xor al,al
mov ah,01h
int 21h
mov ah,1
mov bh,2
mov ch,3
mov dh,4
cmp al,ah
je ok
cmp al,bh
je ok
cmp al,ch
je ok
cmp al,dh
je ok
;jmp ok
jmp notok
notok:
nextline
mov ah,09h
lea dx,msg23;display error
int 21h
nextline
jmp dischoice

ok:
sub al,30h
mov cho,al
nextline

您应该与
'1'..'4'
进行比较,而不是与
1..4
进行比较。比如:

cmp al,'1'
je ok
cmp al,'2'
je ok
; ... and so on ...
由于您对所有被视为“正常”的数字采取相同的操作,因此可以简化为:

cmp al,'1'
jb notok   ; if al < '1' goto notok
cmp al,'4'
jbe ok     ; if al >= '1' and al <= '4' goto ok
notok:

int21h
看起来像。。。多斯女士?我已经不太清楚了,那是很久以前的事了,但是AH01H会从stdin读取,我很确定它会读取ASCII值“1”(31h),而不是1

因此,请尝试以下方法:

mov ah,31h
mov bh,32h
mov ch,33h
mov dh,34h
或者更好的方法是直接执行cmp,而不是将其存储在寄存器中:

cmp al,31h
je ok
cmp al,32h
je ok
cmp al,33h
je ok
cmp al,34h
je ok
cmp al,31h
je ok
cmp al,32h
je ok
cmp al,33h
je ok
cmp al,34h
je ok