Emu8086 - 条件打印不会中断
Emu8086 - Conditional printing doesn't break
所以这是我的问题,每当我按 'a' 并且它满足条件时,它会打印 'a:' 下的文本,然后也打印 'b:' 中的文本。我如何在不同的条件下互相破坏?谢谢 :)
cmp byte ptr [temp+2], 'a' ;condition
je a
cmp byte ptr [temp+2], 'b' ;condition
je b
a:
mov dx, offset msgA ;land
mov ah, 09
int 21h
b:
mov dx, offset msg14 ;water
mov ah, 09
int 21h
ret
msgA db 10, 13, " Land:$"
msg14 db 10, 13, " Water:$"
程序流在您的 int 21h
指令之后继续 - 在您的情况下,即 b:
标签处的代码。如果你不想这样,你需要在 int
指令完成后跳转到不同的地址:
...
a:
mov dx, offset msgA ; land
mov ah, 09
int 21h
jmp done ; program continues here after the `int` instruction
b:
mov dx, offset msg14 ; water
mov ah, 09
int 21h
done:
ret
...
由于完成后您所做的只是从过程中返回,因此您也可以简单地使用 ret
而不是 jmp
。
标签不是障碍;它只是程序中某个位置的名称,可以方便地访问所述位置。
和往常一样,如果你想改变控制流,使用某种分支指令,例如:
a:
mov dx, offset msgA ;land
mov ah, 09
int 21h
jmp done
b:
mov dx, offset msg14 ;water
mov ah, 09
int 21h
done:
是的,这就是您编码的行为。它刚刚从 a:
下降到 b:
。所以只需在末尾添加 jmp
s,它就会按预期工作。
cmp byte ptr [temp+2], 'a' ;condition
je a
cmp byte ptr [temp+2], 'b' ;condition
je b
jmp finish ; --- add this for the case, that neither 'a' nor 'b' was the input
a:
mov dx, offset msgA ;land
mov ah, 09
int 21h
jmp finish ; --- JMP to the end - do not fall through
b:
mov dx, offset msg14 ;water
mov ah, 09
int 21h
jmp finish ; --- JMP to the end - in this case not necessary, but just in case you'd add more cases
finish:
ret
所以这是我的问题,每当我按 'a' 并且它满足条件时,它会打印 'a:' 下的文本,然后也打印 'b:' 中的文本。我如何在不同的条件下互相破坏?谢谢 :)
cmp byte ptr [temp+2], 'a' ;condition
je a
cmp byte ptr [temp+2], 'b' ;condition
je b
a:
mov dx, offset msgA ;land
mov ah, 09
int 21h
b:
mov dx, offset msg14 ;water
mov ah, 09
int 21h
ret
msgA db 10, 13, " Land:$"
msg14 db 10, 13, " Water:$"
程序流在您的 int 21h
指令之后继续 - 在您的情况下,即 b:
标签处的代码。如果你不想这样,你需要在 int
指令完成后跳转到不同的地址:
...
a:
mov dx, offset msgA ; land
mov ah, 09
int 21h
jmp done ; program continues here after the `int` instruction
b:
mov dx, offset msg14 ; water
mov ah, 09
int 21h
done:
ret
...
由于完成后您所做的只是从过程中返回,因此您也可以简单地使用 ret
而不是 jmp
。
标签不是障碍;它只是程序中某个位置的名称,可以方便地访问所述位置。
和往常一样,如果你想改变控制流,使用某种分支指令,例如:
a:
mov dx, offset msgA ;land
mov ah, 09
int 21h
jmp done
b:
mov dx, offset msg14 ;water
mov ah, 09
int 21h
done:
是的,这就是您编码的行为。它刚刚从 a:
下降到 b:
。所以只需在末尾添加 jmp
s,它就会按预期工作。
cmp byte ptr [temp+2], 'a' ;condition
je a
cmp byte ptr [temp+2], 'b' ;condition
je b
jmp finish ; --- add this for the case, that neither 'a' nor 'b' was the input
a:
mov dx, offset msgA ;land
mov ah, 09
int 21h
jmp finish ; --- JMP to the end - do not fall through
b:
mov dx, offset msg14 ;water
mov ah, 09
int 21h
jmp finish ; --- JMP to the end - in this case not necessary, but just in case you'd add more cases
finish:
ret