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

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

存储段
描述符
属  性
Byte m+6Byte m+5
BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0
GD0AVLLimit(19...16)PDPLDT1TYPE

数据段
类  型
类型值说      明
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 表的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值