根据我的理解jmp
执行无条件跳转,而ja
如果值无符号则跳转。我这样做了吗?
非常感谢一个例子。
答案 0 :(得分:5)
jmp
进行无条件跳转是正确的。
但您对ja
的描述不正确。它根据最近cmp
操作的结果执行条件跳转。如果第一个操作数大于第二个操作数,则跳转,使用无符号比较而不是签名比较。 jg
将使用签名比较。
答案 1 :(得分:4)
ja
表示“如果进位标志未设置且零标志未设置则跳转”。
cmp
指令实际上与sub
指令相同(即它减去其参数),除了没有保存结果但只更新条件标志。
如果我们比较无符号整数,如果(a-b)
大于b
,则减去a
设置进位标志,如果b
等于{{}则减去零标志1}},所以如果这两个标志都没有设置,那么a
大于a
。
如果我们想要对有符号数进行比较,我们必须将符号标志(即结果的最高位)与溢出标志进行比较,并检查零标志是否未设置,这是{{ 1}}指令。
因此,b
指令不关心参数是有符号还是无符号。这种区别仅在于如何在之后解释标志。