• [操作系统]存储段描述符


    存储段
    描述符
    m+7 m+6 m+5 m+4 m+3 m+2 m+1 m+0
    Base(31...24) Attributes Segment Base(23...0) Segment Limite(15...0)

    存储段
    描述符
    属  性
    Byte m+6 Byte m+5
    BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
    G D 0 AVL Limit(19...16) P DPL DT1 TYPE

    数据段
    类  型
    类型值 说      明
    0 只读
    1 只读、已访问
    2 读/写
    3 读/写、已访问
    4 只读、向下扩展
    5 只读、向下扩展、已访问
    6 读/写、向下扩展
    7 读/写、向下扩展、已访问
    代码段
    类  型
    类型值 说      明
    8 只执行
    9 只执行、已访问
    A 执行/读
    B 执行/读、已访问
    C 只执行、一致码段
    D 只执行、一致码段、已访问
    E 执行/读、一致码段
    F 执行/读、一致码段、已访问

    根据存储段描述符的结构,可定义如下的汇编语言描述符结构类型: 
        DESC       STRUC LIMITL DW      0 ;段界限低16位
        BASEL      DW      0 ;基地址低16位
        BASEM      DB      0 ;基地址中间8位
        ATTRIB     DB      0 ;段属性
        LIMITH     DB      0 ;段界限的高4位(包括段属性的高4位)
        BASEH      DB      0 ;基地址的高8位
        DESC       ENDS

    示例:
    gdt:
        gdt_null:           ; 这是CPU要求保留的,CPU要求第一个段必须是空段,空描述符的64位全是0
            dd  0
            dd  0           ; 每个段的描述符是64位(8字节),dd表示4个字节,两个dd刚好8个字节,

        gdt_code_addr equ $ - gdt   ; 求得代码段在GDT表中的位置
        gdt_code:
            dw  0xFFFF      ; 段低16位
            dw  0                ; 基地址(24位)
            db  0       
            db  10011010b   ; 0x9A 属性描述位,P=1,DPL=0,DT1=1,TYPE=A,指明此是代码段、可读可执行
            db  11001111b   ; 0xCF 0xC为属性描述表示G=1,D=1,AVL=0,表示段界以4K为单位,32位代码段,0xF为段界高8位
                                    ; 得出:段界为0xFFFFF,因G=1所以表示4G空间
            db  0          

        gdt_data_addr equ $ - gdt   ; 求得数据段在GDT表中的位置,段界、其它属性分析与上同
        gdt_data:                    
            dw  0xFFFF       
            dw  0                
            db  0
            db  10010010b   ;  0x92 属性描述位,P=1,DPL=0,DT1=1,TYPE=2,指明此是数据段,可读可写
            db  11001111b
            db  0
        gdt_end:
        gdt_addr:
            dw  gdt_end - gdt - 1   ; GDT 表的大小
            dd  gdt                 ; GDT 表的位置
  • 相关阅读:
    AndroidAlarmManager(全局定时器/闹钟)
    Android dialog,activity 屏蔽Home键的教程详解
    实例教程一:电话拨号器
    Android的进程优先级与进程回收详解
    Android Bitmap内存限制
    【30篇突击 android】源码统计七
    在access中支持2个以上left join的方法,又是access的变态规则
    修改vs2005的键盘风格设置
    IE与Firefox的CSS兼容大全(转载)
    实现页面内多个表格在滚动时,表头浮动的效果(是同时多个表格哟)
  • 原文地址:https://www.cnblogs.com/huqingyu/p/110754.html
Copyright © 2020-2023  润新知