http://hi.baidu.com/study_together/

段描述符:代码段描述符、数据段描述符、系统描述符

系统描述符:系统段描述符、门描述符

                     系统段描述符:局部描述符表(LDT)的段描述符、任务状态段(TSS)描述符

                     门描述符:调用门描述符、中断门描述符、陷阱门描述符、任务门描述符。

 

 

部分段限长、基地址被存放在2个或3个位置,将由CPU按照值的高位存放在内存高地址处的规则进行整合。

 

1. 段选择子

15...3

2

1...0

索引值

TI

RPL

(1) 索引值(index):给出了描述符在GDTLDT中的索引项号;

(2) 表指示标志TI(Table Index)TI=0 描述符在GDT,TI1 描述符在LDT

(3) 请求特权级RPL(Requested Privilege Level)0123三个特权级。

 

2. 段描述符的一般格式(先高32位,后低32位,下同)

31...24

23

22

21

20

19...16

15

14...13

12

11...8

7...0

基地址

G

D/B

保留位

AVL

段限长

P

DPL

S

TYPE

基地址

 

31...16

15...0

基地址

段限长

 

3. 数据段描述符

31...24

23

22

21

20

19...16

15

14...13

12

11...8

7...0

基地址

G

B

0

AVL

段限长

P

DPL

1

0

E

W

A

基地址

 

31...16

15...0

基地址

段限长

 

4. 代码段描述符:

 

31...24

23

22

21

20

19...16

15

14...13

12

11...8

7...0

基地址

G

D

0

AVL

段限长

P

DPL

1

1

C

R

A

基地址

 

31...16

15...0

基地址

段限长

 

5. 系统段描述符

31...24

23

22

21

20

19...16

15

14...13

12

11...8

7...0

基地址

G

 

0

 

段限长

P

DPL

0

TYPE

基地址

 

31...16

15...0

基地址

段限长

 

6. 任务状态段TSS描述符

31...24

23

22

21

20

19...16

15

14...13

12

11...8

7...0

基地址

G

0

0(保留)

AVL

段限长

P

DPL

0

1

0

B

1

基地址

 

31...16

15...0

基地址

段限长

 

7. 调用门描述符

31...16

15

14...13

12

11...8

7...5

4...0

段中偏移值

P

DPL

0(S)

1100(TYPE)

000

参数个数

 

31...16

15...0

段选择符

段中偏移值

 

8. 中断门描述符

31...16

15

14...13

12

11...8

7...5

4...0

过程入口点偏移值

P

DPL

 

(TYPE)

 

 

 

31...16

15...0

段选择符

过程入口点偏移值

 

9. 陷阱门描述符

31...16

15

14...13

12

11...8

7...5

4...0

过程入口点偏移值

P

DPL

0(S)

1111(TYPE)

000

 

 

10. 任务门描述符

31...16

15

14...13

12

11...8

7...0

 

P

DPL

 

 

 

 

31...16

15...0

段选择符

(1) G颗粒度标志(Granularity):确定段限长字段Limit值的单位,G=0 单位为B,G=1 单位为4KB(不影响基地址颗粒度,总为B)

(2) D/B:对于可执行代码段,称为D标志,D0 默认16位地址和16位或8位操作数,D=1 默认32位地址和32位操作数或8位操作数.(指令前缀0x66:选择非默认值的操作数大小,0x67 选择非默认值的地址大小)

对于栈段,称为B标志,B=0 使用16位栈指针,B=1 使用32位栈指针.

对于下扩数据段,称为B标志,B=0 堆栈段上界限0xFFFF(64KB),B=1 堆栈段上界限0xFFFFFFFF(4GB)

32位代码段和数据段总是设置为1,16位代码段和数据段总是设置为0

(上扩段:偏移地址 0~段限长
下扩段:偏移地址 段限长~ 最大地址(0xffff或 0xffffffff,根据B标志决定))

(3) 21保留位:总是设置为0

(4) AVL:软件可利用位。80386对该位的使用未做规定,Intel公司也保证今后开发生产的处理器只要与80386兼容,就不会对该位的使用做任何定义或 规定。

(5) 段限长(Segment limit field):段的长度,有多个段限长字段的由处理器合并;

(6) P段存在标志(Segment present)p=0 段不在内存中,p=1 段在内存中;

(7) DPL描述符特权级字段(Descriptor privilege level)

(8) S描述符类型标志(Descriptor type flag)S=0 系统段描述符,S=1 代码段或数据段描述符

(9) TYPE:段类型字段(Type field)

对于数据段描述符,4bit由高到低,0EWA,E0 向上扩展 E1 向下扩展,W0 只读W1 可写,A0 未访问 A1 已访问

对于代码段描述符,4bit由高到低,1CRA,C0 非一致代码段C1 一致代码段,R=0 只执行R1执行/可读,A0 未访问 A1 已访问

对于TSS描述符,4bit由高到低,10B1 ,B=0 任务处于非活动状态, B=1 任务正忙

对于系统段描述符和门描述符如下:

 

 

十进制

二进制

说明

0

0000

Reserved,保留

1

0001

16-Bit TSS(Available),16TSS(可用)

2

0010

LDT

3

0011

16-Bit TSS(Busy)

4

0100

16-Bit Call Gate,16位调用门

5

0101

Task Gate,任务门

6

0110

16-Bit Interrupt Gate,16位中断门

7

0111

16-Bit Trap Gate,16位陷阱门

8

1000

Reserved

9

1001

32-Bit TSS(Available)

10

1010

Reserved

11

1011

32-Bit TSS(Busy)

12

1100

32-Bit Call gate

13

1101

Reserved

14

1110

32-Bit Interrupt Gate

15

1111

32-Bit Trap Gate