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

📄 text.asm

📁 用汇编语言写的简易文本编辑器,特别之处在巧妙使用宏,可学习系统功能调用,能模仿记事本大部分功能.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
GET_C  MACRO          ;读光标位置 
         MOV AH,03H 
         MOV BH,0                    ;BH=页号 
         INT 10H 
ENDM 
LOCAL_C MACRO PP6,PP7,PP8        ;定位光标位置 
         MOV AH,2 
         MOV BH,PP6        ;BH=页 
         MOV DH,PP7        ;DH:DL=行:列 
         MOV DL,PP8 
         INT 10H 
ENDM 
READ_C MACRO          ;读键盘字符 
         MOV AH,0 
         INT 16H 
ENDM 
INPUT_C MACRO            ;单字符输入,并显示 
         MOV AH,1 
         INT 21H 
ENDM 
OUTPUT_C MACRO OP0          ;输出单个字符 
         MOV AH,2 
         MOV DL,OP0         ;DL=输出字符ASCII码 
         INT 21H 
ENDM 
OUTPUT_S  MACRO PP        ;输出字符串 
         MOV AH,9 
         LEA DX,PP          ;DX=输出字符串首地址 
         INT 21H 
ENDM 
NEW_W MACRO PP0,PP1,PP2,PP3,PP4,PP5    ;新建窗口 
         MOV AH,06H         
         MOV AL,PP0          ;AL=上卷行数,为0则空白 
         MOV BH,PP1          ;BH=卷入行属性 
         MOV CH,PP2           
         MOV CL,PP3 
         MOV DH,PP4         
         MOV DL,PP5 
         INT 10H 
ENDM 
NEW_F MACRO OP1,OP2           ;新建文件 
         MOV AH,3CH           
         LEA DX,OP1           ;DX=ASCII码串首地址 
         MOV CX,OP2           ;CX=文件属性 
         INT 21H 
ENDM 
WRITE_F MACRO OP4,OP5,OP6            ;写文件 
         MOV AH,40H 
         LEA DX,OP4             ;DX=数据缓冲首地址 
         MOV BX,OP5             ;BX=文件句柄号 
         MOV CX,OP6             ;CX=写入字节数 
         INT 21H 
ENDM 
CLOSE_F MACRO OP3          ;关闭文件 
         MOV AH,3EH 
         MOV BX,OP3        ;BX=文件句柄号 
         INT 21H 
ENDM 
END_P MACRO              ;结束程序 
         MOV AH,4CH     
         INT 21H 
ENDM 
DATA     SEGMENT                           ;定义数据段 
         MENU     db 'File  Edit  Help $' 
         FILE1   db ' New      ',13,10,'$' 
         FILE2   db ' Load     ',13,10,'$' 
         FILE3   db ' Save     ',13,10,'$' 
         FILE4   db ' Save as  ',13,10,'$' 
         FILE5   db ' Exit     ','$' 
         INFO1 db 'Enter the NEW file name:','$' 
         INFO2 db ' The name of the file to be SAVE:','$' 
         INFO3 db ' The name of the file to be LOAD:','$' 
         INFO4 db ' The file has not saved ! Save it now? (Y/N) : ','$' 
         HAND  dw ? 
         PPA   db 100 dup(0),'$' 
         BUF   db 2000 dup(?) 
         BAKE  db 4000 dup(0) 
         LINE  db ? 
         ROW   db ? 
         H_1 db '----------------- HELP!--------------- $' 
         H_2 db 'Press F10 to active file. $' 
         H_3 db 'Press F1 to SHOW the HELP massage.$' 
         H_4 db 'Press Esc To Quit Window$' 
DATA     ENDS 
CODE     SEGMENT   
         ASSUME CS:CODE,DS:DATA     
MAIN     PROC FAR                           ;主程序 
BEGIN: 
         PUSH DS 
         SUB  AX,AX 
         PUSH AX 
         MOV  AX,DATA 
         MOV  DS,AX 
         NEW_W 0,57H,0,0,24,79           ;定义窗口背景 
SHOW_M:                        ;显示菜单位置及内容 
         LOCAL_C 0,0,1     
         OUTPUT_S menu                 
         CALL EDIT                                 
         RET 
MAIN     ENDP 
EDIT PROC NEAR 
GET_CHAR:                             ;读字符 
        CALL FOUNCTION 
FOUNCTION PROC NEAR                         ;定义功能鍵 
        GET_C 
        MOV  ROW,DH 
        MOV  LINE,DL 
FIR: 
        LOCAL_C 0,ROW,LINE 
JU:    READ_C                       
        PUSH AX 
        LEA DX,BUF 
        MOV BUF[BX],AL 
        INC BX 
        CMP  AH,48H                    ;上 
        JE   UP_1 
        CMP  AH,50H                    ;下 
        JE   DOWN_1 
        CMP  AH,4BH                    ;左 
        JE   LEFT 
        CMP  AH,4DH                    ;右 
        JE   RIGHT 
        CMP  AH,1CH                    ;回车 
        JE   ENTER_1 
        CALL FUNCT_K 
        OUTPUT_C AL 
        POP AX 
        CALL  MENU_SHOW 
        JMP   J1 
DOWN_1: 
        JMP DOWN 
ENTER_1: 
        JMP ENTER_2 
