段寄存器(segement register) 段選擇符(segement selector) 段描述符(segement descriptor) 學習總結

段寄存器(segement register) 段選擇符(segement selector) 段描述符(segement descriptor) 學習總結

1 段寄存器
段寄存器包括CS,SS,DS,ES,FS,GS。結構如下圖:
這裏寫圖片描述
段寄存器包括可見部分和不可見部分。可見部分是段選擇符字段,不可見部分包括基地址字段、界限字段和訪問信息。段寄存器首先加載段選擇符來填充可見部分,不可見部分的字段由段選擇符指向GDT或LDT中的段描述符的字段填充。

2 段選擇符(Segment Selectors)
段選擇符爲16位,描述段的一些信息,它不是直接指向段,指向在GDT或LDT中的段描述符。如下圖所示,
這裏寫圖片描述
段選擇符的包含以下字段:
索引(index)—位3到位15。可以在GDT或LDT中尋址到213(8192)個描述符。
TI標誌—位2。爲0,描述符在GDT中,爲1,描述符在LDT中。如下圖所示。
這裏寫圖片描述
請求特權級(RPL)—位0到位1。表示特權級0,1,2,3。描述符中則爲DPL(描述特權級)。

3 段描述符(Segment descriptors)
段描述符是保存在GDT或LDT中一種數據結構,爲處理器提供段的大小和位置以及控制和狀態信息。通常段描述符是由編譯器,連接器,裝載器或操作系統生成,而不是應用程序。下圖描述段描述符的結構:
這裏寫圖片描述
段選擇符的字段如下:
(1)段界限字段—指定段的大小。段界限字段爲20位,如果G標誌設置,表明表明段的大小從4KB到4GB,4KB增長;如果G標誌清除,段的大小從1Byte到1Mbyte。
(2)基地址字段—32位,定義在4GB的線性地址空間中段0字節的位置(開始位置)。
(3)類型字段—說明段或門的類型和指出段的訪問方式和增長方向。跟是否是應用程序(代碼或數據)描述符或者系統描述符有關。
(4)S標誌—被清除,說明是系統段;設置,說明是代碼或數據段。
(5)DPL字段—說明段的特權級0,1,2,3。
(6)P標誌—置位,說明該段在內存中;被清除,說明該段不在內存中。
(7)D/B標誌—根據段描述符是可執行代碼段、向下擴展的數據段還是棧段完成不同功能。如果是可執行代碼段,該標誌稱爲D標誌,表明指令引用段中有效地址和操作數的長度。如果是棧段,該標誌稱爲B標誌,表明隱式棧操作(pops,pushes,calls)棧指針的大小。如果是向下擴展的數據段—該標誌稱爲B標誌,表明段的上限。
(8)G標誌—決定段的界限字段的的大小和步進。
(9)L標誌—表明代碼段是否包含原生的64位代碼,爲1表明該代碼段的指令運行在64位模式,爲0表明代碼段指令運行在32位模式。
(10)可用和保留位—系統軟件可用或保留。

代碼段、數據段和系統段的結構如下圖:

這裏寫圖片描述
選擇符和描述符的關係舉例:
由選擇符訪問描述表中的描述符,得到基址信息,在加上偏移,完成邏輯地址向線性地址(虛擬地址)的轉變。

這裏寫圖片描述

good luck!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章