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

📄 p_base.asm

📁 操作系统实验教程核心技术与编程实例书中地例子代码
💻 ASM
字号:
;PAGE
;操作系统的基本的结构定义及宏
;By 潘龙平/nuaa/08990115
;Date:4/30/2002
;===============================================================

GDT_PDT_ADDR	EQU 212000H
GDT_PDT0_ADDR	EQU 213000H

;*************段描述符结构开始**************
;包括各种段描述符、任务状态段描述符
STRUCT_SEG STRUC
LIMIT_L		DW ?
BASE_L		DW ?
BASE_M		DB ?
ACCESS		DB ?
LIMIT_H		DB ?
BASE_H		DB ?
STRUCT_SEG ENDS
;+++++++++++++段描述符结构结束+++++++++++++++
;--------------------------------------------------------------
;*************门描述符结构开始***************
;包括中断门、任务门、陷阱门、调用门
STRUCT_GATE STRUC
OFFSET_L	DW 0
SELECTOR	DW 0
DCOUNT		DB 0
GATETYPE	DB 0
OFFSET_H	DW 0
STRUCT_GATE ENDS
;++++++++++++门描述符结构结束+++++++++++++++
;--------------------------------------------------------------
;--------------------------------------------------------------
;*************任务状态段结构开始************
STRUCT_TSS STRUC
TSS_LINK	DW 0,0
TSS_ESP0	DD 0
TSS_SS0		DW 0,0
TSS_ESP1	DD 0
TSS_SS1		DW 0,0
TSS_ESP2	DD 0
TSS_SS2		DW 0,0
TSS_CR3		DD 0
TSS_EIP		DD 0
TSS_EFLAGS	DD 0
TSS_EAX		DD 0
TSS_ECX		DD 0
TSS_EDX		DD 0
TSS_EBX		DD 0
TSS_ESP		DD 0
TSS_EBP		DD 0
TSS_ESI		DD 0
TSS_EDI		DD 0
TSS_ES		DW 0,0
TSS_CS		DW 0,0
TSS_SS		DW 0,0
TSS_DS		DW 0,0
TSS_FS		DW 0,0
TSS_GS		DW 0,0
TSS_LDT		DW 0,0
TSS_FLAG_T	DW 0
TSS_BITMAP	DW $+2
STRUCT_TSS ENDS
;++++++++++++++任务状态段结构结束++++++++++
;---------------------------------------------------------------
;**************OPEN_A20宏开始************++
;打开A20地址线
OPEN_A20	MACRO
		PUSH AX
		IN AL,92H
		OR AL,2
		OUT 92H,AL
		POP AX
		ENDM
;+++++++++++++OPEN_A20宏结束+++++++++++++++
;---------------------------------------------------------------
;*************CLOSE_A20宏开始************++
;关闭A20地址线
CLOSE_A20	MACRO
		PUSH AX
		IN AL,92H
		AND AL,0FDH
		OUT 92H,AL
		POP AX
		ENDM
;+++++++++++++CLOSE_A20宏结束++++++++++++++
;---------------------------------------------------------------
;*************TURN_TO_PROTECT宏开始********
;将SS、SP、GDT、LDT保存并转到保护模式
;到实模式,程序调用该宏后,应接着调用INIT_PROCTECT宏
;来进行初始化
TURN_TO_PROTECT MACRO   
	MOV AX,REAL_DATA
	MOV DS,AX
	MOV AX,REAL_STACK
	MOV SAVE_SS,AX
	MOV SAVE_SP,SP
	SGDT FWORD PTR SAVE_GDT
	SIDT FWORD PTR SAVE_IDT
	CLI
	LGDT FWORD PTR GDT_SIZE
	LIDT FWORD PTR IDT_SIZE
	OPEN_A20
	MOV EAX,CR0
	OR EAX,1
	MOV CR0,EAX
	JMP TURN_TO_PROTECT_LBL1
TURN_TO_PROTECT_LBL1:
	DB 0EAH
	DW OFFSET OS_BEGIN
	DW OS_CODE_SEL
	ENDM
;+++++++++++++TURN_TO_PROTECT宏结束+++++++++++++++
;---------------------------------------------------------------
;*************INIT_PROCTECT宏开始*****************
;进入保护模式后,初始化段寄存器、堆栈、任务寄存器
INIT_PROCTECT   MACRO
	CLI
	MOV AX,OS_DATA_SEL
	MOV DS,AX
	MOV ES,AX
	MOV FS,AX
	MOV GS,AX
	MOV AX,OS_STACK_SEL
	MOV SS,AX
	MOV AX,OS_STACK_LEN
	MOV SP,AX
	MOV AX,OS_TSS_SEL
	LTR AX
	ENDM
;+++++++++++++INIT_PROCTECT宏结束+++++++++++++++
;---------------------------------------------------------------
;*************TURN_TO_REAL宏开始****************
;转到实模式,程序调用该宏后,应接着调用RETURN_TO_REAL_1宏
;来恢复一些寄存器值
TURN_TO_REAL	MACRO
	CLI
	MOV AX,REAL_SEL
	MOV DS,AX
	MOV ES,AX
	MOV FS,AX
	MOV GS,AX
	MOV SS,AX
	MOV EAX,CR0
	AND EAX,0FFFFFFFEH
	MOV CR0,EAX
	JMP TURN_TO_REALLBL1
TURN_TO_REALLBL1:
	DB 0EAH
	DW OFFSET LBL_TO_REAL
	DW REAL_CODE
	ENDM
;+++++++++++++TURN_TO_REAL宏结束++++++++++++++++++
;---------------------------------------------------------------
;*************RETURN_TO_REAL_1宏开始*****************
;转到实模式后恢复SS、SP、GDT、LDT
RETURN_TO_REAL_1	MACRO
	CLTS
	CLI
	CLOSE_A20
	MOV AX,REAL_DATA
	MOV DS,AX
	MOV SS,SAVE_SS
	MOV SP,SAVE_SP
	LGDT FWORD PTR SAVE_GDT
	LIDT FWORD PTR SAVE_IDT
	STI
	ENDM
;+++++++++++++RETURN_TO_REAL_1宏结束+++++++++++++++
;---------------------------------------------------------------

⌨️ 快捷键说明

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