2011-09-26 76 views
1

的代码:jg指令在经典的英特尔处理器上做了什么?

cmp $5, %eax 
jg 804940f 

与此相比,通过执行%EAX - $ 5,然后设置一个旗(县),如果是大于,等于还是负面的,对吗?那么如果标志指示%eax大于$ 5,那么jg会继续到那个地址?

+1

请不要在问题标题中放置“问题”一词。 StackOverflow上的每个问题都是一个问题。相反,给它一个有意义的标题,比如“cmp' assember指令的解释”或类似的东西。 –

+0

权威(如果有点难读)源代码是[intel手册](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)。在CMP上描述了“CMP”。 3-150卷2A和'JG'在页码。 3-544。注意GCC/GAS使用的AT&T语法与手册使用的标准intel语法(你可以用'.intel_syntax'获得)之间的区别。 – user786653

回答

3

它做减法,但它不保留结果。然后它相应地设置标志。你对第二行也是正确的,如果它大于跳跃,则跳过跳跃,否则跳过跳跃并继续执行下一步。

编辑:如果你是新装配,你也可能会发现它有助于有权访问标志寄存器的内容。在英特尔汇编中有几种方法可以实现这一点,如果您需要较低的8位,那么您可以执行lahf来将它们加载到ah中。如果你想要注册的全部内容,那么你可以使用pushf和popf。我希望这有帮助。

+1

cmp指令通过从第一个操作数中减去第二个操作数,但只影响标志并不存储结果 - 我认为这就是OP所指的'%eax - $ 5' – jeffora

+0

对,我刚刚我不想让OP弄糊涂,我会澄清我的答案。 –