-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpm.inc
83 lines (74 loc) · 3.29 KB
/
pm.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
; 描述符类型值说明
; 其中:
; DA_ : Descriptor Attribute
; D : 数据段
; C : 代码段
; S : 系统段
; R : 只读
; RW : 读写
; A : 已访问
; 其它 : 可按照字面意思理解
;G D 0 AVL 0 0 0 0 P DPL(2位) DT TYPE(4位)
DA_32 EQU 4000h ; 32 位段 0100 0000 0000 0000
DA_DPL0 EQU 00h ; DPL = 0 0000 0000
DA_DPL1 EQU 20h ; DPL = 1 0010 0000
DA_DPL2 EQU 40h ; DPL = 2 0100 0000
DA_DPL3 EQU 60h ; DPL = 3 0110 0000
;----------------------------------------------------------------------------
; 存储段描述符类型值说明
;----------------------------------------------------------------------------
DA_DR EQU 90h ; 存在的只读数据段类型值 1001 0000
DA_DRW EQU 92h ; 存在的可读写数据段属性值 1001 0010
DA_DRWA EQU 93h ; 存在的已访问可读写数据段类型值 1001 0011
DA_C EQU 98h ; 存在的只执行代码段属性值 1001 1000
DA_CR EQU 9Ah ; 存在的可执行可读代码段属性值 1001 1010
DA_CCO EQU 9Ch ; 存在的只执行一致代码段属性值 1001 1100
DA_CCOR EQU 9Eh ; 存在的可执行可读一致代码段属性值 1001 1110
;----------------------------------------------------------------------------
; 系统段描述符类型值说明
;----------------------------------------------------------------------------
DA_LDT EQU 82h ; 局部描述符表段类型值 1000 0010
DA_TaskGate EQU 85h ; 任务门类型值 1000 0101
DA_386TSS EQU 89h ; 可用 386 任务状态段类型值 1000 1001
DA_386CGate EQU 8Ch ; 386 调用门类型值 1000 1100
DA_386IGate EQU 8Eh ; 386 中断门类型值 1000 1110
DA_386TGate EQU 8Fh ; 386 陷阱门类型值 1000 1111
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
; 选择子类型值说明
; 其中:
; SA_ : Selector Attribute
SA_RPL0 EQU 0 ; ┓00
SA_RPL1 EQU 1 ; ┣ RPL01
SA_RPL2 EQU 2 ; ┃10
SA_RPL3 EQU 3 ; ┛11
SA_TIG EQU 0 ; ┓TI 0000
SA_TIL EQU 4 ; ┛ 0100
;----------------------------------------------------------------------------
; 宏 ------------------------------------------------------------------------------------------------------
;
; 描述符
; usage: Descriptor Base, Limit, Attr
; Base: dd
; Limit: dd (low 20 bits available)低二十位可用
; Attr: dw (lower 4 bits of higher byte are always 0)高字节的低四位始终为0
%macro Descriptor 3 ;段界限为低地址 1代表Base 2代表Limit 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 ;1代表Selector 2代表Offset 3代表DCount 4代表Attr
dw (%2 & 0FFFFh) ; 偏移 1 (2 字节)
dw %1 ; 选择子 (2 字节)
dw (%3 & 1Fh) | ((%4 << 8) & 0FF00h) ; 属性 (2 字节)
dw ((%2 >> 16) & 0FFFFh) ; 偏移 2 (2 字节)
%endmacro ; 共 8 字节