装配 - CMP后的JZ指令

Ada*_* Sh 14 assembly

我有下一条指令:

cmp al, 1
jz mub
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Mat*_*Mat 23

jz是"如果为零则跳跃".cmp减去它的两个操作数,并相应地设置标志.(见这里供参考)

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

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


pax*_*blo 5

jz表示如果为零则跳转。在这种情况下,它只会在al为 1 时跳转。

那是因为cmp通常相当于sub(减去)但实际上没有改变值。

cmp al, 1将根据如果从al.

如果al是 2,则不会进行跳转(因为尚未设置零标志)并且代码将继续在jz.

顺便说一句,jz通常是相同的操作码,je因为它们实际上意味着相同的事情。例如,请参阅x86 控制流上Wikipedia 页面

Jump on Zero
jz loc
加载具有指定地址的 EIP,如果零位是从先前的算术表达式设置的。jz 与 je 相同。