汇编 - 跳转到错误的函数
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
我有这样的代码
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