Assembly 装配中JA和JG之间的差异

Assembly 装配中JA和JG之间的差异,assembly,x86,conditional-statements,Assembly,X86,Conditional Statements,你能告诉我汇编语言中高于时跳转与大于时跳转的区别吗?我什么时候使用它们?他们给了我不同的结果吗?因为,JG将标志解释为比较是有符号的,JA将标志解释为比较是无符号的(当然,如果设置标志的操作不是比较或减法,这可能没有意义)。所以是的,他们是不同的。准确地说, ja在CF=0和ZF=0时跳转(上面未签名:无进位且不相等) jg如果SF=OF和ZF=0(符号较大,不包括相等值)跳转 比如说, cmp eax, edx ja somewhere ; will go "somewhere" if e

你能告诉我汇编语言中高于时跳转与大于时跳转的区别吗?我什么时候使用它们?他们给了我不同的结果吗?

因为,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
用于在最后一个“标志更改”时跳转“指令是在有符号的数字上

你能给我举个例子吗?这是否意味着JA忽略了负号?@user3157687没有负号。只有条件标志<代码>ja忽略符号标志(SF)。示例传入..对不起,您所说的u,s是什么意思?:)@user3157687未签名和signed@user3157687不,如果您有
cmp5,-6\ja(忽略语法错误),它不会跳转(因为您是对的),但原因是-6(也称为0xFFFFFA)比5大得多,而不是6比5大<代码>CMP5,-1也不会跳跃,-1甚至大于-6。当然是“Unsigned biger”。上面(
ja
)是Unsigned,后面(
jg
)是signed。有关如何通过
cmp
sub
add
或其他说明进行设置的详细信息,请参阅。另见。中的其他链接。的可能重复