x86操作码编码:sib字节

时间:2010-08-13 11:56:27

标签: assembly x86 disassembly

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

但我被困在操作码0x00: 接下来是reg / modbyte。解析它对我来说不是什么大问题。 但是我在使用Scale-Index-Byte遇到了麻烦: 如果您实际上将esp指定为索引寄存器,则实际上意味着没有索引寄存器。 这同样适用于ebp的基址寄存器。但我已经尝试使用c ++内联汇编程序:可以编译: “添加[ebp * 2 + ebp],cl”

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

1 个答案:

答案 0 :(得分:6)

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

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

相关问题