如果我错了,请纠正我。

这是我对JNZCMP的理解。
JNZ-如果Z标志不为零(1),则会发生跳转
CMP-如果两个值相等,则设置Z标志(1),否则不设置(0)

这是我正在观看的Flash教程。它正在教授一个简单的CrackMe解决方案。

如您所见,上一条指令将AL47h进行了比较。它们相等,设置了Z标志。 (您可以在右侧的“注册”窗口中看到它)

下一条指令是JNZ。我的理解是,如果设置了Z标志,则将发生跳转。设置了Z标志,但没有发生跳转!

为什么?

最佳答案

JNZ是“如果不为零(ZF = 0),则跳转”的缩写,而不是“如果ZF被设置,则跳转”的缩写。

如果更容易记住,请考虑JNZ和JNE(如果不相等则跳转)。因此,当您在执行cmp al, 47AL的内容等于47时,将设置ZF,因此,不应执行错误跳转(如果不等于-JNE)。

09-11 17:20