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

📄 gui_scr.asm

📁 一个DOS下的文本编辑器
💻 ASM
字号:
DATA    SEGMENT PARA
DOS_SCREEN      DB      4096    DUP(?)
DOS_CUR_POS     DW      ?
EDIT_SCREEN     DB      4096    DUP(?)
EDIT_CUR_POS    DW      ?
TEMP_SCREEN     DB      4096    DUP(?)
DATA    ENDS

CODE	SEGMENT	PARA	'CODE'
	ASSUME	CS:CODE,DS:DATA
        PUBLIC  SAVE_DOS_SCR
        PUBLIC  RESET_DOS_SCR
        PUBLIC  SAVE_SCR
        PUBLIC  RESET_SCR
        PUBLIC  P0_TO_P1       ;COPY PAGE0 TO PAGE1
        PUBLIC  P1_TO_P0       ;COPY PAGE1 TO PAGE0
        PUBLIC  SAVE_P1
        PUBLIC  RESET_P1

;------------------SAVE DOS SCREEN----------------------
SAVE_DOS_SCR    PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
LP_DOS_SAVE:
        MOV     AX,0B800H
        MOV     DS,AX
        MOV     DL,DS:[BX]
        MOV     AX,DATA
        MOV     DS,AX
        MOV     DOS_SCREEN[BX],DL
        INC     BX
        LOOP    LP_DOS_SAVE

        MOV     AH,03H
        MOV     BH,00H
        INT     10H
        MOV     DOS_CUR_POS,DX

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        RETF
SAVE_DOS_SCR    ENDP
;-------------------------------------------------------

;------------------RESET DOS SCREEN---------------------
RESET_DOS_SCR   PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
LP_DOS_RESET:
        MOV     AX,DATA
        MOV     DS,AX
        MOV     DL,DOS_SCREEN[BX]
        MOV     AX,0B800H
        MOV     DS,AX
        MOV     DS:[BX],DL
        INC     BX
        LOOP    LP_DOS_RESET

        MOV     AX,DATA
        MOV     DS,AX
        MOV     AH,02H
        MOV     BH,00H
        MOV     DX,DOS_CUR_POS
        INT     10H

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        
        RETF
RESET_DOS_SCR   ENDP
;-------------------------------------------------------

;------------------SAVE SCREEN--------------------------
SAVE_SCR   PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
LP_SAVE:
        MOV     AX,0B800H
        MOV     DS,AX
        MOV     DL,DS:[BX]
        MOV     AX,DATA
        MOV     DS,AX
        MOV     EDIT_SCREEN[BX],DL
        INC     BX
        LOOP    LP_SAVE

        MOV     AH,03H
        MOV     BH,00H
        INT     10H
        MOV     EDIT_CUR_POS,DX

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX

        RETF
SAVE_SCR   ENDP
;-------------------------------------------------------

;------------------RESET SCREEN-------------------------
RESET_SCR   PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
LP_RESET:
        MOV     AX,DATA
        MOV     DS,AX
        MOV     DL,EDIT_SCREEN[BX]
        MOV     AX,0B800H
        MOV     DS,AX
        MOV     DS:[BX],DL
        INC     BX
        LOOP    LP_RESET

        MOV     AX,DATA
        MOV     DS,AX
        MOV     AH,02H
        MOV     BH,00H
        MOV     DX,EDIT_CUR_POS
        INT     10H

        MOV     AH,01H
        MOV     CH,13
        MOV     CL,14
        INT     10H

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        
        RETF
RESET_SCR   ENDP
;-------------------------------------------------------

;---------------------P0_TO_P1--------------------------
P0_TO_P1        PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
        MOV     AX,0B800H
        MOV     DS,AX
        MOV     AX,0B900H
        MOV     ES,AX
P01_SAVE:
        MOV     DL,DS:[BX]
        MOV     ES:[BX],DL
        INC     BX
        LOOP    P01_SAVE

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        RETF
P0_TO_P1        ENDP
;-------------------------------------------------------

;---------------------P1_TO_P0--------------------------
P1_TO_P0        PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
        MOV     AX,0B900H
        MOV     DS,AX
        MOV     AX,0B800H
        MOV     ES,AX
P10_SAVE:
        MOV     DL,DS:[BX]
        MOV     ES:[BX],DL
        INC     BX
        LOOP    P10_SAVE
        
        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        RETF
P1_TO_P0        ENDP
;-------------------------------------------------------

;-------------------SAVE PAGE1 TO TEMP------------------
SAVE_P1 PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
        MOV     AX,DATA
        MOV     DS,AX
        MOV     AX,0B900H
        MOV     ES,AX
SP_RESET:
        MOV     DL,ES:[BX]
        MOV     TEMP_SCREEN[BX],DL
        INC     BX
        LOOP    SP_RESET

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        
        RETF
SAVE_P1 ENDP
;-------------------------------------------------------

;-----------RESET PAGE1 TO EMPTY EDIT SCREEN------------
;ATTENTION- ASSUME TEMP_SCREEN IS USED JUST AT THE BEGINNIGN
RESET_P1        PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     BX,0
        MOV     CX,4000
                                                                                
RP_RESET:
        MOV     AX,DATA
        MOV     DS,AX
        MOV     DL,TEMP_SCREEN[BX]
        MOV     AX,0B900H
        MOV     DS,AX
        MOV     DS:[BX],DL
        INC     BX
        LOOP    RP_RESET

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        
        RETF
RESET_P1        ENDP
;-------------------------------------------------------

CODE    ENDS
	END	SAVE_DOS_SCR

⌨️ 快捷键说明

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