JNE x86汇编指令的矛盾行为



假设如下示例:

test %eax, %eax
jne Label

我知道JNE汇编指令和JNZ指令做同样的事情。如果零旗ZF等于0,它就会跳跃。但是,如果我们现在假设%eax的值为1,那么在第一行之后,Zero Flag将为0并且将进行跳转,尽管%eax和%eax显然是相等的。这让我很困惑,因为我们跳过不相等,尽管我们比较的两个寄存器实际上是相等的。直觉上,这对我来说毫无意义,因为只有当我们比较的东西彼此不相等时,我们才应该跳起来。我希望有人能澄清为什么JNE是这样工作的。

test指令不比较操作数。它执行两个操作数的AND,并设置相应的标志。

在这里,结果是相同的值,零标志反映了该值。因此,分支指令jnejnz测试eax是否为0

最新更新