80386保護模式儲存器定址(1)

2021-03-31 19:29:37 字數 1700 閱讀 7752

邏輯位址(

logical address

)包含在機器語言指令中用來指定乙個運算元或一條指令的位址。每乙個邏輯位址都由乙個段和乙個偏移量組成,偏移量指明了從段的開始到實際位址之間的距離。

線性位址(

linear address

)是乙個

32位無符號整數,可以用來表示高達

4gb的位址。

實體地址(p

hysical address

)用於儲存器晶元級儲存器單元定址。實體地址由

32位無符號整數表示。

cpu控制單元通過一種稱為分段單元

(segmentation unit)

的硬體電路把乙個邏輯位址轉換成線性位址;接著,第二個稱為分頁單元(

paging unit

)的硬體電路把乙個線性位址轉換成實體地址。

硬體中的分段

從80386

模型開始,

intel

微處理器以兩種不同的方式執行位址轉換,這兩種方式分別稱為實模式和保護模式。

段暫存器

乙個邏輯位址由兩部分組成:乙個段識別符號和乙個指令段內相對位址的偏移量。段識別符號是乙個

16位長的字段,稱為段選擇符(

segment selector

),而偏移量是乙個

32位長的字段。

cpu提供了

6個段暫存器cs、

ss、ds、

es、fs和

gs來存放段選擇符,以快速方便地找到段選擇符。其中

3個段暫存器有專門的用途:

cs為**段暫存器,指向包含程式指令的段;

ss為棧段暫存器,指向包含當前程式棧的段;

ds為資料段暫存器,指向包含靜態資料或者外部資料的段,而剩下的es、

fs和

gs都只能用作資料段暫存器。也就是說,在某個時刻,對程式設計師來說,儲存器最多由

6個段組成,

1個**段,

1個棧段和最多

4個資料段。

段描述符

每個段由乙個

8位元組的段描述符(

segment descriptor

)表示,它描述了段的特徵。段描述符放在全域性描述符表(

global descriptor table, gdt

)或區域性描述符表(

local descriptor table, ldt

)中。通常只定義乙個

gdt,而每個程序除了存放在

gdt中的段之外,如果還需要建立附加的段,就可以有自己的

ldt。

gdt在主存中的位址存放在

gdtr

暫存器中,當前正被使用的

ldt的位址存放在

ldtr

暫存器中。段暫存器中僅僅存放段選擇符,每個段選擇符包含一下字段:

13位的索引,用於選擇

8192

(213

)個全域性描述符或區域性描述符中的乙個;

ti標誌指明段描述符是在

gdt中(

ti = 0

)或在ldt

中(ti = 1);2

位rpl

字段,用於表示請求者的特權級。

參考文獻:

1. 深入理解linux核心 第二版

2. linux核心完全注釋

3. intel 80386 programmer's reference manual 1986

80386保護模式總結

大學也上過微機原理,但那個時候整天玩php,vc c net.資料庫管理系統.沒有意識到她是一門非常重要的課。於是上這些基礎課的時候都在下面看那些 從入門到精通之類的書了或者乾脆翹了去圖書館看 當然我不會否認正是因為這些書讓我玩計算機的興趣堅持了下去 大學畢業同學都把書賣了。我當時感到像微機原理組成...

實模式與保護模式的定址

暫存器運算元 存放在cpu中 mov ax,0ffffh ax 即為暫存器運算元。運算元本身存放於暫存器中,在指令中只是給出了幾個位的 來表示它具體存放在那個暫存器中。記憶體中的資料經過暫存器讀入cpu,進入資料的運算。記憶體運算元 存放在記憶體中 其儲存於某記憶體區域,因此叫記憶體運算元。myda...

保護模式下的分段記憶體定址

段選擇符 段暫存器中的值 32位彙編中16位段暫存器 cs ds es ss fs gs 中不再存放段基址,而是段描述符在段描述符表中的索引值,d3 d15位是索引值,d0 d1位是請求特權級 rpl 用於特權檢查,d2位是描述符表引用指示位ti,ti 0指 示從全域性描述表gdt中讀取描述符,ti...