Assembly 如何确定近指针的隐式段寄存器?
在第4.3节中,它说: 近指针是32位偏移量。。。在一段内。近指针用于平面内存模型中的所有内存引用或分段模型中的引用,在分段模型中,所访问的段的标识是隐含的 这让我想知道:隐含段寄存器是如何确定的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寄存器访问之外,大多数其他访问将使用
我知道
(%eip)
和置换(%eip)
(例如-4(%eip)
)地址默认使用%cs
,而(%esp)
和置换(%esp)
地址使用%ss
,但是(%eax)
、(%edx)
、(%edi、(%ebp)等呢。,隐式段寄存器是否也取决于内存地址操作数出现在的指令?除了您提到的CS
和SS
寄存器访问之外,大多数其他访问将使用DS
段寄存器。我记得有几个例外:
- 面向字符串的指令将使用
ES
作为“目的地”(由EDI
寄存器隐式寻址)段寄存器
- 使用
EBP
寄存器作为“基址”寄存器的内存访问将使用SS
段寄存器。但是,如果EBP
寄存器用作缩放索引寄存器,则使用的段将是DS
(除非基址寄存器是ESP
)