关于testl的汇编指令

时间:2012-10-22 00:04:15

标签: assembly x86

我正在阅读第3章CSAPP程序的机器级表示。

testl S2, S1 

基于S2& S1的上述指令 testl %eax, %eax查看%eax是负数,零还是正数。 我不明白这个用法。请给我一些解释,谢谢。

2 个答案:

答案 0 :(得分:7)

TEST指令与AND指令相同,只是它不存储结果。它只修改标志。它修改以下标志:sign,parity,zero,carry(always 0)和overflow(always 0)。

testl %eax, %eax
jz    zeroLabel     ; jump if EAX is zero
js    negLabel      ; jump if EAX is negative
jns   posLabel      ; jump if EAX is positive

希望这有帮助。

答案 1 :(得分:0)

只是设置一个标志,在这种用法之后使用的以下指令通常是检查标志的条件跳转。针对自身测试寄存器只是设置cpu标志(如你所提到的,neg,zero,pos)。

测试指令执行S1和S2,因此EAX和EAX基本上只是EAX。