“test”指令是做什么用的?

28

我正在查看一些小型汇编代码,我不太理解TEST指令及其用法。我在观察循环结尾处的以下代码:

8048531:    84 c0                   test   al,al
8048533:    75 dc                   jne    8048511 <function+0x2d>

我理解的TEST指令有点像AND运算符,它会设置一些标志位。但我并不完全理解这些标志位是如何工作的。test al,al 对我来说看起来像是检查相同的低位比特,并且总是得到相同的结果。

有人可以解释一下吗?


@Evan:请不要为特定的x86指令创建更多的标签。如果你想讨论这个问题,我们可以在元社区进行讨论,但在讨论之后再打标签。 - Peter Cordes
@PeterCordes https://meta.stackoverflow.com/q/366109/124486 - Evan Carroll
1个回答

19

它将寄存器与自身进行比较,仅设置标志位。对于零值和非零值,结果将不同。


1
请澄清一下,什么时候TEST会产生使JNE跳转的结果? - danielhc
1
如果被测试的寄存器为零,则设置ZF标志,否则清除该标志。JNE根据该标志跳转或不跳转。 - Bo Persson
7
JNE指令也被称为JNZ - "Jump if Not Zero"。在你的情况下,如果寄存器al不为零,就会执行跳转。 - user200783

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接