1.2 段描述符
80386 的描述符类型一共两种,除了段描述符还有一种是门描述符,门描述符一共三
种类型:任务门、中断门和陷阱门。门描述符和段描述符差别很大,很多字段意义完全不
同。关于门描述符的内容在
中断异常处理与系统调用
一章中讲述。这里只讲述段描述符。
在保护方式下,每一个段都有一个相应的 8 字节描述符来描述。段描述符中保存了段
的所有属性,如段基地址,段限长,段特权级等。程序通过段描述符可以得到段的所有属
性。
1.1.1 存储段描述符
TYPE 说明存储段描述符所描述的存储段的具体属性。
其中的位 0 指示描述符是否被访问过(Accessed),用符号 A 标记。A=0 表示尚未被访问,
A=1 表示段已被访问。当把描述符的相应选择子装入到段寄存器时,80386 把该位置为 1,
表明描述符已被访问。操作系统可测试访问位,已确定描述符是否被访问过。
其中的位 3 指示所描述的段是代码段还是数据段,用符号 E 标记。E=0 表示段为数据段,
相应的描述符也就是数据段(包括堆栈段)描述符。数据段是不可执行的,但总是可读的。
E=1 表示段是可执行段,即代码段,相应的描述符就是代码段描述符。代码段总是不可写
的,若需要对代码段进行写入操作,则必须使用别名技术,即用一个可写的数据段描述符
来描述该代码段,然后对此数据段进行写入。
在数据段描述符中(E=0 的情况),TYPE 中的位 1 指示所描述的数据段是否可写,用 W
标记。 W=0 表示对应的数据段不可写。反之,W=1 表示数据段是可写的。注意,数据段
总是可读的。TYPE 中的位 2 是 ED 位,指示所描述的数据段的扩展方向。ED=0 表示数据
段向高端扩展,也即段内偏移必须小于等于段界限。ED=1 表示数据段向低扩展,段内偏
移必须大于段界限。
在代码段描述符中(E=1 的情况),TYPE 中的位 1 指示所描述的代码段是否可读,用符
号 R 标记。R=0 表示对应的代码段不可读,只能执行。R=1 表示对应的代码段可读可执行。
注意代码段总是不可写的,若需要对代码段进行写入操作,则必须使用别名技术。在代码
07152331
限长
19..16
段限长( LIMIT ) 15..0
AV
L
0
D
G
段基地址( BASE ) 15..0
段基地址
( BASE ) 31..24
段基地址
( BASE ) 23..16
type
P
1
DPL
3239475564
评论0