【问题标题】:about Assembly instruction of testl关于testl的汇编指令
【发布时间】:2012-10-22 08:17:58
【问题描述】:

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

testl S2, S1 

以上指令基于S2&S1.So testl %eax, %eax 查看 %eax 是负数、零还是正数。 这个用法我没看懂,请给我解释一下,谢谢。

【问题讨论】:

  • Please give me some explanation... 在 CPU 手册中,在解释 test 指令的章节中。
  • 谢谢,我会看CPU手册

标签: assembly x86


【解决方案1】:

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 2011-04-07
      • 2012-02-27
      • 2011-11-22
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多