




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1. 课程设计目的22. 课程设计内容22-1 设计要求22-2 设计题目23、设计思想34、数据结构设计34-1 数据段34-2 宏定义3 4-3 代码段3 5、详细的算法描述45-1 宏定义详细描述45-2 实现流程图65-3 算法描述66、源程序77、程序运行结果258、设计心得与程序不足299、参考文献29摘要设计一个具有输入输出以及对文本进行编辑的简易文本编辑器,该编辑器具有可利用Del键、BackSpace键、Home键、End键 上下左右光标键对文本进行全屏编辑的功能,并且能够打开、新建、保存文件。1、课程设计目的本课程设计的目的和任务:1. 巩固和加深学生对汇编语言课程的基本知识的理解和掌握。2. 掌握汇编语言编程和程序调试的基本技能。3. 利用汇编语言进行基本程序设计。4. 提高运用汇编语言解决实际问题的能力。2、课程设计的内容2-1设计要求1) 分析课程设计题目的要求2) 写出详细设计说明3) 编写程序代码,调试程序使其能正确运行4) 设计完成的软件要便于操作和使用5) 设计完成后提交课程设计报告2-2设计题目简单的文本编辑器基本功能:0 运行可执行文件wbbjq.exe,在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。1 按F1键激活菜单file,下移光标,通过选择New;Open;Save As;Save;Exit子菜单实现文件的新建;打开;另存;保存和退出等功能。按F10激活帮助,给出帮助信息;按ESC键退出帮助。3、设计思想 该程序主要是设计一个简易文本编辑器,达到可以可利用Del键、BackSpace键、Home键、End键 上下左右光标键对文本进行全屏编辑的目的。用BIOS功能调用中的10H中断类型,调用06号功能,设置窗口背景;调用DOS功能中的09号功能,实现显示菜单信息字符串;调用BIOS中的键盘I/O中断调用中的0号功能;从键盘读取字符,通过对上,下,左,右,光标间以及DEL,INS,BACKSPACE,END,HOME键的扫描码的判断,结合10H中中断的02号,03号功能确定光标的相应移动,从而实现对输入文本的全屏幕编辑;利用DOS系统功能调用中的文件管理功能,如建立文件,打开文件,读文件,写文件,实现对文件的操作。4、数据结构设计4-1 数据段 handle dw ? ;文件代号暂存区 path db 50 dup(0),$ ;路径暂存区 buffer db 2000 dup(?) ;数据缓存区 bak db 3850 dup(0) ;保存文本中的内容 line db ? ;列号 row db ? ;行号4-2 宏定义 red_chr macro ;读取字符 string macro p1 ; 显示字符串 win macro opr1,opr2,opr3,opr4,opr5,opr6 ;新建窗口,设置大小和颜色 pos_curse macro op1,op2,op3 ;设置光标位置 pos_get macro ;读取光标信息4-3 代码段 main proc far ;主程序 window proc near ;创建窗口子程序 edit proc near ;编辑功能子程序5、详细的算法描述5-1 宏定义详细描述1.字符宏定义 red_chr macro ;读取字符 mov ah,0 ; 读键盘。出口AH键盘的扫描码,AL字符的ASCII码 int 16hendm2.输入字符串宏定义string macro p1 ;输入字符光标 mov ah,9 ;显示字符串 lea dx,p1 ;DS:DX=串地址,$结束字符串 int 21hendm3.建立窗口宏定义win macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口 mov ah,06h ;向上滚屏 mov al,opr1 ;AL滚动行数(0清窗口) mov bh,opr2 ;BH空白区域的缺省属性, mov ch,opr3 ;(CH,CL)窗口的左上角位置(Y坐标,X坐标) mov cl,opr4 mov dh,opr5 ;(DH,DL)窗口的右下角位置(Y坐标,X坐标) mov dl,opr6 int 10hendm4.光标位置宏定义pos_curse macro op1,op2,op3 ;定义光标位置 mov ah,2 ;用文本坐标下设置光标位置 mov bh,op1 ;BH显示页码 mov dh,op2 ;DH行(Y坐标) mov dl,op3 ;DL列(X坐标) int 10hendm5.显示光标宏定义pos_get macro ;显示光标位置 mov ah,03h ;读取光标信息。;出口CH光标的起始行,CL光标的终止行,DH行(Y坐标),DL列(X坐标) mov bh,0 ;BH显示页码 int 10hendm5-2 程序结构图5-3 实现流程图是否为菜单功能键键盘输入开始否是结束显示帮助信息Esc ?显示帮助信息帮助页面文件操作各项编辑功能进入编辑功能菜单F1010F1F1orF10否是第 28 页 共 29 页6、源程序 red_chr macro ;读取字符宏定义 mov ah,0 ; 读键盘。出口AH键盘的扫描码,AL字符的ASCII码 int 16hendmstring macro p1 ;输入字符光标 mov ah,9 ;显示字符串 lea dx,p1 ;DS:DX=串地址,$结束字符串 int 21hendmwin macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口 mov ah,06h ;向上滚屏 mov al,opr1 ;AL滚动行数(0清窗口) mov bh,opr2 ;BH空白区域的缺省属性 mov ch,opr3 ;(CH,CL)窗口的左上角位置(Y坐标,X坐标) mov cl,opr4 mov dh,opr5 ;(DH,DL)窗口的右下角位置(Y坐标,X坐标) mov dl,opr6 int 10hendmpos_curse macro op1,op2,op3 ;定义光标位置 mov ah,2 ;用文本坐标下设置光标位置 mov bh,op1 ;BH显示页码 mov dh,op2 ;DH行(Y坐标) mov dl,op3 ;DL列(X坐标) int 10hendmpos_get macro ;显示光标位置 mov ah,03h ;读取光标信息。出口CH光标的起始行,CL光标的终止行,DH行(Y坐标),DL列(X坐标) mov bh,0 ;BH显示页码 int 10hendm;-data segment ;定义数据段 menu db File Help $ mass_1 db Press F1 To File Press F10 To 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 Enter The New File Name:,$ message2 db Enter The Name To Be Saved:,$ message3 db Enter The Name To Be Opened:,$ message4 db (Y/N): ,$ path db 50 dup(0),$ buffer db 2000 dup(?) bak db 3850 dup(0) line db ? row db ? char db ? hanglie db ?/?,$ ;行/列 help_mas1 db Help Text $ ;帮助内容 help_mas2 db Welcome To Use Editor! $ help_mas3 db - $ help_mas4 db 1,Press F1 to begin a new file. $ help_mas5 db 2,Press F10 to SHOW the HELP massage.$ help_mas6 db 3,Use DOWN cursor key to choose the fuction $ help_mas7 db 4,Press Esc To Quit . ,0DH,0AH,0DH,0AH,$data ends;-code segment main 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 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,9 lea dx,menu int 21hshow_2: ;显示状态栏位置及内容 pos_curse 0,24,1 ;命令提示符共25行 mov ah,9 lea dx,mass_1 ;状态栏提示信息显示 int 21h call win4 pos_curse 0,1,0 ;置光标位置 mov row,dh mov line,dlwind endp;+edit proc nearchar_get: ;读字符 call com;. com 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 line,dl cmp line,0 ;每行共80列。当line=0时,令line=79,row-, jnz direct mov line,79 dec row cmp row,0 ;当行号减为0时,再令row=1 je stop2 jmp firststop2: mov row,1 jmp firstdirect: dec line call win4 ;显示光标位置 jmp firstright: ;光标右移 pos_get mov row,dh mov line,dl cmp line,79 ;当line=79时,令line=0,row+ jnz direct2 mov line,0 inc row cmp row,24 ;当行号增到24时,再令row=23 je returns1 jmp firstdirect2: inc line ;call win4 jmp firstenter_2: jmp enterup: ;上移光标 pos_get mov row,dh mov line,dl dec row cmp row,0 je stop1 call win4 jmp firststop1: mov row,1 jmp firstdown: ;下移光标 pos_get mov row,dh mov line,dl 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,23 mov line,0 jmp firstj6: retcom 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 ;del jz del cmp ah,44h ;F10 jz help_0 rethelp_0: call helphome: ;HOME键的功能 pos_get mov row,dh mov line,0 ;置列为第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,0 ab: pos_curse 0,row,line mov ah,2 mov dl, int 21h call win4 jmp firstdel: ;DEL删除 此功能有问题 pos_get mov row,dh mov line,dl dec line pos_curse 0,row,line mov ah,2 mov dl, int 21h inc line call win4 jmp firstcm: cmp line,00 jz pos_cmpos_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_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 endp ;:fuc_key endp;.menu_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 ;列减1 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 ;EXIT项 string manu_5 win 0,15h,1,1,1,8 pos_curse 0,1,0 ;NEW项 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 ;OPEN项 win 0,15h,3,1,3,8 pos_curse 0,3,0 string manu_3 ;SAVE项 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 ;SAVE AS项 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 ;SAVE AS项 win 0,15h,5,1,5,8 pos_curse 0,5,0 string manu_5 ;EXIT项 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 pos_curse 0,15,9 string message4 ; *The file is not save! Save it now? (Y/N)*: ,$ mov ah,1 ;键盘输入并回显;出口AL=输入字符 int 21h cmp al,79h ;当输入y时 jnz q call quittq: cmp al,6eh ;当输入n时 jz quitquit: win 0,07h,0,0,24,79 pos_curse 0,0,0 mov ah,4ch int 21h retmenu_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 pos_curse 0,15,9 string message1 ; Please input file name:,$ ;cmp al,0dh mov bx,0all: mov ah,1 int 21h cmp al,0dh ;输入ENTER键为文件名输入完毕标志 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 ;建立文件。DS:DX=ASCIIZ串地址,CX=文件属性。出口:成功:AX=文件代号,错误:AX=错误码 mov cx,00 int 21h mov handle,ax mov bx,ax mov ah,3eh ;关闭文件。BX=文件代号。出口:失败:AX=错误码 int 21h win 0,3eh,1,0,23,79 pos_curse 0,1,0 jmp char_getnew endp;.open_2: jmp open;. saveas 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 pos_curse 0,15,9 string message2 ; Please input save file name:,$ mov bx,0bll: mov ah,1 ;键盘输入并回显;出口AL=输入字符 int 21h cmp al,0dh ;输入ENTER键后清屏返回 je blll mov pathbx,al inc bx jmp bllblll: pos_get push dx w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 双方离婚彩礼退还及财产分配协议书
- 离婚协议中子女教育基金起始年度认定及支付
- 商业综合体精装店铺租赁及装修设计一体化合同
- 健康产业园区精装商铺租赁与养生保健合作协议
- 2025购房意向合同范本
- 2025婚前财产分配合同
- 甘肃省庆阳市合水县2023-2024学年高三上学期第一次月考历史试题含参考答案
- 2025年中医药产业发展与管理考试试题及答案
- 2025年护士资格证考试题附答案
- 2025年山东教师招考试题及答案
- 零售业数据分析与应用实战指南
- 机电设备安装与维护方案
- 肿瘤科诊疗体系构建与运营管理
- 广东省深圳市福田区2024-2025学年八年级上学期语文期中考试试卷(含答案)
- 福建省泉州市2025届高三上学期质量监测(一)历史试卷(含答案)
- 以资抵账管理办法
- 《西门子S7-1200PLC编程及应用教程》全套教学课件
- 护士长笔试题库及答案
- 肠道准备课件
- 2025年辅警招聘考试试题库(含答案)
- 精神运动康复
评论
0/150
提交评论