最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

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

来源:动视网 责编:小OO 时间:2025-09-23 21:06:04
文档

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

简单文本编辑器的设计与实现1.需求说明用汇编语言设计一个文本编辑器,可以在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。按F1键激活菜单File,下移光标,选择New、Open、Save、Exit子菜单项实现文件的新建、打开、保存和退出功能。按F10激活帮助,按Esc键退出帮助。2.设计说明2.1简要分析这个文本编辑器的设计采用了多个模块,有窗口模块、按键模块、光标模块、功能键模块等,而功能键模块中又是调用了按键模块
推荐度:
导读简单文本编辑器的设计与实现1.需求说明用汇编语言设计一个文本编辑器,可以在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。按F1键激活菜单File,下移光标,选择New、Open、Save、Exit子菜单项实现文件的新建、打开、保存和退出功能。按F10激活帮助,按Esc键退出帮助。2.设计说明2.1简要分析这个文本编辑器的设计采用了多个模块,有窗口模块、按键模块、光标模块、功能键模块等,而功能键模块中又是调用了按键模块
简单文本编辑器的设计与实现

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

              JMP       FIRST

      STOP2:

              MOV       ROW,1

              JMP       FIRST

     DIRECT:

              DEC       LINE

              JMP       FIRST

      RIGHT:                        ;光标右移

              POS_GET

              MOV       ROW,DH

              MOV       DL,LINE

              CMP       LINE,79

              JNZ       DIRECT2

              MOV       LINE,0

              INC       ROW

              CMP       ROW,24

              JE        RETURNS1

              JMP       FIRST

    DIRECT2:

              INC       LINE

              JMP       FIRST

    ENTER_2:

              JMP       ENTER

         UP:                        ;上移光标

              POS_GET

              MOV       ROW,DH

              MOV       DL,LINE

              DEC       ROW

              CMP       ROW,0

              JE        STOP1

              JMP       FIRST

      STOP1:

              MOV       ROW,1

              JMP       FIRST

       DOWN:                        ;下移光标

              POS_GET

              MOV       ROW,DH

              MOV       DL,LINE

              INC       ROW

              CMP       ROW,24

              JE        STOP3

              JMP       FIRST

      STOP3:

              MOV       ROW,23

              JMP       FIRST

   RETURNS1:

              JMP       RETURNS

      ENTER:                        ;回车换行

              POS_GET

              MOV       ROW,DH

              MOV       LINE,DL

              INC       ROW

              CMP       ROW,24

              JE        RETURNS

              MOV       LINE,0

              JMP       FIRST

    RETURNS:

              MOV       ROW,24

              MOV       LINE,0

              JMP       FIRST

              J6:

              RET

         COM  ENDP

   FUC_KEY  PROC      NEAR        ;功能键子程序

       NEXT:

              CMP       AH,47H      ;Home键

              JZ        HOME

              CMP       AH,4FH      ;End键

              JZ        _END

              CMP       AH,0EH      ;Backspace键

              JZ        BAK_SP

              CMP       AH,53H

              JZ        DEL

              CMP       AH,44H      ;F10键

              JZ        HELP_0

              RET

     HELP_0:  CALL      HELP

       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

              JMP       AB

       STOP:

              MOV       LINE,0

         AB:

              POS_GET   0,ROW,LINE

              MOV       AH,2

              MOV       DL,00

              INT       21H

              JMP       FIRST

        DEL:                        ;Del键

              POS_GET

              MOV       ROW,DH

              MOV       LINE,DL

              DEC       LINE

              POS_GET   0,ROW,LINE

              MOV       AH,2

              MOV       DL,00

              INT       21H

              INC       LINE

              JMP       FIRST

         CM:

              CMP       LINE,00

              JZ        POS_CM

     POS_CM:

              POS_CURSE         0,0,0

              JMP       FIRST

       HELP  PROC      NEAR        ;显示帮助信息

              CALL      SAVEDISPLAY ;显示帮助信息每行的位置

              POS_GET

              PUSH      DX

              WIN       0,57H,4,5,21,70

              POS_CURSE         0,6,25

              STRING    HELP_MAS5

              POS_CURSE         0,8,11

              STRING    HELP_MAS6

              POS_CURSE         0,10,11

              STRING    HELP_MAS7

              POP       DX

              POS_CURSE         0,DH,DL

              MOV       AH,0

              INT       16H

              CMP       AH,36H      ;F10 active help

              JNZ       CLS

              CALL      HELP

        CLS:

              WIN       0,1EH,9,10,13,70        ;清屏

              CALL      BACKDISPLAY

        HELP  ENDP

     FUC_KEY  ENDP

   MENU_SHOW  PROC      NEAR        ;显示菜单

              CALL      SAVEDISPLAY

              PUSH      CX

              CMP       AH,3BH      ;F1功能

              JZ        MENU_SH

              JMP       CHAR_GET

    MENU_SH:                        ;定义菜单的背景字体颜色

              POS_GET

              PUSH      DX

              WIN       0,06H,2,1,7,11

              WIN       0,65H,1,0,6,10

              POS_CURSE         0,1,0

              STRING    MANU_1

              STRING    MANU_2

              STRING    MANU_3

              STRING    MANU_5

              POP       DX

              DEC       DL

              POS_CURSE         0,DH,DL

     COPMAR:

              RED_CHR

              CMP       AH,50H

              JZ        MANU_N

              JMP       MANU_HID

   MANU_HID:                        ;菜单隐藏

              WIN       0,1EH,1,1,7,11

              CALL      BACKDISPLAY

              JMP       CHAR_GET

     MANU_N:                        ;开始定义各个菜单项

              WIN       0,65H,5,1,5,8

              POS_CURSE         0,5,0

              STRING    MANU_5

              WIN       0,15H,1,1,1,8

              POS_CURSE         0,1,0

              STRING    MANU_1

              RED_CHR

              CMP       AH,48H

              JE        MANU_N

              CMP       AL,0DH

              JZ        NEW_1

              CMP       AH,50H

              JE        MANU_O

              JMP       MANU_HID

    MANU_N0:

              JMP       MANU_N

     MANU_O:

              WIN       0,65H,1,1,1,8

              POS_CURSE         0,1,0

              STRING    MANU_1

              WIN       0,15H,2,1,2,8

              POS_CURSE         0,2,0

              STRING    MANU_2

              RED_CHR

              CMP       AH,48H

              JE        MANU_O

              CMP       AL,0DH

              JZ        OPEN_1

              CMP       AH,50H

              JE        MANU_S

              JMP       MANU_HID

     NEW_1:  JMP       NEW_2

     MANU_S:

              WIN       0,65H,2,1,2,8

              POS_CURSE         0,2,0

              STRING    MANU_2

              WIN       0,15H,3,1,3,8

              POS_CURSE         0,3,0

              STRING    MANU_3

              RED_CHR

              CMP       AL,0DH

              JZ        SAVE_1

              CMP       AH,48H

              JE        MANU_S

              CMP       AH,50H

              JE        MANU_A

              JMP       MANU_HID

    OPEN_1:  JMP       OPEN_2

    MANU_N1:

              JMP       MANU_N

     MANU_A:

              WIN       0,65H,3,1,3,8

              POS_CURSE         0,3,0

              STRING    MANU_3

              RED_CHR

              CMP       AH,48H

              JE        MANU_A

              CMP       AH,50H

              JE        MANU_E

              JMP       MANU_HID

    MANU_N2:

              JMP       MANU_N1

     NEW_2:  JMP       NEW

    SAVE_1:  CALL      SAVE

     MANU_E:

              WIN       0,15H,5,1,5,8

              POS_CURSE         0,5,0

              STRING    MANU_5

              RED_CHR

              CMP       AH,50H

              JE        MANU_N2

              CMP       AH,1CH

              JE        EXIT

              JMP       MANU_HID

       EXIT:

              CALL      BACKDISPLAY

              WIN       0,07H,15,10,17,61

              WIN       0,24H,14,9,16,60

              MOV       DH,15

              MOV       DL,9

              MOV       BH,0

              MOV       AH,2

              INT       10H

              LEA       DX,MESSAGE4

              MOV       AH,9

              INT       21H

              MOV       AH,1

              INT       21H

              CMP       AL,79H

              JNZ       Q

              CALL      QUITT

          Q:  CMP       AL,6EH

              JZ        QUIT

       QUIT:  WIN       0,07H,0,0,24,79

              POS_CURSE         0,0,0

              MOV       AH,4CH

              INT       21H

              RET

   MENU_SHOW  ENDP

       NEW  PROC      NEAR        ;新建文件

              POS_GET

              PUSH      DX

              CALL      BACKDISPLAY

              WIN       0,07H,15,10,17,61

              WIN       0,24H,14,9,16,60,

              MOV       DH,15

              MOV       DL,9

              MOV       BH,0

              MOV       AH,02H

              INT       10H

              LEA       DX,MESSAGE1

              CMP       AL,0DH

              MOV       AH,9

              INT       21H

              MOV       BX,0

        ALL:

              MOV       AH,01H

              INT       21H

              CMP       AL,0DH

              JE        ALLL

              MOV       PATH[BX],AL

              INC       BX

              JMP       ALL

       ALLL:

              WIN       0,3EH,15,9,17,61

              POP       DX

              POS_CURSE         0,DH,DL

              LEA       DX,PATH

              MOV       AH,3CH

              MOV       CX,0

              INT       21H

              MOV       HANDLE,AX

              MOV       BX,AX

              MOV       AH,3EH

              INT       21H

              WIN       0,3EH,1,0,23,79

              MOV       DH,1

              MOV       DL,0

              MOV       BH,0

              MOV       AH,2

              INT       10H

              JMP       CHAR_GET

       NEW  ENDP

     OPEN_2:  JMP       OPEN

       OPEN  PROC      NEAR        ;打开文件

              CALL      BACKDISPLAY

              WIN       0,07H,15,10,17,61

              WIN       0,24H,14,9,16,60

              MOV       DH,15

              MOV       DL,9

              MOV       BH,0

              MOV       AH,2

              INT       10H

              LEA       DX,MESSAGE3

              MOV       AH,9

              INT       21H

              MOV       BX,0

        CLL:

              MOV       AH,1

              INT       21H

              CMP       AL,13

              JE        CLLL

              MOV       PATH[BX],AL

              INC       BX

              JMP       CLL

       CLLL:

              WIN       0,3EH,1,0,23,79

              LEA       DX,PATH

              MOV       AH,3DH

              MOV       AL,0

              INT       21H

              MOV       HANDLE,AX

              LEA       DX,BUFFER

              MOV       BX,HANDLE

              MOV       CX,2000

              MOV       AH,3FH

              INT       21H

              WIN       0,3EH,1,23,1,79

              MOV       DH,1

              MOV       DL,0

              MOV       BH,0

              MOV       AH,2

              INT       10H

              MOV       CX,1000

              SUB       BX,BX

     REPLAY:

              MOV       DL,BUFFER[BX]

              INC       BX

              MOV       AH,2

              INT       21H

              LOOP      REPLAY

              MOV       BX,HANDLE

              MOV       AH,3EH

              INT       21H

              MOV       DH,1

              MOV       DL,0

              MOV       BH,0

              MOV       AH,2

              INT       10H

              MOV       CX,10

              MOV       BX,0

 CLEAPATH_3:

              MOV       BL,0

              MOV       PATH[BX],BL

              LOOP      CLEAPATH_3

              JMP       CHAR_GET

      OPEN  ENDP

       SAVE  PROC      NEAR        ;保存文件

              POS_GET

              PUSH      DX

              WIN       0,3EH,1,0,6,10

              CALL      BACKDISPLAY

              MOV       AH,PATH

              CMP       AH,21H

              JL        J_3

              JMP       J_4

              J_3:

              WIN       0,07H,15,10,17,61

              WIN       0,24H,14,9,16,60,

              MOV       DH,15

              MOV       DL,9

              MOV       BH,0

              MOV       AH,2

              INT       10H

              LEA       DX,MESSAGE2

              MOV       AH,9

              INT       21H

              MOV       BX,0

        DLL:

              MOV       AH,1

              INT       21H

              CMP       AL,0DH

              JE        DLLL

              MOV       PATH[BX],AL

              INC       BX

              JMP       DLL

       DLLL:

              WIN       0,3EH,1,0,23,79

              POP       DX

              POS_CURSE         0,DH,DL

              J_4:      LEA DX,PATH

              MOV       AH,3CH

              MOV       CX,0

              INT       21H

              MOV       HANDLE,AX

              LEA       DX,BUFFER

              MOV       BX,HANDLE

              MOV       CX,2000

              MOV       AH,40H

              INT       21H

              MOV       BX,HANDLE

              MOV       AH,3EH

              INT       21H

              CALL      BACKDISPLAY

              JMP       CHAR_GET

        SAVE  ENDP

