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

test %eax, %eax jg , 还有 cmp %eax, %eax, jg 应该怎么判断,既然都是一样的操作数,怎么判断跳不跳转, 因为jg 的意思是 jump if greater.

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等几个位有非常详细的讲解。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-25
条件跳转是根据标志位跳转,影响相应标志位的指令就可以影响条件跳转。

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

JG在以下情况下跳转
SF=OF且ZF=0
所以,如果若EAX为零,则不跳转,若为负,则不跳转,只有大于零(greater)才跳转,
第2个回答  2020-05-29
s0:那一行,若short条件满足,测跳到s:那一行,若不满足则向下执行s1:那一行。s2:那一行若条件short满足,则跳到s1:那一行,若不满足则顺序执行下面的nop空操作!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网