Intel80x86記憶體定址

2021-07-31 07:16:19 字數 1091 閱讀 4731

intel80x86記憶體定址

cpu通過分段單元把乙個邏輯位址轉換為線性位址,接著,分頁單元把線性位址轉換為實體地址

從80386開始,intel處理器能執行兩種不同的位址轉換模式,為實模式和保護模式。保留實模式是要與早期的cpu保持相容。下面重點討論保護模式。

乙個邏輯位址分為段選擇符和指定段內相對位址的偏移量,段選擇符是乙個16位的域,指明段描述符的位置。

s表示段號,g表示在gdt還是ldt中,p表示保護資訊。

gdt和ldt中表項個數最多是2的13次方,即8192項。偏移量是32位長的域。為了快速找到段選擇符,處理器設定6個段暫存器,cs,ss,ds,es,fs,gs,允許同時訪問6個段。

每個段由8個位元組的段描述符表示,它描述了段的特徵,顯然暫存器儲存不了太多的描述符,因此,這些描述符被存放在記憶體中,包括全域性描述符表(gdt)和區域性描述符表(ldt)。通常系統中只有乙個gdt,而每乙個程序可以有自己的ldt,gdt的位址放在gdtr中,ldt位址放在ldtr中。intel處理器提供了一組非程式設計的暫存器,供6個可程式設計的段暫存器使用。每乙個非程式設計的暫存器含有8個位元組的描述符,由相應的段暫存器中的段選擇符所指定。每當乙個段選擇符被裝入段暫存器,相應的段描述符就被裝入對應的暫存器中。

段描述符格式,具體的含義可查官方文件

由於乙個段描述符是8個位元組長,它在gdt或ldt中的位址可由段選擇符的高13位乘8加上gdtr中的基址得出。gdt的第一項總是為0,這樣可以保證段選擇符為空的邏輯位址被認為是無效的。

轉換步驟如下:

由於暫存器的存在,只有當段暫存器的內容被改變時才需要執行前兩步操作。

未完待更。。。

80X86定址方式

1 與定址相關的暫存器 8086 暫存器 段暫存器cs ds es ss 基址暫存器bx bp 變址暫存器di si 專用暫存器ip sp 具體每個暫存器的作用就不仔細介紹了。80386 及其以上的暫存器 段暫存器cs ds es ss fs,gs 基址暫存器eax ebx ecx edx ebp ...

x86記憶體定址

最近又研究了一下記憶體定址,沒有乙份資料能講的透徹,不是不細緻,而是缺乏整體感,都不全面,讓人看完後沒有乙個整體模型,現就我關心的問題記錄如下,如果要很全面很細緻的記錄的話會花費我很多精力,所以只是記錄大概流程,以後再慢慢修正吧。所有貼圖皆來自網路 一 分段的由來 1.8086 分段的產生主要是因為...

80X86定址方式總結

一 概論 擇子存放在六個段暫存器 cs,ss,ds,es,fs,gs 中 段總是由 cs 段暫存器來指示 堆疊段總是由 ss 段暫存器來指示 字元處理指令總是使用 es 段暫存器作為目標運算元的段暫存器 一般的資料段可用 ds es fs gs來指示,但 ds 作為資料段的預設段暫存器,用它來定址比...