汇编 - TEST dx,dx后跟jg

时间:2013-04-25 21:56:11

标签: assembly x86

我是x86汇编程序的新手,很难正确解释所有条件跳转和测试。我有这段代码:

 sbb     dx, dx
 test    dx, dx
 jg      short loc_17C7

这就是我阅读该代码的方式:在sbb之前,CF已设置或未设置,因此sbb dx, dx的结果是{或1}中的-1或0 {1}}。

但是dx永远不会导致任何使test dx, dx跳跃的FLAGS组合。维基百科说

  

TEST操作将标志CF和OF设置为零。 SF设置为AND结果的MSB。如果AND的结果为0,则ZF设置为1,否则设置为0.

如果jg为-1,那将导致dx(-1应为二进制的全1,因此MSB必须为1,因此SF = 1)

如果OF=0 SF=1 ZF=0为0,则会导致dx

OF=0 SF=0 ZF=1只会跳转iff jg。在案例1中,ZF=0 and SF=OF。在案例2中,SF!=OF

那我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

你没有遗漏任何东西。

此代码可能是由非优化(至少在本例中)编译器生成的。

sbb在这里甚至不重要:

 test    dx, dx
 jg      short loc_17C7

显然,价值永远不会超过自身。