如果我错了,请纠正我。
这是我对JNZ
和CMP
的理解。JNZ
-如果Z
标志不为零(1),则会发生跳转CMP
-如果两个值相等,则设置Z
标志(1),否则不设置(0)
这是我正在观看的Flash教程。它正在教授一个简单的CrackMe解决方案。
如您所见,上一条指令将AL
与47h
进行了比较。它们相等,设置了Z
标志。 (您可以在右侧的“注册”窗口中看到它)
下一条指令是JNZ
。我的理解是,如果设置了Z
标志,则将发生跳转。设置了Z
标志,但没有发生跳转!
为什么?
最佳答案
JNZ是“如果不为零(ZF = 0),则跳转”的缩写,而不是“如果ZF被设置,则跳转”的缩写。
如果更容易记住,请考虑JNZ和JNE(如果不相等则跳转)。因此,当您在执行cmp al, 47
且AL
的内容等于47时,将设置ZF,因此,不应执行错误跳转(如果不等于-JNE)。