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

📄 chg_task.asm

📁 操作系统实验教程核心技术与编程实例书中地例子代码
💻 ASM
字号:
;exec.asm
.MODEL HUGE
.386P
include \tc\g\include\g_def.asm
include \tc\g\include\tos_seg.asm
include \tc\g\include\user_p1.asm
TOS_CODESEG SEGMENT PARA USE16
            ASSUME CS:TOS_CODESEG,DS:DATA_TOS,SS:TOS_STACKSEG
TOS_BEGIN:   
            TOS_BEGIN0
            CALL DISP_TOS_IN_TOS

            MOV BX,USER_P1LDT_SEL
            LLDT BX
            MOV AX,TOS_DATA_SEL
            MOV DS,AX
            DB 0EAH
            DW 0 ;DS:G_WORK[6]  
            dw USER_P1TSS_SEL
COMEBACK_TO_TOS:
            JMP TURN_TO_REAL_MODE 

TURN_TO_REAL_MODE:
            CALL TURN_TO_REAL
            include \tc\g\include\tos_used.asm
TOS_CODELEN = $
TOS_CODESEG ENDS

GDTSEG      SEGMENT PARA USE16
GDT         LABEL BYTE
G_NULL      GDT_DESC <>
REAL_SEG    GDT_DESC <0FFFFH,0,0,92H,0,0>
REAL_SEL    = REAL_SEG - GDT
GDT_INIT_BEGIN LABEL BYTE
TOS_CODE    GDT_DESC <0FFFFH,TOS_CODESEG,0,9AH,0,0> ;9AH=exec/read ,DPL=0
            ;limit must be 0ffffh for returnning to real_mode
TOS_CODE_SEL = TOS_CODE - GDT
TOS_DATA    GDT_DESC <DATALEN,DATA_TOS,0,92H,0,0> ;92H=P ,DPL=0,TYPE=2
TOS_DATA_SEL = TOS_DATA - GDT
DATASEG    GDT_DESC <DATALEN,DATA,0,92H,0,0> ;92H=P ,DPL=0,TYPE=2
DATA_SEL = DATASEG - GDT
TOS_STACK   GDT_DESC <TOS_STACKLEN,TOS_STACKSEG,0,93H,0,0>   ;96H=R/W ,DOWN
TOS_STACK_SEL = TOS_STACK - GDT
TOS_TSS     GDT_DESC <TOS_TSSLEN,TOS_TSSSEG,0,089H,0,0> ;89H=386TSS DPL=0
TOS_TSS_SEL  = TOS_TSS - GDT
USER_P1TSS     GDT_DESC <USER_P1TSSLEN,USER_P1TSSSEG,0,089H,0,0> ;9AH=exec/read ,DPL=0
USER_P1TSS_SEL  = USER_P1TSS - GDT
USER_P1TSS_D     GDT_DESC <USER_P1TSSLEN,USER_P1TSSSEG,0,92H,0,0> ;9AH=exec/read ,DPL=0
USER_P1TSS_D_SEL  = USER_P1TSS_D - GDT
USER_P1LDTT     GDT_DESC <USER_P1LDTLEN,USER_P1LDTSEG,0,82H,0> ;82H=LDT
USER_P1LDT_SEL = USER_P1LDTT - GDT
GDT_ASDATA  GDT_DESC <GDTLEN,GDTSEG,0,92H,0,0>
GDT_ASDATA_SEL = $ - GDT
GDT_INIT_COUNT  = ($ - GDT_INIT_BEGIN)/(SIZE GDT_DESC)
G_VRAM      GDT_DESC <0FFFFH,08000H,0BH,92H,0,0>   ;92H=P ,DPL=0,TYPE=2
G_VRAM_SEL   =  G_VRAM - GDT  ;60h
G_BUF       GDT_DESC <0FFFFH,0,30H,92H,0,0> ;92H=P ,DPL=0,TYPE=2 ,base=3M
G_BUF_SEL    = G_BUF - GDT
ps_TO_TOS_SEL   = $
V_TOS_CODE_SEL = $
V_TOS_DATA_SEL = $
GDTLEN      = $ - GDT
GDTSEG      ENDS
            include \tc\g\include\COS_DATA.asm
            include \tc\g\include\COS_IDT0.asm

CODE        SEGMENT PARA USE16 ;PUBLIC 'CODE' ;/////real_mode segment--->start
            ASSUME CS:CODE,DS:DATA,SS:STACK
            include \tc\g\include\a20.asm
MAIN        PROC FAR
START:      
            REAL_BEGIN_PAGE

TURN_TO_PROTECT_MODE:
            CALL GDT_INIT
            CALL USER_P1_LDT_INIT
            TURN_TO_PROTECT_page
REAL_MODE:  
            TO_DOS
MAIN        ENDP
include \tc\g\include\g_real.asm
include \tc\g\include\p1_ldt.asm
CODE        ENDS
;////////////////////real_mode segment----->end
include \tc\g\include\DOS_DATA.asm
            END START

⌨️ 快捷键说明

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