纯dos下ACPISLIC表添加

研究一段时间纯dos到保护模式的方式后写了个程序,帮助建立SLIC表,使用的是网上的Asus oem vista激活slic ,nasm汇编编译 nasm -fobj asusslic.asm



详细代码放在另一篇中,这里就一个头文件一些宏定义




;/////////////386scd.inc//////

;名称:386SCD.INC
;功能:符号常量等的定义
;----------------------------------------------------------------------------
%ifndef         __386SCD_INC
%define     __386SCD_INC
;----------------------------------------------------------------------------
;.386P
CPU 386
;----------------------------------------------------------------------------
;打开A20地址线
;----------------------------------------------------------------------------
%macro EnableA20 0
                push    ax
                in      al,92h
                or      al,00000010b
                out     92h,al
                pop     ax
%endmacro
;----------------------------------------------------------------------------
;关闭A20地址线
;----------------------------------------------------------------------------
%macro DisableA20 0
                push    ax
                in      al,92h
                and     al,11111101b
                out     92h,al
                pop     ax
%endmacro

;----------------------------------------------------------------------------
;16位偏移的段间直接转移指令的宏定义(在16位代码段中使用)
;----------------------------------------------------------------------------
%macro JUMP16 2
                DB      0eah     ;操作码
                DW      %2   ;16位偏移量
                DW      %1 ;段值或段选择子
%endmacro
;----------------------------------------------------------------------------
;32位偏移的段间直接转移指令的宏定义(在32位代码段中使用)
;----------------------------------------------------------------------------
;COMMENT <JUMP32>
;JUMP32          MACRO   Selector,Offset
;                DB      0eah     ;操作码
;                DD      OFFSET
;                DW      Selector ;段值或段选择子
;                ENDM
;<JUMP32>
;-------------------------------------------------
%macro JUMP32 2
                DB      0eah     ;操作码
                DW      %2
                DW      0
                DW      %1 ;段值或段选择子
%endmacro
;----------------------------------------------------------------------------
;16位偏移的段间调用指令的宏定义(在16位代码段中使用)
;----------------------------------------------------------------------------
%macro CALL16   2
                DB      9ah      ;操作码
                DW      %2   ;16位偏移量
                DW      %1 ;段值或段选择子
%endmacro
;----------------------------------------------------------------------------
;32位偏移的段间调用指令的宏定义(在32位代码段中使用)
;----------------------------------------------------------------------------
;COMMENT <CALL32>
;CALL32          MACRO   Selector,Offset
;                DB      9ah      ;操作码
;                DD      Offset
;                DW      Selector ;段值或段选择子
;                ENDM
;<CALL32>
;-------------------------------------------------
%macro CALL32 2
                DB      9ah      ;操作码
                DW      %1
                DW      0
                DW      %2 ;段值或段选择子
%endmacro
;----------------------------------------------------------------------------
;存储段描述符结构类型定义
;----------------------------------------------------------------------------
;STRUC Desc
;LimitL          DW      0 ;段界限(BIT0-15)
;BaseL           DW      0 ;段基地址(BIT0-15)
;BaseM           DB      0 ;段基地址(BIT16-23)
;Attributes      DB      0 ;段属性
;LimitH          DB      0 ;段界限(BIT16-19)(含段属性的高4位)
;BaseH           DB      0 ;段基地址(BIT24-31)
;ENDSTRUC
;----------------------------------------------------------------------------
;门描述符结构类型定义
;----------------------------------------------------------------------------
;STRUC Gate
;OffsetL         DW      0 ;32位偏移的低16位
;Selector        DW      0 ;选择子
;DCount          DB      0 ;双字计数
;GType           DB      0 ;类型
;OffsetH         DW      0 ;32位偏移的高16位
;ENDSTRUC
;----------------------------------------------------------------------------
;伪描述符结构类型定义(用于装入全局或中断描述符表寄存器)
;----------------------------------------------------------------------------
;STRUC PDesc
;Limit           DW      0 ;16位界限
;Base            DD      0 ;32位基地址
;ENDSTRUC
;----------------------------------------------------------------------------
;任务状态段结构类型定义
;----------------------------------------------------------------------------
%macro TSSDef 1
%1 :
STRUC TSS
.TRLink          DW      0      ;链接字段
                DW      0      ;不使用,置为0
.TRESP0          DD      0      ;0级堆栈指针
.TRSS0           DW      0      ;0级堆栈段寄存器
                DW      0      ;不使用,置为0
.TRESP1          DD      0      ;1级堆栈指针
.TRSS1           DW      0      ;1级堆栈段寄存器
                DW      0      ;不使用,置为0
.TRESP2          DD      0      ;2级堆栈指针
.TRSS2           DW      0      ;2级堆栈段寄存器
                DW      0      ;不使用,置为0
.TRCR3           DD      0      ;CR3
.TREIP           DD      0      ;EIP
.TREFlag         DD      0      ;EFLAGS
.TREAX           DD      0      ;EAX
.TRECX           DD      0      ;ECX
.TREDX           DD      0      ;EDX
.TREBX           DD      0      ;EBX
.TRESP           DD      0      ;ESP
.TREBP           DD      0      ;EBP
.TRESI           DD      0      ;ESI
.TREDI           DD      0      ;EDI
.TRES            DW      0      ;ES
                DW      0      ;不使用,置为0
.TRCS            DW      0      ;CS
                DW      0      ;不使用,置为0
.TRSS            DW      0      ;SS
                DW      0      ;不使用,置为0
