首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编-测试dx,dx,然后是jg

汇编-测试dx,dx,然后是jg
EN

Stack Overflow用户
提问于 2013-04-25 21:56:11
回答 1查看 3.1K关注 0票数 2

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

代码语言:javascript
复制
 sbb     dx, dx
 test    dx, dx
 jg      short loc_17C7

这就是我阅读代码的方式:在sbb之前,CF要么被设置,要么没有设置,所以sbb dx, dx的结果是您在dx中有-1或0。

但是,test dx, dx永远不能导致任何使jg跳转的标志组合。维基百科说

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

如果dx是-1,那将导致OF=0 SF=1 ZF=0 (-1应该是二进制的所有1s,所以MSB必须是1,因此SF=1)。

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

jg只跳当且仅当ZF=0 and SF=OF。在案例1中,SF!=OF。在案例2中,ZF!=0

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2013-04-25 22:20:35

你什么都没错过。

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

sbb在这里根本不重要:

代码语言:javascript
复制
 test    dx, dx
 jg      short loc_17C7

显然,一个值绝不能超过它本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16225425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档