您能否告诉我汇编语言中 JUMP如果上面和 JUMP IF GREATER 之间的区别?我什么时候使用它们?他们给我不同的结果吗?
答案 0 :(得分:30)
作为Intel's manual explains,JG解释标志,好像比较已签名,JA解释标志,好像比较是无符号的(当然,如果设置标志的操作不是比较或减法,那可能没有意义)。是的,他们是不同的。确切地说,
ja
如果CF = 0
和ZF = 0
(无符号上方:没有进位且不相等)会跳转
{li> jg
如果SF = OF
和ZF = 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
用于跳转。