SAVEDISPLAY  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSH      DS

              MOV       AX,0002H

              INT       33H

              MOV       BX,0D

              MOV       CX,3840D

      LOOP1:

              MOV       AX,0B800H

              MOV       DS,AX

              MOV       DL,DS:[BX]

              MOV       AX,DATA

              MOV       DS,AX

              MOV       BAK[BX],DL

              INC       BX

              LOOP      LOOP1

              MOV       AX,0001H

              INT       33H

              POP       DS

              POP       DX

              POP       CX

              POP       BX

              POP       AX

 SAVEDISPLAY  ENDP

 BACKDISPLAY  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSH      DS

              MOV       BX,0D

              MOV       CX,3840D

     LOOP11:

              MOV       AX,DATA

              MOV       DS,AX

              MOV       DL,BAK[BX]

              MOV       AX,0B800H

              MOV       DS,AX

              MOV       DS:[BX],DL

              INC       BX

              LOOP      LOOP11

              POP       DS

              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET

 BACKDISPLAY  ENDP

       QUITT  PROC      NEAR        ;退出

              CALL      BACKDISPLAY

              WIN       0,07H,15,10,17,61

              WIN       0,24H,14,9,16,60,

              MOV       DH,15

              MOV       DL,9

              MOV       BH,0

              MOV       AH,2

              INT       10H

              LEA       DX,MESSAGE2

              MOV       AH,9

              INT       21H

              MOV       BX,0

        QLL:

              MOV       AH,1

              INT       21H

              CMP       AL,0DH

              JE        QLLL

              MOV       PATH[BX],AL

              INC       BX

              JMP       QLL

       QLLL:

              WIN       0,07H,15,10,17,61

              WIN       0,3EH,14,9,16,60

              CALL      BACKDISPLAY

              LEA       DX,PATH

              MOV       AH,3CH

              MOV       CX,00

              INT       21H

              MOV       HANDLE,AX

              LEA       DX,BUFFER

              MOV       BX,HANDLE

              MOV       CX,2000

              MOV       AH,40H

              INT       21H

              MOV       BX,HANDLE

              MOV       AH,3EH

              INT       21H

              CALL      BACKDISPLAY

              WIN       0,07H,0,0,24,79

              MOV       AH,4CH

              INT       21H

              RET

      QUITT  ENDP

        EDIT  ENDP

        CODE  ENDS

              END       START       ;结束