.TRDS            DW      0      ;DS
                DW      0      ;不使用,置为0
.TRFS            DW      0      ;FS
                DW      0      ;不使用,置为0
.TRGS            DW      0      ;GS
                DW      0      ;不使用,置为0
.TRLDTR          DW      0      ;LDTR
                DW      0      ;不使用,置为0
.TRTrip          DW      0      ;调试陷阱标志(只用位0)
.TRIOMap         DW      $+2    ;指向I/O许可位图区的段内偏移
ENDSTRUC
%endmacro
;----------------------------------------------------------------------------
;存储段描述符类型值说明
;----------------------------------------------------------------------------
ATDR            equ       90h ;存在的只读数据段类型值
ATDW            equ       92h ;存在的可读写数据段属性值
ATDWA           equ       93h ;存在的已访问可读写数据段类型值
ATCE            equ       98h ;存在的只执行代码段属性值
ATCER           equ       9ah ;存在的可执行可读代码段属性值
ATCCO           equ       9ch ;存在的只执行一致代码段属性值
ATCCOR          equ       9eh ;存在的可执行可读一致代码段属性值
;----------------------------------------------------------------------------
;系统段描述符类型值说明
;----------------------------------------------------------------------------
ATLDT           equ       82h ;局部描述符表段类型值
ATTaskGate      equ       85h ;任务门类型值
AT386TSS        equ       89h ;可用386任务状态段类型值
AT386CGate      equ       8ch ;386调用门类型值
AT386IGate      equ       8eh ;386中断门类型值
AT386TGate      equ       8fh ;386陷阱门类型值
;----------------------------------------------------------------------------
;DPL值说明
;----------------------------------------------------------------------------
DPL0            equ       00h ;DPLequ0
DPL1            equ       20h ;DPLequ1
DPL2            equ       40h ;DPLequ2
DPL3            equ       60h ;DPLequ3
;----------------------------------------------------------------------------
;RPL值说明
;----------------------------------------------------------------------------
RPL0            equ       00h ;RPLequ0
RPL1            equ       01h ;RPLequ1
RPL2            equ       02h ;RPLequ2
RPL3            equ       03h ;RPLequ3
;----------------------------------------------------------------------------
;IOPL值说明
;----------------------------------------------------------------------------
IOPL0           equ       0000h ;IOPLequ0
IOPL1           equ       1000h ;IOPLequ1
IOPL2           equ       2000h ;IOPLequ2
IOPL3           equ       3000h ;IOPLequ3
;----------------------------------------------------------------------------
;其它常量值说明
;----------------------------------------------------------------------------
D32             equ       40h       ;32位代码段标志
GL              equ       80h       ;段界限以4K为单位标志
TIL             equ       04h       ;TIequ1(局部描述符表标志)
VMFL            equ       00020000h ;VMFequ1
VMFLW           equ       0002h
IFL             equ       00000200h ;IFequ1
RFL             equ       00010000h ;RFequ1(重启动标志,为1表示忽略调试故障)
RFLW            equ       0001h
NTL             equ       00004000h ;NTequ1
;----------------------------------------------------------------------------
;分页机制使用的常量说明
;----------------------------------------------------------------------------
PL              equ       1     ;页存在属性位
RWR             equ       0     ;R/W属性位值,读/执行
RWW             equ       2     ;R/W属性位值,读/写/执行
USS             equ       0     ;U/S属性位值,系统级
USU             equ       4     ;U/S属性位值,用户级
;----------------------------------------------------------------------------


%macro Desc  3 ;段描述符宏
 dw (%2) & 0ffffh   ;界限值0-15位
 dw (%1) & 0ffffh   ;基地址0-15位
 db ((%1) >> 16) & 0ffh  ;基地址16-23位
 dw (((%2) >> 8) & 0f00h) | (%3) ;界限值16-19位,和段属性
 db ((%1) >> 24) & 0ffh  ;基地址24-31位
%endmacro

%macro Gate 4 ;门描述符宏
 dw (%1) & 0ffffh   ;偏移0-15位
 dW %2              ;选择子
 db %3              ;双字计数
 db %4              ;类型
 db ((%1) >> 16) & 0ffffh  ;偏移16-31位
%endmacro

%macro PDesc 2
 DW      %2 ;16位界限
 DD      %1 ;32位基地址
%endmacro

SA_BYTES equ 0 << 15  ;段粒度:字节
SA_PAGES equ 1 << 15  ;段粒度:页

SA_16BIT equ 0 << 14  ;16位段
SA_32BIT equ 1 << 14  ;32位段

SA_ABSENT equ 0 << 7  ;不存在
SA_PRESENT equ 1 << 7  ;存在

SA_DPL_0 equ 0 << 5  ;段特权级0-3
SA_DPL_1 equ 1 << 5
SA_DPL_2 equ 2 << 5
SA_DPL_3 equ 3 << 5

SA_SYSTEM equ 0 << 4  ;系统段
SA_STORAGE equ 1 << 4  ;存储段

SA_DATA  equ 0 << 3  ;数据段
SA_CODE  equ 1 << 3  ;代码段

SA_CONFORM equ 1 << 2  ;一致代码段
SA_STACK equ 1 << 2  ;堆栈段

SA_READ  equ 1 << 1  ;可读
SA_WRITE equ 1 << 1  ;可写

SA_UNACCESSED equ 0 << 0  ;访问过
SA_ACCESSED equ 1 << 0  ;未访问过

%endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值