简易文本编辑器的设计与实现

  • 格式: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