2012-03-20 49 views
4

我反彙編了某些二進制文件(Linux elf)。 我發現這個代碼:ds,es註冊

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

有兩個寄存器 'DS' 和 'ES'。 我知道這些被命名爲'段寄存器'。 但是,沒有像'mov addr,%es(或%ds)'這樣的行。 這些寄存器指向哪裏?

回答

1

段寄存器由操作系統初始化。對於大多數現代操作系統,他們指向指向整個地址空間的同一段,因爲大多數操作系統使用平坦內存模型(即無分段)。

不使用ds(幾乎所有內存訪問的默認值)的原因是movs的操作數是隱含的,在DOS時代是有意義的。

在DOS(實模式)時代,實際使用了它們,因爲寄存器限於16Bit,因此限制爲64K的地址空間。地址空間(1M)被劃分爲重疊的64K段。