首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于C++生成的一些汇编代码的有关问题

2012-08-14 
关于C++生成的一些汇编代码的问题我经常见到如下的代码:Assembly codetest eax, eaxje ....单步进去时,这

关于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

热点排行
Bad Request.