x86中没有段的直接寻址?
Posted
技术标签:
【中文标题】x86中没有段的直接寻址?【英文标题】:Direct addressing without segment in x86? 【发布时间】:2017-08-30 10:50:46 【问题描述】:使用 SIB 字节对内存操作数进行编码允许对索引和基址使用 ›none register‹。所以这应该是一个有效的指令:
03 04 25 10 32 54 76 – add eax, dword [ 0x76543210 ]
地址应该这样计算:1·0+0+0x76543210,并且不基于任何段寄存器。
在平面内存中,这不应该改变任何东西,但如果ds
不为零,这与add eax, dword ds:0x76543210
有什么不同?
【问题讨论】:
ds
是隐式段,和打出来一样。
【参考方案1】:
在 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]
【讨论】:
以上是关于x86中没有段的直接寻址?的主要内容,如果未能解决你的问题,请参考以下文章