Assembly x86中的无段直接寻址?

Assembly x86中的无段直接寻址?,assembly,x86,addressing-mode,Assembly,X86,Addressing Mode,使用SIB字节对内存操作数进行编码时,允许对索引和基址使用›无寄存器è。因此,这应该是一个有效的说明: 03 04 25 10 32 54 76–添加eax,dword[0x76543210] 地址的计算应如下:1·0+0+0x76543210,且不基于任何段寄存器。 在平面内存中,这不应该改变任何东西,但这与添加eax不同,dword ds:0x76543210,如果ds不是零?在16位和32位操作模式中,SIB字节表示没有基址和索引(即04+R25)只编码32位地址,就像modr/m字节05

使用SIB字节对内存操作数进行编码时,允许对索引和基址使用›无寄存器è。因此,这应该是一个有效的说明:

03 04 25 10 32 54 76
添加eax,dword[0x76543210]

地址的计算应如下:1·0+0+0x76543210,且不基于任何段寄存器。

在平面内存中,这不应该改变任何东西,但这与添加eax不同,dword ds:0x76543210,如果
ds
不是零?

在16位和32位操作模式中,SIB字节表示没有基址和索引(即
04+R25
)只编码32位地址,就像modr/m字节
05+r
一样。这不会影响分段,在这两种情况下,
ds
用于添加分段基址

在长模式(64位模式)下,modr/m字节
05+r
表示
rip
(响应
eip
)相对地址,而
04+r 25
表示绝对地址。例如:

8b 05 XX XX XX XX       is mov eax, [rip+XXXXXXXX]
8b 04 25 XX XX XX XX    is mov eax, [XXXXXXXX]

ds
是隐式段,它与键入相同。