📄 text.asm
字号:
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 + -