我有下一条指令:
cmp al, 1
jz mub
当al为2时(10为二进制)。怎么做这个指示?据我所知,我可以使用JE,JNE,JA等,但是在cmp指令之后jz是什么意思?
由于
答案 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则零标志清零并且不会执行跳转。