我正在计算“获取”需要多少字节。
我正在汇编这段代码
jmp [2*eax]
列表文件中的命令为 3 个字节。
当我写这个命令时:
jmp [4*eax]
我有 7 个字节
有谁知道为什么?
我正在计算“获取”需要多少字节。
我正在汇编这段代码
jmp [2*eax]
列表文件中的命令为 3 个字节。
当我写这个命令时:
jmp [4*eax]
我有 7 个字节
有谁知道为什么?
我怀疑您的汇编程序很聪明,并且正在编码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 + displacement
base + index*scale
eax+eax*1