?? pm.inc
字號:
; 描述符圖示
; 圖示一
;
; ------ ┏━━┳━━┓高地址
; ┃ 7 ┃ 段 ┃
; ┣━━┫ ┃
; 基
; 字節 7 ┆ ┆ ┆
; 址
; ┣━━┫ ② ┃
; ┃ 0 ┃ ┃
; ------ ┣━━╋━━┫
; ┃ 7 ┃ G ┃
; ┣━━╉──┨
; ┃ 6 ┃ D ┃
; ┣━━╉──┨
; ┃ 5 ┃ 0 ┃
; ┣━━╉──┨
; ┃ 4 ┃ AVL┃
; 字節 6 ┣━━╉──┨
; ┃ 3 ┃ ┃
; ┣━━┫ 段 ┃
; ┃ 2 ┃ 界 ┃
; ┣━━┫ 限 ┃
; ┃ 1 ┃ ┃
; ┣━━┫ ② ┃
; ┃ 0 ┃ ┃
; ------ ┣━━╋━━┫
; ┃ 7 ┃ P ┃
; ┣━━╉──┨
; ┃ 6 ┃ ┃
; ┣━━┫ DPL┃
; ┃ 5 ┃ ┃
; ┣━━╉──┨
; ┃ 4 ┃ S ┃
; 字節 5 ┣━━╉──┨
; ┃ 3 ┃ ┃
; ┣━━┫ T ┃
; ┃ 2 ┃ Y ┃
; ┣━━┫ P ┃
; ┃ 1 ┃ E ┃
; ┣━━┫ ┃
; ┃ 0 ┃ ┃
; ------ ┣━━╋━━┫
; ┃ 23 ┃ ┃
; ┣━━┫ ┃
; ┃ 22 ┃ ┃
; ┣━━┫ 段 ┃
;
; 字節 ┆ ┆ 基 ┆
; 2, 3, 4
; ┣━━┫ 址 ┃
; ┃ 1 ┃ ① ┃
; ┣━━┫ ┃
; ┃ 0 ┃ ┃
; ------ ┣━━╋━━┫
; ┃ 15 ┃ ┃
; ┣━━┫ ┃
; ┃ 14 ┃ ┃
; ┣━━┫ 段 ┃
;
; 字節 0,1┆ ┆ 界 ┆
;
; ┣━━┫ 限 ┃
; ┃ 1 ┃ ① ┃
; ┣━━┫ ┃
; ┃ 0 ┃ ┃
; ------ ┗━━┻━━┛低地址
;
; 圖示二
; 高地址………………………………………………………………………低地址
; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
; |7654321076543210765432107654321076543210765432107654321076543210| <- 共 8 字節
; |--------========--------========--------========--------========|
; ┏━━━┳━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓
; ┃31..24┃ (見下圖) ┃ 段基址(23..0) ┃ 段界限(15..0)┃
; ┃ ┃ ┃ ┃ ┃
; ┃ 基址2┃③│②│ ①┃基址1b│ 基址1a ┃ 段界限1 ┃
; ┣━━━╋━━━┳━━━╋━━━━━━━━━━━╋━━━━━━━┫
; ┃ %6 ┃ %5 ┃ %4 ┃ %3 ┃ %2 ┃ %1 ┃
; ┗━━━┻━━━┻━━━┻━━━┻━━━━━━━┻━━━━━━━┛
; │ \_________
; │ \__________________
; │ \________________________________________________
; │ \
; ┏━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┓
; ┃ 7 ┃ 6 ┃ 5 ┃ 4 ┃ 3 ┃ 2 ┃ 1 ┃ 0 ┃ 7 ┃ 6 ┃ 5 ┃ 4 ┃ 3 ┃ 2 ┃ 1 ┃ 0 ┃
; ┣━━╋━━╋━━╋━━╋━━┻━━┻━━┻━━╋━━╋━━┻━━╋━━╋━━┻━━┻━━┻━━┫
; ┃ G ┃ D ┃ 0 ┃ AVL┃ 段界限 2 (19..16) ┃ P ┃ DPL ┃ S ┃ TYPE ┃
; ┣━━┻━━┻━━┻━━╋━━━━━━━━━━━╋━━┻━━━━━┻━━┻━━━━━━━━━━━┫
; ┃ ③: 屬性 2 ┃ ②: 段界限 2 ┃ ①: 屬性1 ┃
; ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━┛
; 高地址 低地址
;
;
; 說明:
;
; (1) P: 存在(Present)位。
; P=1 表示描述符對地址轉換是有效的,或者說該描述符所描述的段存在,即在內存中;
; P=0 表示描述符對地址轉換無效,即該段不存在。使用該描述符進行內存訪問時會引起異常。
;
; (2) DPL: 表示描述符特權級(Descriptor Privilege level),共2位。它規定了所描述段的特權級,用于特權檢查,以決定對該段能否訪問。
;
; (3) S: 說明描述符的類型。
; 對于存儲段描述符而言,S=1,以區別與系統段描述符和門描述符(S=0)。
;
; (4) TYPE: 說明存儲段描述符所描述的存儲段的具體屬性。
;
;
; 數據段類型 類型值 說明
; ----------------------------------
; 0 只讀
; 1 只讀、已訪問
; 2 讀/寫
; 3 讀/寫、已訪問
; 4 只讀、向下擴展
; 5 只讀、向下擴展、已訪問
; 6 讀/寫、向下擴展
; 7 讀/寫、向下擴展、已訪問
;
;
; 類型值 說明
; 代碼段類型 ----------------------------------
; 8 只執行
; 9 只執行、已訪問
; A 執行/讀
; B 執行/讀、已訪問
; C 只執行、一致碼段
; D 只執行、一致碼段、已訪問
; E 執行/讀、一致碼段
; F 執行/讀、一致碼段、已訪問
;
;
; 系統段類型 類型編碼 說明
; ----------------------------------
; 0 <未定義>
; 1 可用286TSS
; 2 LDT
; 3 忙的286TSS
; 4 286調用門
; 5 任務門
; 6 286中斷門
; 7 286陷阱門
; 8 未定義
; 9 可用386TSS
; A <未定義>
; B 忙的386TSS
; C 386調用門
; D <未定義>
; E 386中斷門
; F 386陷阱門
;
; (5) G: 段界限粒度(Granularity)位。
; G=0 表示界限粒度為字節;
; G=1 表示界限粒度為4K 字節。
; 注意,界限粒度只對段界限有效,對段基地址無效,段基地址總是以字節為單位。
;
; (6) D: D位是一個很特殊的位,在描述可執行段、向下擴展數據段或由SS寄存器尋址的段(通常是堆棧段)的三種描述符中的意義各不相同。
; ⑴ 在描述可執行段的描述符中,D位決定了指令使用的地址及操作數所默認的大小。
; ① D=1表示默認情況下指令使用32位地址及32位或8位操作數,這樣的代碼段也稱為32位代碼段;
; ② D=0 表示默認情況下,使用16位地址及16位或8位操作數,這樣的代碼段也稱為16位代碼段,它與80286兼容。可以使用地址大小前綴和操作數大小前綴分別改變默認的地址或操作數的大小。
; ⑵ 在向下擴展數據段的描述符中,D位決定段的上部邊界。
; ① D=1表示段的上部界限為4G;
; ② D=0表示段的上部界限為64K,這是為了與80286兼容。
; ⑶ 在描述由SS寄存器尋址的段描述符中,D位決定隱式的堆棧訪問指令(如PUSH和POP指令)使用何種堆棧指針寄存器。
; ① D=1表示使用32位堆棧指針寄存器ESP;
; ② D=0表示使用16位堆棧指針寄存器SP,這與80286兼容。
;
; (7) AVL: 軟件可利用位。80386對該位的使用未左規定,Intel公司也保證今后開發生產的處理器只要與80386兼容,就不會對該位的使用做任何定義或規定。
;
;----------------------------------------------------------------------------
; 描述符類型值說明
; 其中:
; DA_ : Descriptor Attribute
; D : 數據段
; C : 代碼段
; S : 系統段
; R : 只讀
; RW : 讀寫
; A : 已訪問
; 其它 : 可按照字面意思理解
;----------------------------------------------------------------------------
DA_32 EQU 4000h ; 32 位段
DA_LIMIT_4K EQU 8000h ; 段界限粒度為 4K 字節
DA_DPL0 EQU 00h ; DPL = 0
DA_DPL1 EQU 20h ; DPL = 1
DA_DPL2 EQU 40h ; DPL = 2
DA_DPL3 EQU 60h ; DPL = 3
;----------------------------------------------------------------------------
; 存儲段描述符類型值說明
;----------------------------------------------------------------------------
DA_DR EQU 90h ; 存在的只讀數據段類型值
DA_DRW EQU 92h ; 存在的可讀寫數據段屬性值
DA_DRWA EQU 93h ; 存在的已訪問可讀寫數據段類型值
DA_C EQU 98h ; 存在的只執行代碼段屬性值
DA_CR EQU 9Ah ; 存在的可執行可讀代碼段屬性值
DA_CCO EQU 9Ch ; 存在的只執行一致代碼段屬性值
DA_CCOR EQU 9Eh ; 存在的可執行可讀一致代碼段屬性值
;----------------------------------------------------------------------------
; 系統段描述符類型值說明
;----------------------------------------------------------------------------
DA_LDT EQU 82h ; 局部描述符表段類型值
DA_TaskGate EQU 85h ; 任務門類型值
DA_386TSS EQU 89h ; 可用 386 任務狀態段類型值
DA_386CGate EQU 8Ch ; 386 調用門類型值
DA_386IGate EQU 8Eh ; 386 中斷門類型值
DA_386TGate EQU 8Fh ; 386 陷阱門類型值
;----------------------------------------------------------------------------
; 選擇子圖示:
; ┏━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┓
; ┃ 15 ┃ 14 ┃ 13 ┃ 12 ┃ 11 ┃ 10 ┃ 9 ┃ 8 ┃ 7 ┃ 6 ┃ 5 ┃ 4 ┃ 3 ┃ 2 ┃ 1 ┃ 0 ┃
; ┣━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━╋━━╋━━┻━━┫
; ┃ 描述符索引 ┃ TI ┃ RPL ┃
; ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━┻━━━━━┛
;
; RPL(Requested Privilege Level): 請求特權級,用于特權檢查。
;
; TI(Table Indicator): 引用描述符表指示位
; TI=0 指示從全局描述符表GDT中讀取描述符;
; TI=1 指示從局部描述符表LDT中讀取描述符。
;
;----------------------------------------------------------------------------
; 選擇子類型值說明
; 其中:
; SA_ : Selector Attribute
SA_RPL0 EQU 0 ; ┓
SA_RPL1 EQU 1 ; ┣ RPL
SA_RPL2 EQU 2 ; ┃
SA_RPL3 EQU 3 ; ┛
SA_TIG EQU 0 ; ┓TI
SA_TIL EQU 4 ; ┛
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
; 分頁機制使用的常量說明
;----------------------------------------------------------------------------
PG_P EQU 1 ; 頁存在屬性位
PG_RWR EQU 0 ; R/W 屬性位值, 讀/執行
PG_RWW EQU 2 ; R/W 屬性位值, 讀/寫/執行
PG_USS EQU 0 ; U/S 屬性位值, 系統級
PG_USU EQU 4 ; U/S 屬性位值, 用戶級
;----------------------------------------------------------------------------
; 宏 ------------------------------------------------------------------------------------------------------
;
; 描述符
; usage: Descriptor Base, Limit, Attr
; Base: dd
; Limit: dd (low 20 bits available)
; Attr: dw (lower 4 bits of higher byte are always 0)
%macro Descriptor 3
dw %2 & 0FFFFh ; 段界限 1 (2 字節)
dw %1 & 0FFFFh ; 段基址 1 (2 字節)
db (%1 >> 16) & 0FFh ; 段基址 2 (1 字節)
dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) ; 屬性 1 + 段界限 2 + 屬性 2 (2 字節)
db (%1 >> 24) & 0FFh ; 段基址 3 (1 字節)
%endmacro ; 共 8 字節
;
; 門
; usage: Gate Selector, Offset, DCount, Attr
; Selector: dw
; Offset: dd
; DCount: db
; Attr: db
%macro Gate 4
dw (%2 & 0FFFFh) ; 偏移 1 (2 字節)
dw %1 ; 選擇子 (2 字節)
dw (%3 & 1Fh) | ((%4 << 8) & 0FF00h) ; 屬性 (2 字節)
dw ((%2 >> 16) & 0FFFFh) ; 偏移 2 (2 字節)
%endmacro ; 共 8 字節
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -