装配 - CMP后的JZ指令

时间:2012-02-18 15:59:13

标签: assembly

我有下一条指令:

cmp al, 1
jz mub

当al为2时(10为二进制)。怎么做这个指示?据我所知,我可以使用JE,JNE,JA等,但是在cmp指令之后jz是什么意思?

由于

3 个答案:

答案 0 :(得分:21)

jz是“如果为零则跳跃”。 cmp减去它的两个操作数,并相应地设置标志。 (参见here以供参考。)

如果两个操作数相等,则减法将导致零,并且ZF标志将被设置。

因此,在您的示例中,如果al为1,则会进行跳转,否则不会进行跳转。

答案 1 :(得分:4)

jz表示跳零。在这种情况下,只有al为1才会跳转。

这是因为cmp通常等同于sub(减去),但实际上没有更改该值。

cmp al, 1将根据您从al中减去1时发生的情况设置处理器标志(包括零标记)。

如果al为2,则不会进行跳转(因为尚未设置零标志),代码将继续执行jz之后的指令。

另外,jz通常与<{1>}的相同的操作码,因为它们实际上意味着同样的事情。例如,请参阅Wikipedia page on x86 control flow

  

跳零
  je
  如果从先前的算术表达式设置了零位,则使用指定的地址加载EIP。 jz与je相同。

答案 2 :(得分:1)

'Jump Zero' - 如果设置了零标志,则跳转到标签'mub'。 'cmp'是一个只设置标记和&amp;的减法。因此,如果al为2,(2-1)&lt;&gt; 0则零标志清零并且不会执行跳转。

相关问题