在x86中没有段直接寻址?

时间:2017-08-30 10:50:47

标签: assembly x86 addressing-mode

使用SIB字节对内存操作数进行编码允许> none寄存器<用于索引和base。所以这应该是一个有效的指令:

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

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

1 个答案:

答案 0 :(得分:6)

在16位和32位操作模式中,指示无基数且无索引的SIB字节(即04 +r 25)只是编码32位地址,就像modr / m字节05 +r那样。这不会影响细分,ds用于在两种情况下添加细分基础地址。

在长模式(64位模式)下,modr / m字节05 +r表示rip(resp。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]