如何确定近指针的隐式段寄存器?

时间:2010-05-20 21:14:12

标签: assembly x86 intel cpu-registers segments

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)等等,隐式段寄存器也可以依赖于内存地址操作数出现在?

1 个答案:

答案 0 :(得分:3)

除了您提到的CSSS寄存器访问之外,大多数其他访问将使用DS段寄存器。我记得几个例外:

  • 面向字符串的指令将使用ES作为'destination'(由EDI寄存器隐式寻址)段寄存器
  • 使用EBP寄存器作为“基址”寄存器的存储器访问将使用SS段寄存器。但是,如果EBP寄存器用作缩放索引寄存器,则使用的段将为DS(除非基址寄存器为ESP