|
V86LDT Desc <V86LDTLen-1,V86LDTSeg,,ATLDT,,>
V86LDT_Sel = V86LDT-GDT
;IntFF任务TSS段描述符及选择子
IntFFTSS Desc <IntFFTSSLen-1,IntFFTSSSeg,,AT386TSS,,>
IntFFTSS_Sel = IntFFTSS-GDT
;IntFF任务局部描述符表的描述符及选择子
IntFFLDT Desc <IntFFLDTLen-1,IntFFLDTSeg,,ATLDT,,>
IntFFLDT_Sel = IntFFLDT-GDT
;临时任务的任务状态段描述符及选择子
TempTSS Desc <TempTSSLen-1,TempTSSSeg,,AT386TSS,,>
TempTSS_Sel = TempTSS-GDT
;临时任务代码段描述符及选择子
TempCode Desc <0ffffh,TempCodeSeg,,ATCE,,>
TempCode_Sel = TempCode-GDT
;----------------------------------------------------------------------------
GDNum = ($-EFFGDT)/(SIZE Desc) ;需特殊处理的描述符数
GDTLen = $-GDT ;全局描述符表长度
GDTSeg ENDS ;全局描述符表段定义结束
;============================================================================
IDTSeg SEGMENT PARA USE16 ;V86任务使用的中断描述符表
IDT LABEL BYTE
;对应0--12号中断/异常的中断门描述符
REPT 13
Gate <,TPCode_Sel,,AT386IGate+DPL3,>
ENDM
;通用保护故障处理程序门描述符
Gate <GPBegin,GPCode_Sel,,AT386TGate+DPL3,>
;对应14--254号中断/异常的中断门描述符
REPT 241
Gate <,TPCode_Sel,,AT386IGate+DPL3,>
ENDM
;对应255号中断的任务门描述符
Gate <,IntFFTSS_Sel,,ATTaskGate+DPL3,>
;----------------------------------------------------------------------------
IDTLen = $-IDT
IDTSeg ENDS ;中断描述符表段定义结束
;============================================================================
;IntFF任务的TSS段
IntFFTSSSeg SEGMENT PARA USE16
DD 0 ;链接字
DD 0 ;0级堆栈指针(实例不使用)
DW 0,0 ;0级堆栈选择子(实例不使用)
DD 0 ;1级堆栈指针(实例不使用)
DW 0,0 ;1级堆栈选择子(实例不使用)
DD 0 ;2级堆栈指针(实例不使用)
DW 0,0 ;2级堆栈选择子(实例不使用)
DD 0 ;CR3
DW IntFFBegin,0 ;EIP
DD 0 ;EFLAGS
DD 0 ;EAX
DD 0 ;ECX
DD 0 ;EDX
DD 0 ;EBX
DD IntFFStackLen ;ESP
DD 0 ;EBP
DD 0 ;ESI
DD 0 ;EDI
DW Normal_Sel,0 ;ES
DW IntFFCode_Sel,0 ;CS
DW IntFFStack_Sel,0 ;SS
DW Normal_Sel,0 ;DS
DW Normal_Sel,0 ;FS
DW Normal_Sel,0 ;GS
DW IntFFLDT_Sel,0 ;LDTR
DW 0 ;调试陷阱标志
DW $+2 ;指向I/O许可位图
DB 0ffh ;I/O许可位图结束标志
;----------------------------------------------------------------------------
IntFFTSSLen = $
IntFFTSSSeg ENDS
;============================================================================
;IntFF任务的LDT段
IntFFLDTSeg SEGMENT PARA USE16
FLDT LABEL BYTE
;0级堆栈段描述符及选择子
IntFFStack Desc <IntFFStackLen-1,IntFFStackSeg,,ATDWA,,>
IntFFStack_Sel = IntFFStack-FLDT+TIL
;代码段描述符及选择子
IntFFCode Desc <IntFFCodeLen-1,IntFFCodeSeg,,ATCER,,>
IntFFCode_Sel = IntFFCode-FLDT+TIL
;----------------------------------------------------------------------------
IntFFLDNum = ($-FLDT)/(SIZE Desc)
IntFFLDTLen = $
IntFFLDTSeg ENDS
;============================================================================
;IntFF任务的堆栈
IntFFStackSeg SEGMENT PARA USE16
IntFFStackLen = 512
DB IntFFStackLen DUP(0)
IntFFStackSeg ENDS
;============================================================================
;IntFF任务的代码段
IntFFCodeSeg SEGMENT PARA USE16
ASSUME CS:IntFFCodeSeg
;----------------------------------------------------------------------------
IntFFMess DB 'Return to real mode.'
IntFFMessLen = $-IntFFMess
;----------------------------------------------------------------------------
IntFFBegin PROC FAR
mov si,OFFSET IntFFMess
mov ax,Video_Sel
mov es,ax
mov di,0
mov ah,17h
mov cx,IntFFMessLen
cld
INext: mov al,BYTE PTR cs:[si]
inc si
stosw
loop INext
JUMP16 TempTSS_Sel,0
IntFFBegin ENDP
;----------------------------------------------------------------------------
IntFFCodeLen = $
IntFFCodeSeg ENDS
;============================================================================
;V86任务的TSS段
V86TSSSeg SEGMENT 上一页 [1] [2] [3] [4] [5] [6] 下一页 |