4

据我了解jmp,会进行无条件跳转,而ja如果值无符号则跳转。我做对了吗?

一个例子将不胜感激。

4

2 回答 2

8

你是jmp对的,无条件跳转。

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

于 2013-11-11T20:45:36.753 回答
6

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

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

如果我们比较无符号整数,则减法(a-b)设置进位标志如果b大于a,零标志如果b等于a,因此如果这两个标志都没有设置,则它遵循a大于b

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

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

来源

于 2013-11-11T20:54:57.237 回答