⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g_def.asm

📁 是关于保护模式与实模式之间的相互切换,是用汇编写的源程序
💻 ASM
字号:
GDT_DESC    STRUC
LIMIT   DW  ?
BASE_L  DW  ?
BASE_M  DB  ?
ACCESS  DB  ?
GRAN    DB  ?
BASE_H  DB  ?
GDT_DESC ENDS
SZ_GDT_DESC  EQU SIZE GDT_DESC
PE_ON        EQU 01H
GDT_CS_SEL   EQU 08H
GDT_DS_SEL   EQU 10H
GDT_SS_SEL   EQU 18H
VRAM_SEL     EQU 20H
GDT_BUF_SEL  EQU 28H
G_BUF_BASE   =04H
G_PDT_ADDR   =212000H
G_PT0_ADDR   =213000H


GAT_DESC     STRUC
OFFSET_L   DW 0
SELECTOR   DW 0
DCOUNT     DB 0
GTYPE      DB 0
OFFSET_H   DW 0
GAT_DESC   ENDS


IDT_DESC   STRUC
OFF_L      DW ?
SELECTOR   DW ?
ATTR       DW ?
OFF_H      DW ?
IDT_DESC  ENDS


TASKSS    STRUC
TRLINK    DW 0,0
TRESP0    DW 0,0
TRSS0     DW 0,0
TRESP1    DW 0,0
TRSS1     DW 0,0
TRESP2    DW 0,0
TRSS2     DW 0,0
TRCR3     DD 0
TREIP     DW 0,0
TREFLAG   DD 0
TREAX     DD 0
TRECX     DD 0
TREDX     DD 0
TREBX     DD 0
TRESP     DD 0
TREBP     DD 0
TRESI     DD 0
TREDI     DD 0
TRES      DW 0,0
TRCS      DW 0,0
TRSS      DW 0,0
TRDS      DW 0,0
TRFS      DW 0,0
TRGS      DW 0,0
TRLDT     DW 0,0
TRFLAG    DW 0
TRIOMAP   DW 0068H
	  dd 5 dup(0)
TASKSS    ENDS


TO_DOS    MACRO
          CLTS
          CLI
          CALL CLOSE_A20
          MOV AX,DATA
          MOV DS,AX
          MOV SS,SAVE_SS
          MOV SP,SAVE_SP
          LGDT FWORD PTR SAVE_GDT
          LIDT FWORD PTR SAVE_IDT
	  MOV AL,11111100B
	  OUT 21H,AL
	  STI
	  LEA DX,OK_MSG
	  MOV CX,0C00H
	  MOV AH,9
	  INT 21H

	  MOV AX,4C00H
	  INT 21H
ENDM


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TURN_TO_PROTECT_PAGE  MACRO
         MOV AX,DATA
         MOV DS,AX
         MOV AX,STACK
         MOV SAVE_SS,AX
         MOV SAVE_SP,SP
         SGDT FWORD PTR SAVE_GDT
         SIDT FWORD PTR SAVE_IDT
         CLI
	LGDT FWORD PTR GDT_ADDR
	MOV AX,DATA_TOS
	MOV DS,AX
        LIDT FWORD PTR DS:IDTSIZE
        CALL OPEN_A20
        MOV EAX,CR0
        OR EAX,1
        MOV CR0,EAX
TOS_ENTRY_PAGE:
        JMP EDS_FLUSH2_PAGE
EDS_FLUSH2_PAGE: 
	DB 0EAH
        DW OFFSET TOS_BEGIN
        DW TOS_CODE_SEL
        ENDM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


REAL_BEGIN_PAGE MACRO
        CLI
        MOV AX,STACK
        MOV SS,AX
        STI
        MOV AX,GDTSEG
        MOV DS,AX
        MOV DI,OFFSET G_BUF
        MOV [DI].BASE_L,0
        MOV [DI].BASE_M,G_BUF_BASE
        MOV [DI].GRAN,0FH
        MOV AX,IDTSEG
        MOV DS,AX
        MOV DI,OFFSET IDT21
        MOV AX,OFFSET GINT21H
        MOV DS:[DI].OFF_L,AX
        CLI
        MOV AX,DATA_TOS
        MOV DS,AX
        MOV AX,IDTSEG
        MOV CX,10H
        MUL CX
        ADC DX,0
        MOV DS:IDTLOAD,AX
        MOV DS:IDTLOAD+2,DX
        MOV AX,OFFSET IDTLEN
        ADD AX,1
	MOV  DS:IDTSIZE,AX
	MOV AX,DATA
	MOV DS,AX
        ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TOS_BEGIN0 MACRO
        CLI
        MOV AX,TOS_DATA_SEL
        MOV DS,AX
        MOV ES,AX
        MOV AX,DATA_SEL
        MOV FS,AX
        MOV AX,G_BUF_SEL
        MOV GS,AX
        MOC AX,TOS_STACK_SEL
        MOV SS,AX
        MOV AX,TOS_STACKLEN
        DEC AX
        MOV SP,AX
	MOV AX,G_VRAM_SEL
        MOV ES,AX
        MOV AX,TOS_TSS_SEL
        LTR AX
ENDM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

G_MOV MACRO s_selector,d_selector,s_offset,d_offset,mlen
        LOCAL G_MOV1
        MOV AX,S_SELECTOR
        MOV DS,AX
        MOV AX,D_SELECTOR
        MOV ES,AX
        MOV SI,S_OFFSET
        MOV EDI,D_OFFSET
        MOV CX,MLEN
G_MOV1:
        MOV AL,DS:[SI]
        MOV ES:[EDI],AL
        INC SI
        INC EDI
        LOOP G_MOV1
        MOV AX,G_VRAM_SEL
        MOV ES,AX
        MOV AX,TOS_DATA_SEL
        MOV DS,AX
        ENDM

SEGMAP_DESC STRUC
PH_ADDR   DD ?
LO_ADDR   DD ?
SEGMAP_DESC ENDS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -