我有这样的代码
MOV ax, a
MOV bl, x[si]
CBW
SUB ax, bx
CMP ax, 0
JE f2
JL f3
变量:
a DW 3
x DB -2
当子轴之后的代码工作时应该是5,因为3-(-2) = 5 > 0
,但是它跳转到函数f3,当它应该继续使用f1时,它在这部分代码之后开始。有什么建议吗?如果x是2,它工作正常,代码不会跳转到任何地方,函数f1工作正常。
答案 0 :(得分:1)
由于 x 数组包含有符号字节和,您希望从AX寄存器中的字中减去这些字节,因此需要将带符号字节提升为带符号字。我们使用MOVSX
指令来执行此操作。
许多汇编语言指令根据操作结果设置标志。 SUB
就是其中之一,所以你不需要将AX与0进行比较就能有条件地跳跃。
MOV ax, a
MOVSX bx, x[si]
SUB ax, bx
JE f2
JL f3