代码之家  ›  专栏  ›  技术社区  ›  Daniel Trebbien

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

  •  3
  • Daniel Trebbien  · 技术社区  · 14 年前

    第4.3节 Intel 64® and IA-32 Architectures Software Developer's Manual. Volume 1: Basic Architecture 它说:

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

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

    我知道 (%eip) 流离失所 (%EIP) (例如) -4(%eip) )地址使用 %cs 默认情况下,以及 (%esp) 流离失所 (%ESP) 地址使用 %ss 但是呢 (%eax) , (%edx) , (%edi) , (%ebp) 等等,隐式段寄存器能否也依赖于内存地址操作数出现的指令?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Michael Burr    14 年前

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

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