📄 p_2.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 + -