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

📄 p_2.asm

📁 操作系统实验教程核心技术与编程实例书中地例子代码
💻 ASM
字号:
;
;
V_SEL_SETUP PROC FAR

	MOV AX,GDT_ASDATA_SEL
	MOV DS,AX
	MOV AX,OS_DATA_SEL
	MOV ES,AX

	XOR EDX,EDX
	MOV EBX,0C0423000H
	MOV DX,OS_CODE_LEN
	AND DX,0FFFH
	CMP DX,0
	JE V_SEL_1
	ADD EBX,1000H
V_SEL_1:
	MOV DX,OS_CODE_LEN
	AND DX,0F000H
	ADD EBX,EDX		;STACK ADDR

	MOV ES:OS_STACK_ADDR,EBX

	MOV ECX,EBX
	MOV DS:V_OS_STACK.BASE_L,CX
	SHR ECX,16
	MOV DS:V_OS_STACK.BASE_M,CL
	MOV DS:V_OS_STACK.BASE_H,CH
	MOV DX,OS_STACK_LEN
	AND DX,0FFFH
	CMP DX,0
	JE V_SEL_2
	ADD EBX,1000H
V_SEL_2:
	MOV DX,OS_STACK_LEN
	AND DX,0F000H
	ADD EBX,EDX			;DATA ADDR
	
	MOV ES:OS_DATA_ADDR,EBX

	MOV AX,GDT_ASDATA_SEL
	MOV DS,AX
	MOV ECX,EBX
	MOV DS:V_OS_DATA.BASE_L,CX
	SHR ECX,16
	MOV DS:V_OS_DATA.BASE_M,CL
	MOV DS:V_OS_DATA.BASE_H,CH

	MOV AX,OS_DATA_SEL
	MOV DS,AX

	RET
V_SEL_SETUP ENDP

SEG_MOV MACRO  s_sel,d_sel,s_off,d_off,mov_len
	LOCAL SEG_MOV1
	MOV AX,s_sel
	MOV DS,AX
	MOV AX,d_sel
	MOV ES,AX
	MOV SI,s_off
	MOV EDI,d_off
	MOV CX,mov_len
SEG_MOV1:
	MOV AL,DS:[SI]
	MOV ES:[EDI],AL
	INC SI
	INC EDI
	LOOP SEG_MOV1
	ENDM

SEGS_MOV_2M PROC FAR

XOR ESI,ESI
XOR EDI,EDI

SEG_MOV GDT_IDT_SEL,GDT_MOV_SEL,0,0,IDT_LEN

SEG_MOV OS_TSS_ASDATA_SEL,GDT_MOV_SEL,0,1000H,OS_TSS_LEN

SEG_MOV GDT_ASDATA_SEL,GDT_MOV_SEL,0,2000H,GDT_LEN

SEG_MOV OS_CODE_SEL,GDT_MOV_SEL,0,23000H,OS_CODE_LEN

;MOV AX,OS_DATA_SEL
;MOV DS,AX
;MOV EBX,DS:OS_STACK_ADDR
;SUB EBX,0C0400000H

XOR EDX,EDX
MOV EBX,0
MOV DX,OS_CODE_LEN
AND DX,0FFFH
CMP DX,0
JE G_MOV_1
ADD EBX,1000H
G_MOV_1:
MOV DX,OS_CODE_LEN
AND DX,0F000H
ADD EBX,EDX
ADD EBX,23000H

SEG_MOV OS_STACK_SEL,GDT_MOV_SEL,0,EBX,OS_STACK_LEN

;MOV EBX,DS:OS_DATA_ADDR
;SUB EBX,0C0400000H

MOV DX,OS_STACK_LEN
AND DX,0FFFH
CMP DX,0
JE G_MOV_2
ADD EBX,1000H
G_MOV_2:
MOV DX,OS_STACK_LEN
AND DX,0F000H
ADD EBX,EDX
SEG_MOV OS_DATA_SEL,GDT_MOV_SEL,0,EBX,OS_DATA_LEN

SEGS_MOV_2M ENDP

INIT_PDT	PROC
	MOV AX,GDT_PDT_SEL
	MOV ES,AX
	XOR DI,DI
	MOV CX,1024
	XOR EAX,EAX
	REP STOSD
	MOV EAX,GDT_PDT0_ADDR OR 3

	MOV DWORD PTR ES:[0],EAX
	ADD EAX,1000H
	MOV DWORD PTR ES:[4],EAX
	ADD EAX,1000H
	MOV DWORD PTR ES:[3072],EAX
	ADD EAX,1000H
	MOV DWORD PTR ES:[3076],EAX

	MOV AX,GDT_PDT0_SEL
	MOV ES,AX
	XOR DI,DI
	MOV CX,2048
	XOR EAX,EAX
	OR EAX,3

INIT_PGT0:
	STOSD
	ADD EAX,1000H
	LOOP INIT_PGT0

	MOV CX,1024
	MOV EAX,0A0000H
	OR EAX,3
INIT_PGT768:
	STOSD
	ADD EAX,1000H
	LOOP INIT_PGT768

	MOV CX,53H

	MOV EAX,200000H
	OR EAX,3
INIT_PGT769:
	STOSD
	ADD EAX,1000H
	LOOP INIT_PGT769

	RET
INIT_PDT	ENDP

⌨️ 快捷键说明

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