X86 jg指令在经典英特尔处理器上做什么?

X86 jg指令在经典英特尔处理器上做什么?,x86,X86,守则: cmp $5, %eax jg 804940f 这通过执行%eax-$5进行比较,然后设置一个标志(如果大于、等于或为负),对吗?如果标志指示%eax大于$5,那么jg将转到该地址 它确实执行减法运算,但不保留结果。然后它相应地设置标志。关于第二行,您也是正确的,如果第二行较大,那么它将跳转,如果不是,那么它将跳过跳转并继续执行下一行 编辑:如果您是程序集新手,您可能会发现访问标志寄存器的内容也很有帮助。在英特尔汇编中有几种方法可以做到这一点,如果您需要较低的8位,那么您可以使用lah

守则:

cmp $5, %eax
jg 804940f

这通过执行%eax-$5进行比较,然后设置一个标志(如果大于、等于或为负),对吗?如果标志指示%eax大于$5,那么jg将转到该地址

它确实执行减法运算,但不保留结果。然后它相应地设置标志。关于第二行,您也是正确的,如果第二行较大,那么它将跳转,如果不是,那么它将跳过跳转并继续执行下一行


编辑:如果您是程序集新手,您可能会发现访问标志寄存器的内容也很有帮助。在英特尔汇编中有几种方法可以做到这一点,如果您需要较低的8位,那么您可以使用lahf,将它们加载到ah中。如果需要寄存器的全部内容,则可以使用pushf和popf。我希望这有帮助。

请不要在问题标题中添加“问题”一词。关于StackOverflow的每个问题都是一个问题。相反,给它一个有意义的标题,比如“解释
cmp
assember指令”或诸如此类的东西。权威的(如果有点难读的话)源代码是<代码>CMP在第2A卷第3-150页和第3-544页的
JG
中进行了描述。请注意GCC/GAS使用的AT&T语法与本手册使用的标准英特尔语法(可通过
.intel_syntax
btw获得)之间的差异。cmp指令的工作原理是从第一个操作数减去第二个操作数,但是只影响标志而不存储结果-我想这就是OP所指的“%eax-$5”对,我只是不想让OP弄糊涂,我会澄清我的答案。