📄 user_p1.asm
字号:
USER_P1_STACK0SEG SEGMENT PARA USE16
USER_P1_STACK0LEN = 1024
DB USER_P1_STACK0LEN DUP(0)
USER_P1_STACK0SEG ENDS
USER_P1TSSSEG SEGMENT PARA USE16
DD 0 ;LINK
DW USER_P1_STACK0LEN,0 ;0_STACK USER_P1_STACK0LEN
DW USER_P1_STACK0_SEL,0
DD 0 ;1_STACK
DW ?,0
DD 0 ;2_STACK
DW ?,0
DD 0 ;CR3
DW USER_P1BEGIN,0 ;EIP
DD 0 ;EFLAGS
DD 0 ;EAX
DD 0 ;ECX
DD 0 ;EDX
DD 0 ;EBX
DW USER_P1_STACK0LEN,0 ;ESP USER_P1_STACK0LEN
DD 0 ;EBP
DD 0 ;ESI
DD 0 ;EDI
DW G_VRAM_SEL,0 ;ES
DW USER_P1_SEL,0 ;CS
DW USER_P1_STACK0_SEL,0 ;SS
DW ?,0 ;TOS_DATA_SEL,0 ;DS
DW ?,0 ;USER_P1LDT_ASDATA_SEL,0 ;FS
DW ?,0 ;GS
DW USER_P1LDT_SEL,0
DW 0
DW $ + 2
DB 0FFH
USER_P1TSSLEN = $
USER_P1TSSSEG ENDS
USER_P1LDTSEG SEGMENT
USER_P1LDT LABEL BYTE
USER_P1LDT_NULL GDT_DESC <>
USER_P1_LDT_INIT_BEGIN LABEL BYTE
USER_P1 GDT_DESC <0FFFFH,USER_P1SEG,0,9AH,0,0> ;EXE DPL=0
USER_P1_SEL = USER_P1 - USER_P1LDT + 04H
USER_P1LDT_ASDATA GDT_DESC <USER_P1LDTLEN,USER_P1LDTSEG,0,92H,0,0>
USER_P1LDT_ASDATA_SEL = USER_P1LDT_ASDATA - USER_P1LDT + 04H
USER_P1_STACK0 GDT_DESC <USER_P1_STACK0LEN,USER_P1_STACK0SEG,0,93H,0,0> ;96H=R/W ,DOWN
USER_P1_STACK0_SEL = (USER_P1_STACK0 - USER_P1LDT) + 04H
USER_P1_LDT_INIT_COUNT = ($ - USER_P1_LDT_INIT_BEGIN)/(SIZE GDT_DESC)
P1_TO_TOS GAT_DESC <0,TOS_TSS_SEL,0,85H,0> ;85h:task gate
P1_TO_TOS_SEL = (P1_TO_TOS - USER_P1LDT) + 04H
USER_P1LDTLEN = $ - USER_P1LDT
USER_P1LDTSEG ENDS
USER_P1SEG SEGMENT PARA USE16
ASSUME CS:USER_P1SEG,DS:DATA ;,SS:USER_P1_STACKSEG
USER_P1BEGIN:
MOV AX,TOS_DATA_SEL
MOV DS,AX
MOV AH,9
MOV CX,0300H ;15 row 21 column
MOV DX,OFFSET user_p_run
INT 21H
; two segs_call error becaise two tasks
;MOV AX,04242H
;mov cx,0240H
;CALL16 tos_code_sel,disp_ext_ax
USER_P1_end:
DB 0EAH
DW OFFSET COMEBACK_TO_TOS
DW p1_to_tos_sel
USER_P1LEN = $
USER_P1SEG ENDS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -