汇编语言,跳转指令问题:

test%eax,%eaxjg,还有cmp%eax,%eax,jg应该怎么判断,既然都是一样的操作数,怎么判断跳不跳转,因为jg的意思是jumpifgreater.... test %eax, %eax jg , 还有 cmp %eax, %eax, jg 应该怎么判断,既然都是一样的操作数,怎么判断跳不跳转, 因为jg 的意思是 jump if greater. 展开
 我来答
zealot886
推荐于2017-11-25
知道答主
回答量:1
采纳率:0%
帮助的人:2.8万
展开全部
test这里是做按位与操作,test %eax, %eax是先将%eax和自己按位与,如果所得的结果>0,那么就跳转,否则继续执行下面的指令。
这里的trick是test一个寄存器本身就是看寄存器的值是不是0. 如果不是0,那么jg一定会跳转。
机器这样写的目的是减少指令所占的空间(你可以尝试用mov指令实现看寄存器的值是否为0这个需求,你会发现所占的空间>test,我记得test是2个byte,而mov要有5个byte)

说完了,大清早的,希望对你有帮助!
追问
其实我不太懂的是jg , 它的意思是大于,本来是用来比较 两个操作数大小的, 现在一下把两个操作数一样的放在一起, 那这个大于是大于零的意思吗
追答
你要理解汇编,必须搞懂机器是怎样执行指令的。jg在机器内部的实现其实是对几个位进行一个整体的判断(SF=OF且ZF=0)。可以这样记忆:cmp + jg 时,就是你说的比较大小。test + jg时就是按位与,然后和0比较大小。 要是还不懂,可以参考两本书:王爽的《汇编语言》和《深入理解计算机系统》的第三章。里面对SF,ZF等几个位有非常详细的讲解。
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
_fmlyht
2012-10-25 · TA获得超过2359个赞
知道大有可为答主
回答量:2398
采纳率:0%
帮助的人:1979万
展开全部
条件跳转是根据标志位跳转,影响相应标志位的指令就可以影响条件跳转。

A&A=A
test %eax, %eax就是根据EAX设置标志位,他一定不会进位、溢出,OF=0,

JG在以下情况下跳转
SF=OF且ZF=0
所以,如果若EAX为零,则不跳转,若为负,则不跳转,只有大于零(greater)才跳转,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者sO9r6RbLed
2020-05-29 · TA获得超过3654个赞
知道小有建树答主
回答量:3102
采纳率:27%
帮助的人:199万
展开全部
s0:那一行,若short条件满足,测跳到s:那一行,若不满足则向下执行s1:那一行。s2:那一行若条件short满足,则跳到s1:那一行,若不满足则顺序执行下面的nop空操作!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式