4.2执行结果

4.2.1测试方法

  在弹出的界面中第一行输入ABCDEFGHIJKLMN,在第二行输入abcdefghijklmn。利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本编辑,检查按键是否有用,按键的功能与测试结果是否一致。编辑完成后保存文件名为abc,退出系统。再次打开界面,然后打开刚刚保存的文件abc,观察刚刚的保存是否成功。

4.2.2测试结果

5.使用说明

  在记事本中写好该程序后保存为.asm文件,然后用masm程序产生OBJ文件,接着用link程序产生EXE文件,然后执行程序。程序执行的结果是一个窗口,与windows下的窗口差不多,只是功能少一些。在界面中输入任意的内容并对其进行编辑,编辑完后保存文件。下次可以打开这个文件可以继续进行编辑。

6.总结

6.1设计心得

6.1.1设计的特点

  这个文本编辑器虽然小,但是基本的功能都有。尤其是界面化的设计,使之更贴近用户。这个文本编辑器最大的特点是使用了模块化的思想,将一个个的功能模块化,这样使程序的健壮性更好,以后若要添加功能,只需要将功能的模块添加进去就可以了,而不需要重新写程序,也不用修改很多的代码,方便了维护。这个文本编辑器还有一个重要的功能就是保存文件,可以将用户输入界面的内容进行保存。

