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

📄 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  = 040H  ;4M
G_PDT_ADDR  = 212000H ;PHISICAL MEMORY
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   DW 0,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 $ +2
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                   ;open clock&keyboard
            OUT 21H,AL
            sti

            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
            ; save current GDTR & IDTR
            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:                       ;run tos
            JMP EDS_FLUSH2_PAGE       ;clear instructors
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
            ;set gdt_desc for g_buf
            MOV AX,GDTSEG
            MOV DS,AX
            MOV DI,OFFSET G_BUF
            MOV [DI].BASE_L,0      ;base_addr=4M
            MOV [DI].BASE_M,G_BUF_BASE
            MOV [DI].GRAN,0FH      ;limit=1M
            ;set idt_desc for IDT21
            MOV AX,IDTSEG
            MOV DS,AX
            MOV DI,OFFSET IDT21
            MOV AX,OFFSET GINT21H
            MOV DS:[DI].OFF_L,AX
            ;setup idt
            CLI
            MOV AX,DATA_TOS
            MOV DS,AX
            MOV AX,IDTSEG
            MOV CX,10H
            MUL CX
            ADC DX,0           ;DX:AX=32 address for IDT
            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
            MOV 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

;***********Page_add          
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 + -