ds,es寄存器

时间:2012-03-20 15:23:44

标签: assembly

我反汇编了某些二进制文件(Linux elf)。 我找到了这段代码:

movsl %ds:(%esi),%es:(%edi)

有两个寄存器'ds'和'es'。 我知道这些被命名为'Segment Register'。 但是,没有像'mov addr,%es(或%ds)'这样的行。 这些寄存器指向何处?

1 个答案:

答案 0 :(得分:1)

段寄存器由OS初始化。对于大多数现代操作系统,它们指向与整个地址空间相同的段,因为大多数操作系统使用平坦内存模型(即没有分段)。

这里不使用ds(几乎所有内存访问的默认值)的原因是movs的操作数是隐式的,并且在DOS时有意义。

在DOS(实模式)时,实际使用它们,因为寄存器限制为16Bit,因此限制为64K的地址空间。地址空间(1M)被划分为重叠的64K段。