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

📄 tos_used.asm

📁 操作系统实验教程核心技术与编程实例书中地例子代码
💻 ASM
字号:
;////////////////// use by tos task
TURN_TO_REAL PROC FAR
            cli
            MOV AX,REAL_SEL
            MOV ES,AX
            MOV FS,AX
            MOV GS,AX
            MOV DS,AX
            MOV SS,AX

            MOV EAX,CR0
            AND EAX,0FFFFFFFEH
            MOV CR0,EAX
            DB 0EAH
            DW OFFSET REAL_MODE
            DW CODE
            RET
TURN_TO_REAL ENDP
DISP_TOS_IN_TOS PROC FAR
            ; DISP 'COS'
            MOV AH,24H;07 for white/black
            mov al,43h
            mov es:320,ax
            mov al,4fh
            mov es:322,ax
            mov al,53h
            mov es:324,ax
            RET
            ; DISP 'COS'
DISP_TOS_IN_TOS ENDP
GINT21H     PROC FAR
            cli
            PUSH BX
            PUSH CX
            PUSH DX
            PUSH SI
            PUSH ES
            PUSH DS

            CMP AH,4CH
            JE  GINT21H_4C
            CMP AH,9
            JE  GINT21H_9
            JNE GINT21H_END
GINT21H_4C:
            POP DS
            POP ES
            POP SI
            POP DX
            POP CX
            POP BX

            db 0eah
            dw COMEBACK_TO_TOS
            dw ps_TO_TOS_SEL
GINT21H_9:            
            MOV AX,G_VRAM_SEL
            MOV ES,AX
            MOV SI,DX
            MOV DX,CX
            MOV DH,0

            PUSH DX
            MOV CL,CH
            MOV CH,0
            MOV AX,CX
            MOV CX,160
            MUL CX
            MOV BX,AX
            POP DX

            ADD BX,DX
            ADD BX,DX
            MOV AH,24H;07 for white/black
LGINT21H1:  MOV AL,DS:[SI]
            CMP AL,'$'
            JE GINT21H_END
            MOV ES:[BX],AX
            ADD BX,2
            INC SI
            LOOP LGINT21H1
GINT21H_END:
            POP DS
            POP ES
            POP SI
            POP DX
            POP CX
            POP BX
            IRETD
GINT21H     ENDP

DISP2_16    PROC FAR
            ;in al code 2 using ah
            ;out ah:al:code 16
            mov ah,al
            shr ah,4
            cmp ah,9
            jle disp2_16_1
            add ah,7    
disp2_16_1: add ah,30h
            and al,0fh
            cmp al,9
            jle disp2_16_2
            add al,7
disp2_16_2: add al,30h
            RET
DISP2_16    ENDP

DISP_AX     PROC FAR
            ;in cx:position call inner tos_seg 
            PUSH AX
            PUSH BX
            PUSH DX
            MOV BX,AX
            mov al,BH
            CALL DISP2_16
            mov DS:t_string,ah
            mov DS:t_string[1],al
            MOV AL,BL
            CALL DISP2_16
            mov DS:t_string[2],ah
            mov DS:t_string[3],al
            mov DS:t_string[4],'$'
            MOV AH,9
            MOV DX,OFFSET t_string
            ;add dx,16
            INT 21H
            POP DX
            POP BX
            POP AX
            RET
DISP_AX     ENDP

DISP_EXT_AX PROC FAR
            ;in cx:position call out tos_seg
            PUSH AX
            PUSH BX
            PUSH DX
            MOV BX,AX
            mov al,BH
            db 9ah
            dw DISP2_16
            dw TOS_CODE_SEL
            mov DS:t_string,ah
            mov DS:t_string[1],al
            MOV AL,BL
            db 9ah
            dw DISP2_16
            dw TOS_CODE_SEL
            mov DS:t_string[2],ah
            mov DS:t_string[3],al
            mov DS:t_string[4],'$'
            MOV AH,9
            MOV DX,OFFSET t_string
            ;add dx,16
            INT 21H
            POP DX
            POP BX
            POP AX
            RET
DISP_EXT_AX     ENDP

⌨️ 快捷键说明

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