装配中JA和JG的区别

问题描述 投票:19回答:2

你能否告诉我JUMP如果上面和JUMP如果大会用汇编语言?我什么时候使用它们?他们给我不同的结果吗?

assembly x86 condition
2个回答
31
投票

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

  • ja跳跃如果CF = 0ZF = 0(未签名上方:没有进位且不相等)
  • 如果jgSF = 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再次同意)。


0
投票

如果最后一个“标志改变”指令是无符号数,则JA用于跳转。但另一方面,如果最后一次“标志改变”指令是签名号码,JG用于跳跃。

© www.soinside.com 2019 - 2024. All rights reserved.