描述表的概念(详细)

来源:互联网 发布:青海省2016年经济数据 编辑:程序博客网 时间:2024/05/22 15:37
2010-05-05 14:49

描述符

*1.存储段描述符

 

80x86存储段描述符(共8字 节)

                          (图1)

属性字段(第5,6字 节)

 

 

我们先来看看这8个字节中我感觉最复杂的TYPE这 四位标志吧,然后在看看其他的位

第五字节低四位为描述符的类型描述,下面主要将这四位单独抽出进行说明:

__________________________________

|      |       |     |     |

| 3   | 2    | 1 | 0 |

| E   |       |     | A |

_________________________________

 

(1)位0指示描述符是否被访问过(Accessed), 用符号A标记。A=0表示尚未被访问,A=1 表示段已被访问。当把描述符的相应选择子装入到段寄存器时,80386把 该位置为1,表明描述符已被访问。操作系统可测试访问位,已确定描述符是否被访问过

(2)位3指示所描述的段是代码段还是数据段,用符 号E标记。E=0表示段为数据段,相应的描 述符也就是数据段(包括堆栈段)描述符。数 据段是不可执行的,但总是可读的。 E=1表示段是可执行段,即代码段,相应的描述符就是代码段描 述符。代码段总是不可写的,若需要对代码段进行写入操作,则必须使用别名技术,即用一个可写的数据段描述符来描述该代码段,然后对此数据段进行写入。

 

___________________________________

|      |       |     |     |

| 3   | 2    | 1 | 0 |

| E=0 | ED   | W |  A |

_________________________________

(3)在数据段描述符中(E=0的情况, ,如上图所示),TYPE中 的位1指示所描述的数据段是否可写,用W标 记。 W=0表示对应的数据段不可写。反之,W=1表 示数据段是可写的。注意,数据段总是可读的。

TYPE中的位2是ED位, 指示所描述的数据段的扩展方向。ED=0表示数据段向高端扩展,也即段内偏移必须小于等于段界限。ED=1表 示数据段向低扩展,段内偏移必须大于段界限。

___________________________________

|      |       |     |     |

| 3   | 2    | 1 | 0 |

| E=1 | C    | R | A |

_________________________________

(4)在代码段描述符中(E=1的情况,如上图所示),TYPE中 的位1指示所描述的代码段是否可读,用符号R标 记。R=0表示对应的代码段不可读,只能执行。R=1表 示对应的代码段可读可执行。注意代码段总是不可写的,若需要对代码段进行写入操作,则必须使用别名技术。

在代码段中,TYPE中的位2指 示所描述的代码段是否是一致代码段,用C标记。C=0表 示对应的代码段是非一致代码段(普通代码段),C=1表 示对应的代码段是一致代码段。

 

小结:(如下图)

                                     (图2)

 

上面这些我在初学保护模式的时候感觉很迷惑,所以先拿出来说说,下面再看看其他的标志位.

 

一.段基址与段界限

从图一我们可以看出基地址长32位,被安排在2,3,4,7字 节中,段界限长20位,被安排在0,1字 节与第6字节的低4位中。

使用两个域存放段基地址和段界限的原因与80286有关。在80286保 护方式下,段基地址只有24位长,而段界限只有16位 长。80286存储段描述符尽管也是8字节 长,但实际只使用低 6字节,高2字节必须 置为0。80386存储段描述符这样的安 排,可使得80286的存储段描述符的格式在80386下 继续有效。

 

二.

(1)P位称为存在(Present)位。P=1表 示描述符对地址转换是有效的,或者说该描述符所描述的段存在,即在内存中;P=0表示描述符对地址 转换无效,即该段不存在。使用该描述符进行内存访问时会引起异常。

 

(2)DPL表示描述符特权级(Descriptor Privilege level),共2位。它规定了所描述段的特权级,用于特权检查,以决 定对该段能否访问

 

(3)DT位说明描述符的类型。对于存储段描述符而言,DT=1, 以区别与系统段描述符和门描述符(DT=0)。

 

(4)TYPE标志,即开篇讲得那堆。

 

(5)G为就是段界限粒度(Granularity)位。G=0表 示界限粒度为字节;G=1表示界限粒度为4K 字 节。注意,界限粒度只对段界限有效,对段基地址无效,段基地址总是以字节为单位。

 

