关于C++生成的一些汇编代码的问题
我经常见到如下的代码:
- Assembly code
test eax, eaxje ....
单步进去时,这条je还不跳转。
按我的理解,eax和eax肯定是相等的啊,je得执行啊,怎么还不跳转呢?
[解决办法]
test eax,eax 基本上和 And eax,eax 是一样的,不同的是test 不改变eax的结果,只是改变FLAG寄存器的状态,也就是改变进位标志,零标志,溢出标志等 等。举一个例子,如果eax=01h,test eax,eax 就是两个01h 作与操作,所以结果还是01h,不是0的话,就不会跳转 je xxxx。所以要跳转je xxxx,只有一种可能就是eax=0h.所以现在eax=0a 则不会跳转 je xxxx
出自http://zhidao.baidu.com/question/106832847.html
[解决办法]
不要使用 韩度百科(这种 广告引擎)
应该看 intel 官方的手册,
第2卷, 章节3.2, and - logical and
dest <- dest and src
flag affected of/cf clr, sf/zf/pf(result), af:undefined
章节 4.2
test logical compare
temp <- src1 and src2
sf <- msb(temp)
if temp = 0
then zf<-1,
else zf<-0
pf.... cf<-0,of<-0
je, if zf=1