6.1.2不足之处

  该文本编辑器也存在一些不足之处,它只能进行简单的文本编辑,而不能进行字体操作、段落操作等word中实现的操作,因此它很具有局限性。另外,该编辑器只能输入字母、数字,不能输入汉字。实现的功能比较少,只有新建、打开、保存、退出。功能键帮助也只有输出帮助内容,没有具体的帮助措施。

6.1.3收获与体会

  本次课程设计让我对汇编语言的几个重要知识点:寄存器问题、基本命令、汇编中断程序的功能、汇编程序的基本格式以及函数的定义和调用有了一个比较清楚的了解。另外一般在编写程序时,首先应该写出程序的主体框架,然后再进行修饰、完善。在查错时,我们一定要一条语句一条语句的推敲,绝不能疏忽大意,因为错误的程序往往都是形似而神非,往往错误就在那一两条语句,所以必须仔细。

  现在我们习惯了拿高级语言来编写程序,因此对汇编语言有点生疏。而且汇编语言比较繁琐,没有高级语言那么抽象。在平时的汇编语言课上觉得自己学的不好,通过这次课程设计把自己不同的地方温故了一边,像宏定义、有些特殊寄存器的使用。写汇编可以自己去控制寄存器,自己去控制程序而不是计算机已经分配好的。也正是要自己去控制,所以经常会碰到比高级语言更多的麻烦,有时候寄存器自己用的都晕了,不知道该用哪个。而且汇编语言里面跳转特别多,一不小心就会出错。指令也很多,不仅需要背下来,还要知道每条指令的用法。虽然现在已经几乎没有拿汇编来写程序的,但是我们学习还是有用处的,在嵌入式方面,就要很好的汇编基础。这次汇编课程设计让我自己更清楚的了解了汇编,也知道了自己还有好多要学的,不仅仅是汇编,还有好多的东西。学到现在,感觉写程序倒不是最难的,最难的还是调试程序,有时候一个小错误可能是要调试很久,调试成功的感觉的真的很棒。

6.2展望

  该文本编辑器的汇编程序还是有很多的地方可以改进和拓展的。第一,可以增添一些功能,如查找,字体操作,段落操作等。第二,界面可以做的更美观一点,符合用户的需求。第三,本实验中设计的界面是固定大小的,改进的话大小可以改变,这样用户输入就没有了。第四,本实验中和用户交互的地方比较少,可以考虑多一点与用户交互的地方。

文档

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

简单文本编辑器的设计与实现1.需求说明用汇编语言设计一个文本编辑器,可以在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。按F1键激活菜单File,下移光标,选择New、Open、Save、Exit子菜单项实现文件的新建、打开、保存和退出功能。按F10激活帮助,按Esc键退出帮助。2.设计说明2.1简要分析这个文本编辑器的设计采用了多个模块,有窗口模块、按键模块、光标模块、功能键模块等,而功能键模块中又是调用了按键模块
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top