补充:段界限规定段的大 小。在80386保护模式下,段界限用20位表示,而且段界限可以是以字节为单位或以4K字 节为单位。段属性中有一位对此进行定义,把该位成为粒度位,用符号G标记。G=0表示段界限以字节 位位单位,于是20位的界限可表示的范围是1字节至1M字节,增量为1字 节;G=1表示段界限以4K字节为单位,于是20位的界限可表示的范围 是4K字节至4G字节,增量为4K字节。当段界限以4K字 节为单位时,实际的段界限LIMIT可通过下面的公式从20 位段界限Limit计 算出来:

LIMIT=limit*4K+0FFFH=(Limit SHL 12)+0FFFH

所以当粒度为1时,段的界限实际上就扩展成32位。 由此可见,在80386保护模式下,段的长度可大大超过64K字节。

 

 

 (6)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兼 容,就不会对该位的使用做任何定义或规定。

 

 

 

三:.存储段描述符的结构类型表示

 

; 宏 (注:采用nasm语 法)

; 描述符

; 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 字节

 

 

*2.系统段描述符

在上面我们讲过对于存储段描述符其DT位为1, 当描述符的DT位为0时,那么这个描述符所 描述的就是一个系统段描述符了。

 

系统段是为了实现存储管理机制所使用的一种特别的段。在80386中,有两种系 统段:任务状态段TSS和局部描述符表LDT段。 用于描述系统段的描述符称为系统段描述符。

 

系统段描述符与存储段描述符几乎一模一样,但也有一定的差别:

(1)   DT位,DT=1表 示存储段,DT=0表示系统段。

(2)   D位,D位 在系统段中不使用。

(3)   与存储段最不相同的是TYPE段。系 统段描述符的类型字段TYPE仍是4位,其其含义与存储段描述符的类型却完全不同。只有类型编码为2、1、3、9和B的 描述符才是真正的系统段描述符,它们用于描述系统段LDT和任务状态段TSS,其它类型的描述符是 门描述符。具体见下表:

                        图3

 

**LDT段描述符

LDT段描述符描述任务的局部描述符表段。LDT段 描述符必须安排在全局描述符表中才有效。在装载LDTR寄存器时,描述符中的LDT段 基地址和段界限等信息被装入LDT段描述符高速缓冲寄存器中。

 

**.任务状态段描述符

任务状态段TSS用于保存任务的各种状态信息。任务状态段描述符描述某个任务状 态段TSS描述符分为286TSS和386TSS两 类。TSS描述符规定了任务状态段的基地址和任务状态段的大小等信息。在装载任务状态段寄存器TR时, 描述符中的段基地址和段界限等信息被装入到TR的高速缓冲寄存器中。在任务切换或执行LTR指 令时,要装载TR寄存器。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老婆一直要管我的钱怎么办 老公不肯把钱交给老婆管怎么办 愿意和做朋友不愿意做情侣怎么办 欠信用卡碰到第三方不愿协调怎么办 qq密码忘记了申诉不回来怎么办 当你老公烦你了你该怎么办 自己有漂亮媳妇还经常想去嫖怎么办 微信号封了找不到好友解封怎么办 别人总是提起你的黑历史怎么办 换了手机微信登录不上怎么办 qq不小心清空了聊天记录怎么办 人家介绍了外地媳妇跑了怎么办 火锅想吃香菜牛肉没有签子串怎么办 想读外省大学但家人反对怎么办 13岁被同学忽视他不知道怎么办 老婆发现老公在微信暧昧聊天怎么办 老婆微信和别人聊天暧昧我该怎么办 淘宝修改标题宝贝被删了怎么办 百度网盘上的相片变的模糊怎么办 微信2不小心删了怎么办 房屋没交接前给钥匙出现问题怎么办 微信银行卡注销零钱没了怎么办 贴小广告电话被城管上报停机怎么办 没有id密码怎么办已经锁死了屏幕 电信电话卡注销了里面的钱怎么办 支付宝绑定的手机号成空号了怎么办 支付宝绑定的手机号空号了怎么办 支付宝绑定的手机号码空号了怎么办 注册支付宝的手机号成空号了怎么办 银行保本理财回执单丢了怎么办 电脑连不上网ip地址错误怎么办 邮箱填错了没收到面试通知怎么办 电信烽火网络机顶盒零配置中怎么办 专技天下学错科目了怎么办 注册公司行业大类选错了怎么办 私营企业开的车比领导好怎么办 有公司有商标无生产资质怎么办 天猫店铺使用商标被注销怎么办 入仓件快递员搞错入仓号怎么办 商标注册证盖了自己公司的章怎么办 普通机打发票作废票丢了怎么办