繁体   English   中英

JA和JG在装配上的区别

[英]Difference between JA and JG in assembly

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

正如英特尔手册所解释的,JG 将标志解释为好像比较是有符号的,而 JA 将标志解释为好像比较是无符号的(当然,如果设置标志的操作不是比较或减法,那可能没有意义) . 所以是的,它们是不同的。 准确地说,

  • 如果CF = 0ZF = 0ja跳转(无符号以上:无进位且不相等)
  • 如果SF = OFZF = 0 SF = OFjg跳转(有符号较大,不包括相等)

例如,

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM