boot/include/pm.inc

;By Marcus Xing
;boot/include/pm.inc
;保护模式下的宏定义,供boot文件夹下的文件使用

 

; 描述符类型
DA_32    EQU 4000h    ; 32 位段
DA_LIMIT_4K EQU 8000h ; 粒度4K

 

 

 

DA_DPL0   EQU   00h   ; DPL = 0
DA_DPL1   EQU   20h   ; DPL = 1
DA_DPL2   EQU   40h   ; DPL = 2
DA_DPL3   EQU   60h   ; DPL = 3

 

; 存储段描述符类型
DA_DR   EQU 90h ; 存在的只读数据段类型值
DA_DRW  EQU 92h ; 存在的可读写数据段属性值
DA_DRWA EQU 93h ; 存在的已访问可读写数据段类型值
DA_C    EQU 98h ; 存在的只执行代码段属性值
DA_CR   EQU 9Ah ; 存在的可执行可读代码段属性值
DA_CCO  EQU 9Ch ; 存在的只执行一致代码段属性值
DA_CCOR EQU 9Eh ; 存在的可执行可读一致代码段属性值

 

; 系统段描述符类型
DA_LDT      EQU   82h ; 局部描述符表段类型值
DA_TaskGate EQU   85h ; 任务门类型值
DA_386TSS   EQU   89h ; 可用 386 任务状态段类型值
DA_386CGate EQU   8Ch ; 386 调用门类型值
DA_386IGate EQU   8Eh ; 386 中断门类型值
DA_386TGate EQU   8Fh ; 386 陷阱门类型值


; 选择子类型值说明
; 其中:
; SA_ : Selector Attribute

SA_RPL0  EQU 0 ; ┓
SA_RPL1  EQU 1 ; ┣ RPL
SA_RPL2  EQU 2 ; ┃
SA_RPL3  EQU 3 ; ┛

SA_TIG   EQU 0 ; ┓TI
SA_TIL   EQU 4 ; ┛


;----------------------------------------------------------------------------

;宏

;%1 Base  
;%2 Limit  
;%3 Attr  
%macro  Descriptor 3  
 dw %2 & 0ffffh  
  dw %1 & 0ffffh  
  db (%1 >> 16) & 0ffh  
  db %3 & 0ffh  
  db ((%3 >> 8) & 0ffh) | ((%2 >> 16) & 0fh)  
  db (%1 >> 24) & 0ffh  
%endmacro 

;%1 Selector
;%2 Offset
;%3 Para Count
;%4 Attr
%macro Gate 4
 dw %2 & 0ffffh
 dw %1 & 0ffffh
 db %3 & 00011111b
 db %4 & 0ffh
 dw (%2 >> 16) & 0ffffh
%endmacro

;%1 Descriptor's Offset  
;%2 Segment's Offset  
%macro  Fill_Descriptor 2  
  xor eax,eax  
  mov ax,cs  
  shl eax,4  
  add eax,%2  
  mov word [%1 + 2],ax  
  shr eax,16  
  mov byte [%1 + 4],al  
  mov byte [%1 + 7],ah  
%endmacro   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值