(4)段描述符P,G位

2021-10-09 17:57:16 字數 1700 閱讀 3916

在前面的課程學習中我們了解到,段暫存器有96位,其中80位不可見,包括base,limit,attribute。16位可見,即段選擇子selector。

對段暫存器進行寫入時,cpu根據段選擇子到gdt表中尋找段描述符,段描述符共8位元組,64位,cpu根據段描述符填充段暫存器。

那麼問題就是,如何用64位的段描述符來填充80位的段暫存器呢?為了解決該問題,我們需要學習段描述符的p,g位。

段描述符結構

段暫存器結構

這個位比較簡單,當p=1時,段描述符有效;當p=0時,段描述符無效。

由於intel考慮向前相容,我們會發現段描述符的結構比較混亂,東一塊西一塊的。attribute在段描述符高4位元組的8-23位,base在段描述符的低4位元組的16-31位,高4位元組的0-7位和24-31位。上述兩個屬性沒有資料丟失,段暫存器和段描述符內的位數是一樣多的。而limit在段暫存器內佔32位,在段描述符內只有20位。

當g=0時,limit的範圍是0x00000000-0x000fffff,其中,段描述符的20位在低位,高位補0.

當g=1時,limit的範圍是0x00000fff-0xffffffff,其中,段描述符的20位在高位,低位補f。

給出下列5個段選擇子,從gtd表中查詢對應的段描述符,然後填充到段暫存器中。

3、將段描述符填寫到段暫存器結構體中(段選擇子:23 2b 30 3b 53)

2300100 0 11

index:4

00cff300`0000ffff

word selector: 23

word atrribute: cff3

dword base: 00000000

dword limit: ffffffff

2b00101 0 11

index:5

80008b04`200020ab

word selector: 2b

word atrribute: 008b

dword base: 80042000

dword limit:000020ab

3000110 0 00

index:6

ffc093df`f0000001

word selector: 30

word atrribute: c093

dword base: ffdff000

dword limit: 00001fff

3b00111 0 11

index:7

0040f300`00000fff

word selector: 3b

word atrribute: 40f3

dword base: 00000000

dword limit: 00000fff

5301010 0 11

index:a

80008954`af000068

word selector: 53

word atrribute: 0089

dword base: 8054af00

dword limit: 00000068

段描述符屬性DB位,段許可權檢查

描述符屬性 db位 情況一 對cs段的影響 d 1 採用32位定址方式 d 0 採用16位定址方式 字首67 改變定址方式 情況二 對ss段的影響 d 1 隱式堆疊訪問指令 如 push pop call 使用32位堆疊指標暫存器esp d 0 隱式堆疊訪問指令 如 push pop call 使用...

段描述符屬性P位和G位

前言 段描述符屬性p位和g位筆記 自己在學習段描述符與段選擇子的時候有提出乙個問題,如下圖所示,這個問題老師在段描述符屬性p位和g位中提及 因為老師說段暫存器是有96位的,但是可以發現段描述符的64位再加上段選擇子16位,實際總共才是80位,那剩下的16位是從 來的呢?這裡再來看下段描述符的結構 首...

04 段描述符屬性P位與G位

在前面篇章裡我們知道,寫段暫存器是通過段選擇子查gdt表中段描述符來填充剩餘的80位,但是段描述符只有64位,這就涉及到怎麼填充的問題 下面重新貼出段描述符屬性結構,如下圖 這篇講的p位位於高四位元組的15位,g位位於高四位元組的23位 p位的作用 p位說明當前段描述符是否有效,p為1時說明段描述符...