我希望它能打印2个数字是否相等虽然我认为跳转功能不正确。
TITLE pilot
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
.CODE
BEGIN:
mov ax, @data
mov ds, ax
mov es, ax
mov cl, 05h
mov dl, 10h
cmp cl, dl
JE where
JNE somewhere
somewhere:
lea dx, NEQUAL
where:
lea dx, EQUAL
mov ah, 09h
int 21h
mov ah, 4ch
int 21h
end BEGIN
它只打印
之前的任何一个mov ah, 09h
int 21h
答案 0 :(得分:1)
如果你写
somewhere: lea dx, NEQUAL
where: lea dx, EQUAL
然后第二次对dx
的影响将始终覆盖第一个。此外,JNE没有必要,因为JE
没有跳跃。所以你应该写:
cmp cl, dl
JE where
lea dx, NEQUAL
jmp sequel:
where: lea dx, EQUAL
sequel: mov ah, 09h
int 21h
[...]
就像你忘了把别人放进去了
if (cl == dl) dx = NEQUAL
dx = EQUAL
[...]
答案 1 :(得分:1)
即使你跳到somewhere
,你仍然会直接执行where
部分,因为没有跳过跳过它。我建议将支票更改为:
cmp cl, dl
jne not_equal
lea dx, EQUAL
jmp check_done
not_equal:
lea dx, NEQUAL
check_done:
或者,甚至更简单:
cmp cl, dl
lea dx, EQUAL
je check_done
lea dx, NEQUAL
check_done:
答案 2 :(得分:0)
cmp cl, dl
JE where
JNE somewhere
somewhere: lea dx, NEQUAL
where: lea dx, EQUAL
按照您的代码。如果它跳到那里它会跳过某处的jne和lea NEQUAL。如果它没有进行跳跃,那么无论它执行lea NEQUAL和lea EQUAL是什么。您定义的所有代码路径都会生成lea dx,EQUAL,然后继续。完成这个if-then-else你需要在NEQUAL的跳跃之后跳过EQUAL的lea