在x86中没有段直接寻址?

siv*_*ius 2 x86 assembly addressing-mode

具有SIB字节的存储器操作数的编码允许>无寄存器<用于索引以及基数.所以这应该是一个有效的指令:

03 04 25 10 32 54 76 -add eax, dword [ 0x76543210 ]

地址应按如下方式计算:1·0 + 0 + 0x76543210,不基于任何段寄存器.
在平坦的记忆中,这不应该改变任何东西,但这是不同的add eax, dword ds:0x76543210,如果ds不是零?

fuz*_*fuz 6

在16位和32位操作模式中,SIB字节指示无基数且没有索引(即04 +r 25)简单地编码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]
Run Code Online (Sandbox Code Playgroud)