2010-05-20 35 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