5

我目前正在尝试编写反汇编程序。我找到了以下操作码列表及其含义,所以我决定在运行时解析它:http://web.archive.org/web/20150810224114/http: //mprolab.teipir.gr/vivlio80X86/pentium.txt

但我被困在操作码 0x00:后面是 reg/modbyte。解析它对我来说不是什么大问题。

但是我在使用 Scale-Index-Base 字节时遇到了问题:
如果您实际上将 esp 指定为索引寄存器,这实际上意味着没有索引寄存器。

这同样适用于带有 ebp 的基址寄存器。但我已经用 C++ 内联汇编器尝试过: 可以编译: add [ebp*2+ebp],cl

那么当使用ebp作为基址寄存器时,如何将ebp用作基址寄存器实际上意味着根本不使用基址寄存器!?

4

1 回答 1

9

“缺少 EBP”的情况仅适用于 ModR/M.Mod 字段的二进制值为 00 的情况。如果您需要 EBP 作为基础,则汇编器将 Mod 更改为 01 二进制并添加 8 位位移,值为 0:

004C6D00 添加[ebp+ebp*2], cl

于 2010-08-13T12:08:35.330 回答