描述符分三类:存储段描述符,系统段描述符,门描述符
存储段:
dw: limit 0..15(长度-1)
dw: base 0..15
db: base 16..23
db: attribute:
P: 1 bit 正常是1,表示存在
DPL: 2 bits: 特权级,00,01,10,11
DT1: 1 bit DT = 1, 存储段,DT = 0, 系统段和门描述符
TYPE: 4 bits
bit 0: A 访问标记 A=1,段已被访问
bit 1: E=0(数据段)时,W, 是否可写,W=1,数据段可写.
E=1, R, 是否可读, R=0, 不可读,只能执行. R=1,可读可执行.
bit 2: ED,E=0时的扩展方向,ED=1,向高端扩展,ED=0,向低端扩展
bit 3: E,段类型 E=1,可执行段,即代码段, 总是不可写
E=0 数据段, 总是不可执行,但总是可读的.
对于数据段:一般是2 读,写
对于代码段:一般是a,执行,可读
db: G, 段界粒度(Granularity) G=0,字节, G=1,4k字节
D, 1. 可执行段: 指令地址和操作数默认大小 D=1, 32地址,32位操作数或8位操作数,即32位代码段
D=0 16 16 8 16
可以使用前缀改变,比如mov ebx, dword [...]
2. 在向下扩展的数据段中,D位决定段的上部边界,D=1表示上部界限为4G, D=0,表示64K
3. SS寄存器寻址的段描述符中,D位决定隐式的堆栈访问指令(如PUSH、POP)使用何种堆栈指针寄存器
D=1, 用esp D=0, 用sp
0,
AVL, 未定义
limit 16..19
db: base 24..31
系统段:任务状态段和描述LDT的段
属性部分,即5,6字节不一样,limit和base是一样的。
db: attribute 1
P
DPL
DT = 0
TYPE: 常用:2, LDT, 系统段
5, 任务门
9, 可用386TSS 系统段
B,忙的386TSS 系统段
C, 386调用门
E, 386中断门
F, 386陷阱门
db: attribute 2
G
X: D位在这里无效,以X代替。
0
AVL
门描述符:
字符5与系统段保持一致,其它都变了。
dw: offset 0..15
dw: selector
db: attribute 1 高三位为0,
低5位为dword count,只用于调用门:发生特权级变换时,要把外层堆栈的参数
复制到内层堆栈,dword count记录要复制的双字参数的数量
db: attribute 2 与系统段一致
dw: offset 16..31
1.调用门:子程序入口,使用段间调用指令call, 通过调用门可实现任务内从外层特权级变换到内层特权级.
2.任务门:selector要指向GDT中的tss段描述符.门中偏移无意义。
任务的入口点保存在tss中,利用段间转移jmp和段间调用call, 通过任务门实现任务切换。
3.中断门和陷阱门:中断、异常处理程序的入口点。中断门和陷阱门的描述符放在IDT中。
DATA SEGMENT DESCRIPTOR
+-----------------+-+-+-+-+---------+-+-----+---------+-----------------+
|#################|#|#|#|A| LIMIT |#| | TYPE |#################|
|###BASE 31..24###|G|B|0|V| 19..16 |P| DPL | |###BASE 23..16###| 4
|#################|#|#|#|L| |#| |1|0|E|W|A|#################|
|-----------------+-+-+-+-+---------+-+-----+-+-+-+-+-+-----------------|
|###################################| |
|########SEGMENT BASE 15..0#########| SEGMENT LIMIT 15..0 | 0
|###################################| |
+-----------------+-----------------+-----------------+-----------------+
EXECUTABLE SEGMENT DESCRIPTOR
31 23 15 7 0
+-----------------+-+-+-+-+---------+-+-----+---------+-----------------+
|#################|#|#|#|A| LIMIT |#| | TYPE |#################|
|###BASE 31..24###|G|D|0|V| 19..16 |P| DPL | |###BASE 23..16###| 4
|#################|#|#|#|L| |#| |1|0|C|R|A|#################|
|-----------------+-+-+-+-+---------+-+-----+-+-+-+-+-+-----------------|
|###################################| |
|########SEGMENT BASE 15..0#########| SEGMENT LIMIT 15..0 | 0
|###################################| |
+-----------------+-----------------+-----------------+-----------------+
SYSTEM SEGMENT DESCRIPTOR
31 23 15 7 0
+-----------------+-+-+-+-+---------+-+-----+-+-------+-----------------+
|#################|#|#|#|A| LIMIT |#| | | |#################|
|###BASE 31..24###|G|X|0|V| 19..16 |P| DPL |0| TYPE |###BASE 23..16###| 4
|#################|#|#|#|L| |#| | | |#################|
|-----------------+-+-+-+-+---------+-+-----+-+-------+-----------------|
|###################################| |
|########SEGMENT BASE 15..0#########| SEGMENT LIMIT 15..0 | 0
|###################################| |
+-----------------+-----------------+-----------------+-----------------+
A - ACCESSED E - EXPAND-DOWN
AVL - AVAILABLE FOR PROGRAMMERS USE G - GRANULARITY
B - BIG P - SEGMENT PRESENT
C - CONFORMING R - READABLE
D - DEFAULT W - WRITABLE
DPL - DESCRIPTOR PRIVILEGE LEVEL