简易文本编辑器的设计与实现
- 格式:pdf
- 大小:535.54 KB
- 文档页数:28
简单文本编辑器的设计与实现
1. 需求说明
用汇编语言设计一个文本编辑器,可以在出现的界面中输入任意文本
内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光
标键对文本进行全屏幕编辑。
按F1键激活菜单File,下移光标,选择New、Open、Save、Exit子菜单
项实现文件的新建、打开、保存和退出功能。按F10激活帮助,按Esc键
退出帮助。
2. 设计说明
2.1简要分析
这个文本编辑器的设计采用了多个模块,有窗口模块、按键模块、光
标模块、功能键模块等,而功能键模块中又是调用了按键模块。为实现
文本编辑,通过调用不同的模块达到预期的目的。
2.2概要设计3. 详细的算法描述
3.1窗口模块
WIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6 ;建立窗口
MOV AH,06H
MOV AL,OPR1
MOV BH,OPR2
MOV CH,OPR3
MOV CL,OPR4
MOV DH,OPR5
MOV DL,OPR6
INT 10H
ENDM
3.2光标模块
POS_CURSE MACRO OP1,OP2,OP3 ;置光标位置
MOV AH,02H
MOV BH,OP1
MOV DH,OP2
MOV DL,OP3
INT 10H
ENDM
POS_GET MACRO ;读光标位置
MOV AH,03H
MOV BH,0
INT 10H
ENDM
3.3部分按键模块
HOME: ;Home键的功能
POS_GET
MOV ROW,DH
MOV LINE,0
JMP FIRST
_END: ;End键的功能
POS_GET MOV ROW,DH
MOV LINE,79
JMP FIRST
BAK_SP: ;退格键的功能
POS_GET
MOV ROW,DH
MOV LINE,DL
CMP LINE,0
JE STOP
DEC LINE
3.4变量定义
DATA SEGMENT ;定义数据段
MENU DB ' File Help $'
MANU_1 DB ' New ',13,10,'$'
MANU_2 DB ' Open ',13,10,'$'
MANU_3 DB ' Save ',13,10,'$'
MANU_5 DB ' Exit ','$'
HANDLE DW ?
MESSAGE1 DB ' Please input new file name:','$'
MESSAGE2 DB ' Please input save file name:','$'
MESSAGE3 DB ' Please input open file name:','$'
MESSAGE4 DB ' Save Or Not? (Y/N): ','$'
PATH DB 50 DUP(0),'$'
BUFFER DB 2000 DUP(?)
BAK DB 3850 DUP(0)
LINE DB ?
ROW DB ?
CHAR DB ?
HELP_MAS5 DB 'Press F1 to active File. $' ;帮助内容
HELP_MAS6 DB 'You can use Downcursor key to choose the fuction. $'
HELP_MAS7 DB 'Press F10 to show the help massage.Press Esc To
Quit. $'
HANGLIE DB '???//???','$' ;行//列
DATA ENDS
3.5主函数 MAIN PROC FAR ;主程序
ASSUME CS:CODE,DS:DATA
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
CALL WIND
CALL EDIT
RET
MAIN ENDP
4. 源程序和执行结果
4.1源程序
RED_CHR MACRO ;从键盘读字符
MOV AH,00H
INT 16H
ENDM
STRING MACRO P1 ;显示字符串
MOV AH,09H
LEA DX,P1
INT 21H
ENDM
WIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6 ;建立窗口
MOV AH,06H
MOV AL,OPR1
MOV BH,OPR2
MOV CH,OPR3
MOV CL,OPR4
MOV DH,OPR5
MOV DL,OPR6
INT 10H
ENDM
POS_CURSE MACRO OP1,OP2,OP3 ;置光标位置
MOV AH,02H
MOV BH,OP1
MOV DH,OP2
MOV DL,OP3
INT 10H
ENDM
POS_GET MACRO ;读光标位置
MOV AH,03H
MOV BH,0
INT 10H
ENDM
DATA SEGMENT ;定义数据段
MENU DB ' File Help $'
MANU_1 DB ' New ',13,10,'$'
MANU_2 DB ' Open ',13,10,'$'
MANU_3 DB ' Save ',13,10,'$'
MANU_5 DB ' Exit ','$'
HANDLE DW ?
MESSAGE1 DB ' Please input new file name:','$'
MESSAGE2 DB ' Please input save file name:','$'
MESSAGE3 DB ' Please input open file name:','$'
MESSAGE4 DB ' Save Or Not? (Y/N): ','$'
PATH DB 50 DUP(0),'$'
BUFFER DB 2000 DUP(?)
BAK DB 3850 DUP(0)
LINE DB ?
ROW DB ?
CHAR DB ?
HELP_MAS5 DB 'Press F1 to active File. $' ;帮助内容
HELP_MAS6 DB 'You can use Downcursor key to choose the fuction. $'
HELP_MAS7 DB 'Press F10 to show the help massage.Press Esc To
Quit. $'
HANGLIE DB '???//???','$' ;行//列
DATA ENDS
CODE SEGMENT
MAIN PROC FAR ;主程序
ASSUME CS:CODE,DS:DATA
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
CALL WIND
CALL EDIT
RET
MAIN ENDP
WIND PROC NEAR ;创建窗口子程序
WIN 0,3EH,1,0,24,79 ;定义窗口背景
WIN 1,1FH,0,0,0,79
WIN 0,1FH,24,0,24,79
SHOW: ;显示菜单位置及内容
POS_CURSE 0,0,1
MOV AH,09H
LEA DX,MENU
INT 21H
POS_CURSE 0,1,0
MOV ROW,DH
MOV LINE,DL
WIND ENDP
EDIT PROC NEAR
CHAR_GET: ;读字符
CALL COM
COM PROC NEAR ;定义功能鍵
POS_GET
MOV ROW,DH
MOV LINE,DL
FIRST:
POS_CURSE 0,ROW,LINE
J00: MOV AH,0 INT 16H ;从键盘读字符 ah=扫描码 al=字符码
PUSH AX
LEA DX,BUFFER
MOV BUFFER[BX],AL
INC BX
CMP AH,48H ;上
JZ UP_1
CMP AH,50H ;下
JZ DOWN_1
CMP AH,4BH ;左
JZ LEFT
CMP AH,4DH ;右
JZ RIGHT
CMP AH,1CH ;回车
JZ ENTER_1
CALL FUC_KEY
MOV AH,2
MOV DL,AL
INT 21H
POP AX
CALL MENU_SHOW
JMP J6
DOWN_1:
JMP DOWN
ENTER_1:
JMP ENTER_2
UP_1: JMP UP
LEFT: ;光标左移
POS_GET
MOV ROW,DH
MOV DL,LINE
CMP LINE,0
JNZ DIRECT
MOV LINE,79
DEC ROW
CMP ROW,0
JE STOP2