[英]Difference between JA and JG in assembly
你能告诉我汇编语言中的JUMP IF ABOVE和JUMP IF GREATER之间的区别吗? 我什么时候使用它们? 他们会给我不同的结果吗?
正如英特尔手册所解释的,JG 将标志解释为好像比较是有符号的,而 JA 将标志解释为好像比较是无符号的(当然,如果设置标志的操作不是比较或减法,那可能没有意义) . 所以是的,它们是不同的。 准确地说,
CF = 0
且ZF = 0
则ja
跳转(无符号以上:无进位且不相等)SF = OF
且ZF = 0
SF = OF
则jg
跳转(有符号较大,不包括相等)例如,
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
用于跳转。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.