在Intel 64® and IA-32 Architectures Software Developer's Manual. Volume 1: Basic Architecture的第4.3节中,它说:
近指针是段内的32位偏移量。近指针用于平面内存模型中的所有内存引用,或用于分段模型中的引用,其中隐含了被访问的段的标识。
这让我想知道:隐含的段寄存器是如何确定的?
我知道(%eip)
和移位(%eip)
(例如-4(%eip)
)地址默认使用%cs
,(%esp)
和(%esp)
移位地址使用%ss
,但是(%eax)
,(%edx)
,(%edi)
,(%ebp)
等等,隐式段寄存器也可以依赖于内存地址操作数出现在?
答案 0 :(得分:3)
除了您提到的CS
和SS
寄存器访问之外,大多数其他访问将使用DS
段寄存器。我记得几个例外:
ES
作为'destination'(由EDI
寄存器隐式寻址)段寄存器EBP
寄存器作为“基址”寄存器的存储器访问将使用SS
段寄存器。但是,如果EBP
寄存器用作缩放索引寄存器,则使用的段将为DS
(除非基址寄存器为ESP
)