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

📄 user_p1.asm

📁 操作系统实验教程核心技术与编程实例书中地例子代码
💻 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 + -