jmp和ja有什么区别?

时间:2013-11-11 20:32:52

标签: assembly x86

根据我的理解jmp执行无条件跳转,而ja如果值无符号则跳转。我这样做了吗?

非常感谢一个例子。

2 个答案:

答案 0 :(得分:5)

jmp进行无条件跳转是正确的。

但您对ja的描述不正确。它根据最近cmp操作的结果执行条件跳转。如果第一个操作数大于第二个操作数,则跳转,使用无符号比较而不是签名比较。 jg将使用签名比较。

答案 1 :(得分:4)

ja表示“如果进位标志未设置且零标志未设置则跳转”。

cmp指令实际上与sub指令相同(即它减去其参数),除了没有保存结果但只更新条件标志。

如果我们比较无符号整数,如果(a-b)大于b,则减去a设置进​​位标志,如果b等于{{}则减去零标志1}},所以如果这两个标志都没有设置,那么a大于a

如果我们想要对有符号数进行比较,我们必须将符号标志(即结果的最高位)与溢出标志进行比较,并检查零标志是否未设置,这是{{ 1}}指令。

因此,b指令不关心参数是有符号还是无符号。这种区别仅在于如何在之后解释标志。

Source