2011-09-12 72 views
0

當讀取86虛擬地址長度

64和IA-32架構軟件開發手冊

和約保護模式一些相關教程。 我遇到了這個問題。 根據手冊和博客 http://translate.google.com/translate?hl=en&sl=auto&tl=en&u=http%3A%2F%2Fwww.fh-zwickau.de%2Fdoc%2Fprmo%2Fpmtutor%2Ftext%2Fr_phys7.htm

虛擬地址應該是16 + 32位,對不對? 那麼,使用一些低級彙編語言進行編程時提供的地址是什麼?或者,簡單地說,我們在調試時看到的地址是什麼? 我假設它是32位。 編程或調試地址是線性地址嗎? 非常感謝。

回答

0

在現代x86系統(如windows/* nix)的用戶模式下,虛擬地址是64位(儘管有些位當前未使用)或32位。

0

x86機器上的虛擬地址始終爲32位,通常地址爲0 - 0x7FFFFFFF和內核地址爲0x8000000 - 0xFFFFFFFF的用戶空間(當然,地址空間的拆分方式也是例外)。您發佈的頁面鏈接是關於16位實模式的,其中地址是16位,但實際上只能處理1MB的內存,因爲也使用了分段(附加寄存器)。

我不知道你爲什麼說16 + 32位 - 也許你混合了虛擬尋址和分段。仍然有16位的分段寄存器,但是,在大多數未使用的操作系統上,分段已被棄用。有關詳細信息,請參閱您提及的英特爾手冊。

虛擬地址的大小與底層彙編沒有任何關係,您仍然通常編寫32位應用程序(只要您沒有編寫自己的操作系統,這需要一些實模式代碼才能在x86上啓動) 。