1. 程式人生 > >轉發: 段選擇符,段描述符,段暫存器

轉發: 段選擇符,段描述符,段暫存器

段暫存器(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)可用和保留位—系統軟體可用或保留。

程式碼段、資料段和系統段的結構如下圖:

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

這裡寫圖片描述

--------------------- 本文來自 chen123lin 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/chen1540524015/article/details/74075397?utm_source=copy