我正在计算“获取”需要多少字节。
我正在用汇编编写这段代码
jmp [2*eax]
列表文件中的命令是3个字节。
当我写这个命令时:
jmp [4*eax]
我得到了 7 个字节
有人知道为什么吗?
最佳答案
我怀疑你的汇编器很聪明,正在将 jmp [2*eax]
编码为 jmp [eax+eax]
,因为它不需要占用更少的字节需要位移。而 jmp [4*eax]
实际上等同于 jmp [4*eax+0x00000000]
,后者需要额外的 4 个字节用于位移。
它与 SIB(缩放索引字节)的工作有关。通常,这会以 base + index*scale + displacement
的形式对地址进行编码。 位移 是可选的,但前提是包含基数 寄存器。如果你想离开 base 寄存器,那么你必须包含一个 32 位 displacement。
因此,要获得 eax*4
,您需要使用 index*4 + displacement
的形式,即使您不需要那个 displacement .但是要获得 eax*2,您可以使用 base + index*scale
的形式(即 eax+eax*1
),并且不必包含 位移.
关于linux - 计算要获取的字节数,汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392997/