我试图理解汇编以便能够解决难题。但是我遇到了以下说明:
0x0000000000401136 <+44>: cmpl $0x7,0x14(%rsp)
0x000000000040113b <+49>: ja 0x401230 <phase_3+294>
我认为它正在做的是:
的价值0x14(%rsp)
是-7380。据我了解cmpl
比较无符号。还执行跳跃。
那么是否可以这样(unsigned)-7380 > 7
--> 跳转
其实我不想让它跳。但这是正确的解释吗?我是在颠倒论据吗?
另外,如果您对如何操纵此跳跃有任何建议!
据我了解cmpl
比较无符号。
在某种程度上,它两者兼而有之。
有符号与无符号的区别在于跳转指令的使用。
For >
, 有ja
对于无符号和jg
对于有符号的(如果高于则跳转,如果更大则跳转)。
For <
, 有jb
对于无符号和jl
对于有符号的(如果低于则跳转,如果小于则跳转)。
准确来说,这里有几个跳转命令的含义:
对于无符号比较:
JB/JNAE (CF = 1) : Jump if below/not above or equal
JAE/JNB (CF = 0) : Jump if above or equal/not below
JBE/JNA (CF = 1 or ZF = 1) : Jump if below or equal/not above
JA/JNBE (CF = 0 and ZF = 0): Jump if above/not below or equal
对于签名比较:
JL/JNGE (SF <> OF) : Jump if less/not greater or equal
JGE/JNL (SF = OF) : Jump if greater or equal/not less
JLE/JNG (ZF = 1 or SF <> OF): Jump if less or equal/not greater
JG/JNLE (ZF = 0 and SF = OF): Jump if greater/not less or equal
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)