• 段描述符


    事实上,在GDT中存放的不仅仅是段描述符,还有其它描述符(百度百科)。

    一,段描述符的结构

    描述符中指定了32位的起始地址和20位的段边界,

    实模式下,段地址要左移4位,

    32位保护模式下,段地址是32位的线性地址,如果未开启分页功能,该线性地址就是物理地址。

    其他位的作用

    G 粒度位,

    G位为0时,段界限以字节为单位,段的扩展范围1B~1MB;

    G位为1时,段界限以4KB为单位,段的扩展范围4KB~4GB.

    S 指定描述符的类型

    S位为0时,表示系统段;

    S位为1时,表示代码段或数据段,栈段也是特殊的数据段。

    DPL 特权级别

    共有4种处理器支持的特权级别,0,1,2,3;

    0是最高级别,3是最低级别;

    描述符的特权级用于指定访问该段所必须的最低特权级别,如果这里的数值为2,那么只有特权级别为0,1,2的程序才能访问该段,特权级别为3的程序访问该段时,将会被阻止。

    P 段存在位  
    D/B 默认的操作数大小  
    L 64位代码段标志 保留此位留给64位处理器使用
    TYPE 指示描述符的子类型,或者说是类别

    对于数据段,这4位分别是X,E,W,A;

    对于代码段,这4位分别是X,C,R,A;

    AVL 软件可以使用的位 操作系统来用,处理器并不使用它

     二,几个重要标志位的的作用

    (一)DB位

      (1)对CS段的影响:

        D=1时,采用32位寻址方式;

        D=0时,采用16位寻址方式;

        前缀67改变寻址方式;

      (2)对SS段的影响:

        D=1时,隐式堆栈访问指令(如:PUSH,POP,CALL)使用32位堆栈指针寄存器ESP

        D=0时,隐式堆栈访问指令(如:PUSH,POP,CALL)使用16位堆栈指针寄存器SP

      (3)向下扩展的数据段:

        D=1时,段上限位4GB;

        D=0时,段上限位64KB;

    (二)TYPE位

     (三)快速从描述符表中判断一个描述符是代码段还是数据段

      (1)结合段描述符高4字节的15,14,13,12这4个位先判断是系统段还是数据代码段

        15号位,P=1,有效;P=0,无效;

        14,13号位,权限位,Windows环境只有两种权限,0和3,所以这两位的数字要么全为0,要么全为1;

        再结合12号位;

        这4个位合在一起,在段描述符中对应的数字位F(权限位11)或9(权限位00)时,该描述符一定是数据段或代码段;

      (2)再结合TYPE的最高位11位

        TYPE最高位为1,表示代码段,此时,TYPE的4个位合起来的数值表示成十六进制一定不小于8;

        TYPE最高位为0,表示数据段,此时,TYPE的4个位合起来的数值表示成十六进制一定不大于8;

  • 相关阅读:
    野生前端的数据结构基础练习(3)——链表
    野生前端的数据结构基础练习(3)——链表
    野生前端的数据结构基础练习(3)——链表
    Spring MVC之LocaleResolver详解
    Winfrom 屏蔽Alt+F4
    最简单的单例模式
    Eclipse的优化
    Eclipse的优化
    用PULL解析器解析XML文件
    用PULL解析器解析XML文件
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12756119.html
Copyright © 2020-2023  润新知