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

Assembly 如何确定近指针的隐式段寄存器?,assembly,x86,intel,cpu-registers,segments,Assembly,X86,Intel,Cpu Registers,Segments,在第4.3节中,它说: 近指针是32位偏移量。。。在一段内。近指针用于平面内存模型中的所有内存引用或分段模型中的引用,在分段模型中,所访问的段的标识是隐含的 这让我想知道:隐含段寄存器是如何确定的 我知道(%eip)和置换(%eip)(例如-4(%eip))地址默认使用%cs,而(%esp)和置换(%esp)地址使用%ss,但是(%eax)、(%edx)、(%edi、(%ebp)等呢。,隐式段寄存器是否也取决于内存地址操作数出现在的指令?除了您提到的CS和SS寄存器访问之外,大多数其他访问将使用

在第4.3节中,它说:

近指针是32位偏移量。。。在一段内。近指针用于平面内存模型中的所有内存引用或分段模型中的引用,在分段模型中,所访问的段的标识是隐含的

这让我想知道:隐含段寄存器是如何确定的


我知道
(%eip)
和置换
(%eip)
(例如
-4(%eip)
)地址默认使用
%cs
,而
(%esp)
和置换
(%esp)
地址使用
%ss
,但是
(%eax)
(%edx)
(%edi
(%ebp)等呢。,隐式段寄存器是否也取决于内存地址操作数出现在的指令?

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

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