关于testl的汇编指令

lxg*_*eek 0 x86 assembly

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

testl S2, S1 
Run Code Online (Sandbox Code Playgroud)

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

Spa*_*rky 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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.