0

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

testl S2, S1 

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

4

2 回答 2

8

TEST 指令与 AND 指令相同,只是它不存储结果。它只修改标志。它修改以下标志:符号、奇偶校验、零、进位(始终为 0)和溢出(始终为 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

希望这可以帮助。

于 2012-10-22T00:17:58.663 回答
0

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

测试指令执行 S1 AND S2,所以本质上 EAX AND EAX 就是 EAX。

于 2012-10-22T00:06:43.707 回答