汇编--简单文本编辑器的设计与实现.doc_第1页
汇编--简单文本编辑器的设计与实现.doc_第2页
汇编--简单文本编辑器的设计与实现.doc_第3页
汇编--简单文本编辑器的设计与实现.doc_第4页
汇编--简单文本编辑器的设计与实现.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目:简单文本编辑器的设计与实现可以在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。按f1键激活菜单FILE,下移光标,选择New、Open、Save、Exit子菜单项实现文件的新建、打开、保存和退出功能。按F10激活帮助,按Esc键退出帮助。代码:red_chr macro ;读取字符宏定义 mov ah,0 int 16hendmstring macro p1 ;输入字符光标 mov ah,9 lea dx,p1 int 21hendmwin 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 10hendmpos_curse macro op1,op2,op3 ;定义光标位置 mov ah,2 mov bh,op1 mov dh,op2 mov dl,op3 int 10hendmpos_get macro ;显示光标位置 mov ah,03h mov bh,0 int 10hendmdata segment ;定义数据段 menu db File Edit Help $ mass_1 db F1 Activate file F10 Activate help,$ manu_1 db New ,13,10,$ manu_2 db Open ,13,10,$ manu_3 db Save ,13,10,$ manu_4 db Save as ,13,10,$ manu_5 db Exit ,$ handle dw ? message1 db Please input file name:,$ message2 db Please input save file name:,$ message3 db Please input open file name:,$ message4 db *The file is not saved! Save it now? (Y/N)*: ,$ path db 50 dup(0),$ buffer db 2000 dup(?) bak db 3850 dup(0) line db ? row db ? char db ? help_mas1 db welcome to use editor! $ ;帮助内容 help_mas2 db This is the first active help! $ help_mas3 db good luck! $ help_mas4 db =$ help_mas5 db Press F1 to activate File. $ help_mas6 db You can use DOWN key to choose the MenuItem $ help_mas7 db Press F10 to show the help massage. Press Esc to Quit$ date db today ?/?/,$;调用日期 hanglie db ?/?,$ ;行/列data endscode segmentmain proc far ;主程序 assume cs:code,ds:datastart: push ds sub ax,ax push ax mov ax,data mov ds,ax call wind call edit retmain endpwind proc near ;创建窗口子程序 win 0,3eh,1,0,24,79 ;定义窗口背景 win 1,1fh,0,0,0,79 win 0,1fh,24,0,24,79show: ;显示菜单位置及内容 pos_curse 0,0,1 mov ah,9 lea dx,menu int 21hshow_2: ;显示状态栏位置及内容 pos_curse 0,24,1 mov ah,9 lea dx,mass_1 int 21h call win3 call win4 pos_curse 0,1,0 mov row,dh mov line,dlwind endpedit proc nearchar_get: ;读字符 call comcom proc near ;定义功能鍵 pos_get mov row,dh mov line,dlfirst: pos_curse 0,row,linej00: mov ah,0 int 16h ;从键盘读字符 ah=扫描码 al=字符码 push ax lea dx,buffer mov bufferbx,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 j6down_1: jmp downenter_1: jmp enter_2up_1: jmp upleft: ;光标左移 pos_get mov row,dh mov dl,line cmp line,0 jnz direct mov line,79 dec row cmp row,0 je stop2 jmp firststop2: mov row,1 jmp firstdirect: dec line call win4 ;显示光标位置 jmp firstright: ;光标右移 pos_get mov row,dh mov dl,line cmp line,79 jnz direct2 mov line,0 inc row cmp row,24 je returns1 jmp firstdirect2: inc line call win4 jmp firstenter_2: jmp enterup: ;上移光标 pos_get mov row,dh mov dl,line dec row cmp row,0 je stop1 call win4 jmp firststop1: mov row,1 jmp firstdown: ;下移光标 pos_get mov row,dh mov dl,line inc row cmp row,24 je stop3 call win4 jmp firststop3: mov row,23 jmp firstreturns1: jmp returnsenter: ;回车换行 pos_get mov row,dh mov line,dl inc row cmp row,24 je returns mov line,0 call win4 jmp firstreturns: mov row,24 mov line,0jmp firstj6: retcom endpfuc_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 rethelp_0: call helphome: ;HOME键的功能 pos_get mov row,dh mov line,0 call win4 jmp first_end: ;END键的功能 pos_get mov row,dh mov line,79 call win4 jmp firstbak_sp: ;退格键的功能 pos_get mov row,dh mov line,dl cmp line,0 je stop dec line jmp abstop: mov line,0ab: pos_get 0,row,line mov ah,2 mov dl,00 int 21h call win4 jmp firstdel: ;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 call win4 jmp firstcm: cmp line,00 jz pos_cmpos_cm: pos_curse 0,0,0 jmp firsthelp proc near ;显示帮助信息 call savedisplay ;显示帮助信息每行的位置 pos_get push dx win 0,57h,4,5,21,70 pos_curse 0,6,25 string help_mas1 pos_curse 0,8,11 string help_mas2 pos_curse 0,10,11 string help_mas3 pos_curse 0,12,11 string help_mas4 pos_curse 0,14,11 string help_mas5 pos_curse 0,16,11 string help_mas6 pos_curse 0,18,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 helpcls: win 0,1eh,9,10,13,70 ;清屏 call backdisplayhelp endpfuc_key endpmenu_show proc near ;显示菜单 call savedisplay push cx cmp ah,3bh ;F1功能 jz menu_sh jmp char_getmenu_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_4 string manu_5 pop dx dec dl pos_curse 0,dh,dlcopmar: red_chr cmp ah,50h jz manu_n jmp manu_hidmanu_hid: ;菜单隐藏 win 0,1eh,1,1,7,11 call backdisplay jmp char_getmanu_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_hidmanu_n0: jmp manu_nmanu_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_hidnew_1: jmp new_2manu_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_hidopen_1: jmp open_2manu_n1: jmp manu_nmanu_a: win 0,65h,3,1,3,8 pos_curse 0,3,0 string manu_3 win 0,15h,4,1,4,8 pos_curse 0,4,0 string manu_4 red_chr cmp ah,1ch jz save_2 cmp ah,48h je manu_a cmp ah,50h je manu_e jmp manu_hidmanu_n2: jmp manu_n1new_2: jmp newsave_1: call savesave_2: call saveasmanu_e: win 0,65h,4,1,4,8 pos_curse 0,4,0 string manu_4 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,48h je manu_e cmp ah,1ch je exit jmp manu_hidexit: 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 quittq: cmp al,6eh jz quitquit: win 0,07h,0,0,24,79 pos_curse 0,0,0 mov ah,4ch int 21h retmenu_show endpnew 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,2 int 10h lea dx,message1 cmp al,0dh mov ah,9 int 21h mov bx,0all: mov ah,1 int 21h cmp al,0dh je alll mov pathbx,al inc bx jmp allalll: win 0,3eh,15,9,17,61 pop dx pos_curse 0,dh,dl lea dx,path mov ah,3ch mov cx,00 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_getnew endpopen_2: jmp opensaveas proc near ;另存为文件 win 0,3eh,1,0,6,10 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,0bll: mov ah,1 int 21h cmp al,0dh je blll mov pathbx,al inc bx jmp bllblll: pos_get push dx win 0,3eh,1,0,23,79 call backdisplay pop dx pos_curse 0,dh,dl 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 jmp char_getsaveas endpopen 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,0cll: mov ah,1 int 21h cmp al,13 je clll mov pathbx,al inc bx jmp cllclll: 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,bxreplay: mov dl,bufferbx 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,0cleapath_3: mov bl,0 mov pathbx,bl loop cleapath_3 jmp char_getopen endpsave 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_4j_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,0dll: mov ah,1 int 21h cmp al,0dh je dlll mov pathbx,al inc bx jmp dlldlll: win 0,3eh,1,0,23,79 pop dx pos_curse 0,dh,dlj_4: 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 jmp char_getsave endpsavedisplay proc near push ax push bx push cx push dx push ds mov ax,0002h int 33h mov bx,0d mov cx,3840dloop1: mov ax,0b800h mov ds,ax mov dl,ds:bx mov ax,data mov ds,ax mov bakbx,dl inc bx loop loop1 mov ax,0001h int 33h pop ds pop dx pop cx pop bx pop axsavedisplay endpbackdisplay proc near push ax push bx push cx push dx push ds mov bx,0d mov cx,3840dloop11: mov ax,data mov ds,ax mov dl,bakbx mov ax,0b800h mov ds,ax mov ds:bx,dl inc bx loop loop11 pop ds pop dx pop cx pop bx pop ax retbackdisplay endpquitt 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,0qll: mov ah,1 int 21h cmp al,0dh je qlll mov pathbx,al inc bx jmp qllqlll: win 0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论