;名称:386SCD.INC ;功能:符号常量等的定义 ;---------------------------------------------------------------------------- ;IFNDEF __386SCD_INC ;__386SCD_INC EQU 1 ;---------------------------------------------------------------------------- .386P ;---------------------------------------------------------------------------- ;打开A20地址线 ;---------------------------------------------------------------------------- EnableA20 MACRO push ax in al,92h or al,00000010b out 92h,al pop ax ENDM ;---------------------------------------------------------------------------- ;关闭A20地址线 ;---------------------------------------------------------------------------- DisableA20 MACRO push ax in al,92h and al,11111101b out 92h,al pop ax ENDM ;---------------------------------------------------------------------------- ;16位偏移的段间直接转移指令的宏定义(在16位代码段中使用) ;---------------------------------------------------------------------------- JUMP16 MACRO Selector,Offset DB 0eah ;操作码 DW Offset ;16位偏移量 DW Selector ;段值或段选择子 ENDM ;---------------------------------------------------------------------------- ;32位偏移的段间直接转移指令的宏定义(在32位代码段中使用) ;---------------------------------------------------------------------------- COMMENT <JUMP32> JUMP32 MACRO Selector,Offset DB 0eah ;操作码 DD OFFSET DW Selector ;段值或段选择子 ENDM <JUMP32> ;------------------------------------------------- JUMP32 MACRO Selector,Offset DB 0eah ;操作码 DW OFFSET DW 0 DW Selector ;段值或段选择子 ENDM ;---------------------------------------------------------------------------- ;16位偏移的段间调用指令的宏定义(在16位代码段中使用) ;---------------------------------------------------------------------------- CALL16 MACRO Selector,Offset DB 9ah ;操作码 DW Offset ;16位偏移量 DW Selector ;段值或段选择子 ENDM ;---------------------------------------------------------------------------- ;32位偏移的段间调用指令的宏定义(在32位代码段中使用) ;---------------------------------------------------------------------------- COMMENT <CALL32> CALL32 MACRO Selector,Offset DB 9ah ;操作码 DD Offset DW Selector ;段值或段选择子 ENDM <CALL32> ;------------------------------------------------- CALL32 MACRO Selector,Offset DB 9ah ;操作码 DW Offset DW 0 DW Selector ;段值或段选择子 ENDM ;---------------------------------------------------------------------------- ;存储段描述符结构类型定义 ;---------------------------------------------------------------------------- Desc STRUC 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) Desc ENDS ;---------------------------------------------------------------------------- ;门描述符结构类型定义 ;---------------------------------------------------------------------------- Gate STRUC OffsetL DW 0 ;32位偏移的低16位 Selector DW 0 ;选择子 DCount DB 0 ;双字计数 GType DB 0 ;类型 OffsetH DW 0 ;32位偏移的高16位 Gate ENDS ;---------------------------------------------------------------------------- ;伪描述符结构类型定义(用于装入全局或中断描述符表寄存器) ;---------------------------------------------------------------------------- PDesc STRUC Limit DW 0 ;16位界限 Base DD 0 ;32位基地址 PDesc ENDS ;---------------------------------------------------------------------------- ;任务状态段结构类型定义 ;---------------------------------------------------------------------------- TSS STRUC 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许可位图区的段内偏移 TSS ENDS ;---------------------------------------------------------------------------- ;存储段描述符类型值说明 ;---------------------------------------------------------------------------- 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 ;DPL=0 DPL1 EQU 20h ;DPL=1 DPL2 EQU 40h ;DPL=2 DPL3 EQU 60h ;DPL=3 ;---------------------------------------------------------------------------- ;RPL值说明 ;---------------------------------------------------------------------------- RPL0 EQU 00h ;RPL=0 RPL1 EQU 01h ;RPL=1 RPL2 EQU 02h ;RPL=2 RPL3 EQU 03h ;RPL=3 ;---------------------------------------------------------------------------- ;IOPL值说明 ;---------------------------------------------------------------------------- IOPL0 EQU 0000h ;IOPL=0 IOPL1 EQU 1000h ;IOPL=1 IOPL2 EQU 2000h ;IOPL=2 IOPL3 EQU 3000h ;IOPL=3 ;---------------------------------------------------------------------------- ;其它常量值说明 ;---------------------------------------------------------------------------- D32 EQU 40h ;32位代码段标志 GL EQU 80h ;段界限以4K为单位标志 TIL EQU 04h ;TI=1(局部描述符表标志) VMFL EQU 00020000h ;VMF=1 VMFLW EQU 0002h IFL EQU 00000200h ;IF=1 RFL EQU 00010000h ;RF=1(重启动标志,为1表示忽略调试故障) RFLW EQU 0001h NTL EQU 00004000h ;NT=1 ;---------------------------------------------------------------------------- ;分页机制使用的常量说明 ;---------------------------------------------------------------------------- PL EQU 1 ;页存在属性位 RWR EQU 0 ;R/W属性位值,读/执行 RWW EQU 2 ;R/W属性位值,读/写/执行 USS EQU 0 ;U/S属性位值,系统级 USU EQU 4 ;U/S属性位值,用户级 ;---------------------------------------------------------------------------- ;ENDIF
|