汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-09-28 10:59] 存储段描述符

用于表示定义段的三个参数的数据称为‘描述符’。每个描述符长8个字节。在保护模式下,每一个段都有一个相应的描述符来描述。
    存储段是存放可由程序直接进行访问的代码和数据的段。存储段描述符描述存储段,所以,存储段描述符也被称为代码和数据段描述符。长32位的段基地址(即段的开始地址)被安排在描述符的两个域中,其位0~23安排在描述符内第2~4字节中,其位24~31被安排在描述符的第7字节中。长20位的段界限也被安排在描述符的两个域中,其位0~15被安排在描述符内的第0~1字节,其位16~19被安排在描述符内的第6字节的低4位中。
    描述符的段属性也被安排在两个域中。其详细说明如下:
①P位,称为存在位。位于段属性位7。P=1表示描述符对地址转换是有效的,或者表示该段描述符所描述的段存在。P=0则表示描述符对地址转换无效,并且引用该描述符会引起异常。
②DPL,位于段属性位5~6,表示描述符特权级,共2位。它规定了该描述符的特权级,用于特权检查,以决定对该段能否进行访问。
③DT位,位于段属性位4。用于说明描述符类型。对于存储段描述符而言,DT=1以区别系统段描述符和门描述符(DT=0)。
④TYPE位,位于段属性位0~3。说明存储段描述符所描述的存储段的具体属性。
    其中位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则表示对应的代码段可读可执行。TYPE中的位2指示所描述的代码段是否是一致码段,用途C标记。C=0表示对应的代码段不是一致码段,C=1表示对应的代码段是一致码段。
⑤G位,就是段界限粒度位。 G=0表示界限粒度为字节,G=1表示界限粒度为4K字节。注意,界限粒度只对段界限有效,对端基地址无效,段基地址总是以字节为单位的。
⑥D位是一个很特殊的位。在描述可执行段、向低扩展数据段或由SS寻址的段(堆栈段)的三种描述符中的意义各不相同
    在描述可执行段的描述符中, D位决定了指令所使用的地址及操作数所默认的大小。D=1表示默认情况下使用32位地址及32位或8位操作数,这样的代码段也成文32位代码段;D=0则表示默认情况下使用16位地址及16位或8位操作数, 这样的代码段也称为16位代码段。
    在向低扩展数据段的描述符中,D位决定了段的上部边界。D=1表示段的上部界限为4G;D=0表示段的上部界限为64KB这是为了与8086兼容。
    在描述由SS寻址的段描述符中,D位决定了隐式的堆栈访问指令(如push,pop等)使用何种堆栈指针寄存器。D=1表示使用32位的ESP;D=0表示使用16位的SP,这也是为了与8086兼容。
7)AVL位是软件可利用位。
此外,描述符内第6字节的位5必须置0。

存储段描述符的数据结构表示
DESCRIPTOR    STRUC
LIMITL        DW           0;16位段界限
BASEL         DW           0;基地址低16位
BASM          DB           0;基地址中间8位
ATTRIBURTES   DW           0;属性(含段界限的高4位)
BASEH         DB           0;基地址高8位
DESCRIPTOR    ENDS
评论次数(1)  |  浏览次数(638)  |  类型(汇编语言笔记) |  收藏此文  | 

[  fedorayang   发表于  2010-09-28 14:39  ]

怎样添加好友呢!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码