汇编 - 跳转到错误的函数

Assembly - jumps to wrong function

我有这样的代码

MOV ax, a
MOV bl, x[si]
CBW
SUB ax, bx  
CMP ax, 0 
JE f2
JL f3

变量:

a DW 3
x DB -2

当代码在 sub ax 之后工作时应该是 5,因为 3-(-2) = 5 > 0,但是它跳转到函数 f3,当它应该继续使用 f1 时,f1 在这段代码之后开始。有什么建议吗?此外,如果 x 为 2,它工作正常并且代码不会跳到任何地方并且函数 f1 工作正常。

由于您的 x 数组包含有符号字节 并且 您想要从 AX 寄存器中的字中减去这些,您需要提升有符号字节到有符号字。我们使用 MOVSX 指令来执行此操作。

许多汇编语言指令根据运算结果设置标志。 SUB 是其中之一,因此您无需将 AX 与 0 进行比较即可有条件地跳转。

MOV   ax, a
MOVSX bx, x[si]
SUB   ax, bx
JE    f2
JL    f3