UP_1:   JMP UP 
LEFT:                                   ;光标左移 
        GET_C 
        MOV ROW,DH 
        MOV DL,LINE 
        CMP LINE,0 
        JNZ DIRECT 
        MOV LINE,79 
        DEC ROW 
        CMP ROW,0 
        JE  STOP2                                             
        JMP FIR 
STOP2: 
        MOV ROW,1 
        JMP FIR 
DIRECT:   
        DEC LINE 
        GET_C             ;显示光标位置 
        JMP FIR 
RIGHT:                       ;光标右移 
        GET_C 
        MOV ROW,DH 
        MOV DL,LINE 
        CMP LINE,79 
        JNZ DIRECT_1 
        MOV LINE,0 
        INC ROW 
        CMP ROW,24 
        JE  RETURN_1       
        JMP FIR 
DIRECT_1: 
        INC  LINE 
        GET_C 
        JMP FIR 
ENTER_2: 
        JMP ENTER 
UP:                                     ;上移光标 
        GET_C 
        MOV ROW,DH 
        MOV DL,LINE 
        DEC ROW 
        CMP ROW,0 
        JE  STOP1 
        GET_C 
        JMP FIR 
STOP1:   
        MOV ROW,1 
        JMP FIR 
DOWN:                                    ;下移光标 
        GET_C 
        MOV ROW,DH 
        MOV DL,LINE   
        INC ROW 
        CMP ROW,24 
        JE  STOP3 
        GET_C 
        JMP FIR 
STOP3:   
        MOV ROW,23 
        JMP FIR 
RETURN_1: 
        JMP RETURN 
ENTER:                                   ;回车换行 
        GET_C 
        MOV ROW,DH 
        MOV LINE,DL 
        INC ROW 
        CMP ROW,24 
        JE  RETURN 
        MOV LINE,0 
        GET_C 
        JMP FIR 
RETURN: 
        MOV ROW,24 
      MOV LINE,0 
    JMP FIR 
J1:     
        RET 
FOUNCTION     ENDP 
FUNCT_K PROC NEAR                 ;功能键子程序   
next:   
        CMP AH,47H                ;HOME 
        JE  HOME 
        CMP AH,4fH                ;END 
        JE  END1 
        CMP AH,0EH                ;backspace 
        JE  BAK_SP 
        CMP AH,53H                ;DELET 
        JE  DELET 
        CMP AH,3BH                ;F1 
        JE  HELP0 
        RET 
HELP0: CALL HELP 
HOME:                             ;HOME键的功能 
        GET_C 
        MOV ROW,DH 
        MOV LINE,0 
        JMP FIR     
END1:                             ;END键的功能 
        GET_C 
        MOV ROW,DH 
        MOV LINE,79 
        GET_C 
        JMP FIR 
BAK_SP:                           ;退格键的功能 
        GET_C 
        MOV ROW,DH 
        MOV LINE,DL 
        CMP LINE,0 
        JE  STOP 
        DEC LINE 
        JMP Z 
STOP: 
        MOV LINE,0 
Z:     
        GET_C 0,ROW,LINE 
        OUTPUT_C 00 
        GET_C 
        JMP FIR 
DELET:                                ;DEL删除 
        GET_C 
        MOV ROW,DH 
        MOV LINE,DL 
        DEC LINE 
        GET_C 0,ROW,LINE 
        OUTPUT_C 00 
        INC LINE 
        GET_C 
        JMP FIR 
COM:     
        CMP LINE,00 
        JE  POSCOM 
POSCOM: 
        LOCAL_C 0,0,0 
        JMP FIR 
HELP PROC NEAR                       ;显示帮助信息 
     CALL SAVE_DISP               ;显示帮助信息每行的位置 
     GET_C 
      PUSH DX 
      NEW_W 0,1CH,4,5,21,70 
      LOCAL_C 0,6,19 
      OUTPUT_S H_1 
      LOCAL_C 0,8,18 
      OUTPUT_S H_2 
      LOCAL_C 0,10,18 
      OUTPUT_S H_3 
      LOCAL_C 0,12,18 
      OUTPUT_S H_4 
      POP DX 
      LOCAL_C 0,DH,DL 
      READ_C 
      CMP  AH,3BH                     ;F1 active HELP 
      JNZ  CLS 
      CALL HELP 
CLS:     
     NEW_W 0,56H,9,5,21,70              ;清屏 
      CALL BACK_DISP 
HELP ENDP 
FUNCT_K ENDP 
MENU_SHOW PROC NEAR                     ;显示菜单 
        CALL SAVE_DISP 
        PUSH CX 
        CMP AH,44H                      ;F10 功能 
        JE  MENU_D 
        JMP GET_CHAR 
MENU_D:                                ;定义菜单的背景字体颜色 
        GET_C 
        PUSH DX 
        NEW_W 0,57H,2,1,7,11 
        NEW_W 0,1EH,1,0,6,10 
        LOCAL_C 0,1,0 
        OUTPUT_S FILE1 
        OUTPUT_S FILE2 
        OUTPUT_S FILE3 
        OUTPUT_S FILE4 
        OUTPUT_S FILE5 
        POP DX 
        DEC DL 
        LOCAL_C 0,DH,DL 
COPM:     
        READ_C 
        CMP AH,50H                 
        JE  MENU_N 
        JMP MENU_HIDE 
MENU_HIDE:                        ;菜单隐藏 
        NEW_W 0,56H,1,1,7,11 

⌨️ 快捷键说明

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