1

我正在计算“获取”需要多少字节。

我正在汇编这段代码

jmp [2*eax]

列表文件中的命令为 3 个字节。

当我写这个命令时:

jmp [4*eax]

我有 7 个字节

有谁知道为什么?

4

1 回答 1

2

我怀疑您的汇编程序很聪明,并且正在编码jmp [2*eax]as jmp [eax+eax],因为它不需要位移,因此需要更少的字节。而jmp [4*eax]实际上相当于jmp [4*eax+0x00000000]需要额外的 4 个字节用于位移。

它与 SIB(缩放索引字节)的工作原理有关。通常这会将地址编码为base + index*scale + displacement. 位移是可选的,但前提是包含基址寄存器。如果你想离开基址寄存器,那么你必须包含一个 32 位位移

所以即使你不需要那个位移eax*4,你也需要使用表格。但是要获得 eax*2,您可以使用形式(ie ),并且避免必须包含位移index*4 + displacementbase + index*scaleeax+eax*1

于 2013-06-30T18:25:12.703 回答