2010-05-20 34 views
3

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)等,并且可以隐段寄存器也取决于存储器地址操作数出现的指令?

回答

3

除了你提到的CSSS寄存器的访问,大多数其他访问将使用段寄存器DS。一对夫妇例外,我记得:

  • 面向字符串的指令将使用ES为“目的地”段(由EDI寄存器隐式处理)注册
  • 内存访问使用EBP寄存器作为“基址“寄存器将使用SS段寄存器。然而,如果EBP寄存器用作缩放索引寄存器,用于将DS的链段(除非基地址寄存器是ESP
+0

这是优秀的信息。谢谢。 – 2010-05-20 22:26:16