在Ia32中,jmp和ja有什么区别?

Mic*_*ith 2 x86 assembly

根据我的理解jmp,无条件跳转,而ja如果值无符号则跳转.我说得对吗?

一个例子将不胜感激.谢谢!

Bar*_*mar 6

jmp无条件跳跃你是对的.

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

  • `ja`根据条件标志跳转.条件标志由`cmp`指令设置,但也由各种其他指令设置,包括简单的算术指令,如`add`. (6认同)

Sim*_*ter 6

ja 意思是“如果未设置进位标志和未设置零标志则跳转”。

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

如果我们正在比较无符号整数,则减法(a-b)设置进位标志 ifb大于a,零标志 ifb等于a,因此如果这两个标志均未设置,则它a大于b

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

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

来源