Win32 程序集条件跳转

Win32 assembly conditional jumps

关于以下操作码参考:http://ref.x86asm.net/coder32.html

我正在尝试更多地了解条件跳转。您会在上面引用的 link 中看到 "Jump short if zero/equal (ZF=0)" 的操作码是 74。因此,如果我们(在调试器中)二进制插入字节 74 04 并且 ZF 标志设置为 0,我们将看到 4[= 的短向前跳转32=] 字节:

0207FF9F        74 04        JE SHORT 0207FFA5

没问题。

稍后在同一个参考中,有一个类似的条件短跳转使用操作码 85 引用,但是如果您为条件跳转使用类似的字节长度弹出该代码,您会得到以下内容:

0207FFA5        850441        TEST DWORD PTR DS:[ECX+EAX*2],EAX

我显然不明白这里的东西,有人能解释一下吗?基于标志值的条件短跳是否限于操作码 707F?

您找到的第二个 85 在 2 字节操作码 table 中,其中每个条目都以 0F.

为前缀

"near" (rel32) version of JZ/JE is 0F 85。 (哎呀,HTML 提取截断了编码列表,只得到一些 0F .. rel32 版本。或者实际上已经破坏了其余的非 table 格式。请参阅英特尔的 PDF原创.

那些操作码table不是指令集参考手册。不过,如果您只需要快速参考,它们会很方便。如果您感到困惑,请查看完整手册中的说明( 标签 wiki 中的链接。