我正在阅读第3章CSAPP程序的机器级表示。
testl S2, S1
基于S2& S1的上述指令
testl %eax, %eax
查看%eax是负数,零还是正数。
我不明白这个用法。请给我一些解释,谢谢。
答案 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。