你能否告诉我JUMP如果上面和JUMP如果大会用汇编语言?我什么时候使用它们?他们给我不同的结果吗?
作为Intel's manual explains,JG解释标志,好像比较已签名,JA解释标志,好像比较是无符号的(当然,如果设置标志的操作不是比较或减法,那可能没有意义)。是的,他们是不同的。确切地说,
ja
跳跃如果CF = 0
和ZF = 0
(未签名上方:没有进位且不相等)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
再次同意)。
如果最后一个“标志改变”指令是无符号数,则JA
用于跳转。但另一方面,如果最后一次“标志改变”指令是签名号码,JG
用于跳跃。