一.保护模式中的特权级(上)
A.保护模式小结
a.使用选择子访问段描述符表时,索引值的合法性检测
1.当索引值越界时,引发+异常
2.判断的规则是:索引值 x8+7<=段描述表界限值
b.内存段类型合法检测性
1.具备可执行属性的段(代码段)只能加载到CS寄存器
2.具备可写属性的段(数据段)才能加载到SS寄存器
3.具备只读属性的段才能加载到DS,ES,FS,GS寄存器
c.代码段和数据段的保护
1.处理器每访问一个地址都要确认该地址不超过界限值
2.判断规则:代码段:IP+指令长度<=代码段界限;数据段:访问起始地址+访问数据长度<=数据段界限
在这里需要注意的是:保护模式中代码中定义的界限值通常为:最大偏移地址值(相对于段基地址)
d.代码示例
%include "inc.asm"
org 0x9000
jmp ENTRY_SEGMENT
[section .gdt]
; GDT definition
; ¶Î»ùÖ·£¬ ¶ÎœçÏÞ£¬ ¶ÎÊôÐÔ
GDT_ENTRY : Descriptor 0, 0, 0
CODE32_DESC : Descriptor 0, Code32SegLen - 1, DA_C + DA_32
VIDEO_DESC : Descriptor 0xB8000, 0x07FFF, DA_DRWA + DA_32
DATA32_DESC : Descriptor 0, Data32SegLen - 1, DA_DR + DA_32
STACK32_DESC : Descriptor 0, TopOfStack32, DA_DRW + DA_32
; GDT end
GdtLen equ $ - GDT_ENTRY
GdtPtr:
dw GdtLen - 1
dd 0
; GDT Selector
Code32Selector equ (0x0001 << 3) + SA_TIG + SA_RPL0
VideoSelector equ (0x0002 <<