装配中JA和JG的区别

时间:2014-01-03 15:09:54

标签: assembly x86 conditional-statements

您能否告诉我汇编语言中 JUMP如果上面 JUMP IF GREATER 之间的区别?我什么时候使用它们?他们给我不同的结果吗?

2 个答案:

答案 0 :(得分:30)

作为Intel's manual explains,JG解释标志,好像比较已签名,JA解释标志,好像比较是无符号的(当然,如果设置标志的操作不是比较或减法,那可能没有意义)。是的,他们是不同的。确切地说,

    {li> ja如果CF = 0ZF = 0(无符号上方:没有进位且不相等)会跳转 {li> jg如果SF = OFZF = 0(签名更大,排除相等)则会跳转

例如,

cmp eax, edx
ja somewhere ; will go "somewhere" if eax >u edx
             ; where >u is "unsigned greater than"

cmp eax, edx
jg somewhere ; will go "somewhere" if eax >s edx
             ; where >s is "signed greater than"

>u>s同意顶部位为零的值,但顶部位设置的值被>s视为负值,>u视为大值(当然,如果两个操作数都设置了最高位,>u>s再次达成一致)。

答案 1 :(得分:0)

如果最后一个“标志更改”指令位于无符号数字上,则

JA用于跳转。但是另一方面,如果最后一个“标志更改”指令位于带符号的数字上,则JG用于跳转。