《汇编语言课设文本编辑器.docx》由会员分享,可在线阅读,更多相关《汇编语言课设文本编辑器.docx(85页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇编语言课设文本编辑器汇编语言课程设计说明书学 院: 软件学院 专 业: 软件工程 学生姓名: 马江涛 学 号: 题 目: 文本编辑器 指导教师: 陈够喜 潘广贞 杨剑 马巧梅 2016年 1 月- 80 - / 85 目录摘 要I一、课程设计的目的- 1 -11设计的目的- 1 -1.2 设计的内容- 1 -二、设计方案的论证- 2 -2.1 开发背景- 2 -2.2 程序设计的意义- 2 -2.3设计思路- 2 -三、设计的实现过程- 3 -3.1 总体设计方案- 3 -3.2 实现过程- 3 -3.3 数据定义- 4 -3.4模块设计- 6 -四、调试运行及结果分析- 9 -4.1 运行
2、结果- 9 -4.2 结果分析- 12 -五、测试及问题探讨- 13 -5.1程序测试- 13 -六、课设总结及体会- 16 -七、参考文献- 17 -附录- 18 -摘 要文本编辑器在我们的日常生活中使用非常频繁,是我们工作当中不可或缺的工具。我们经常使用的文本编辑器有微软的记事本和 。但是本次课程设计我使用了8086汇编语言实现了下的简易文本编辑器,虽然及平时使用的文本编辑器相比功能比较简单,也不够完善。但是旨在考察汇编语言的运用以及软件的实现过程。本次设计以设计思路为主介绍简易文档编辑器的设计实现程,对其设计原理进行一定的阐述,并且分模块对其中较为重要的子程序进行讲解,并且附上运行结果及
3、汇编源程序。 关键字: 文本编辑器、汇编语言、 一、课程设计的目的11 设计的目的掌握汇编语言的使用,掌握、功能调用的使用方法,以及对汇编语言程序设计的过程有较深刻的理解。1.2 设计的内容本次设计主要包括一下内容:1. 美观且易于操作的界面;2. 在文本编辑区可以随意输入字符;3. 可以使用键对光标的前一个字符删除;4. 实现了光标上移、下移、左移、右移;5. 实现了下拉菜单以及弹出式菜单;6. 可以实现屏幕的上卷和下卷; 二、设计方案的论证2.1 开发背景本次开发主要是在微机原理及接口技术这门课学习完成之后,通过做一些实用的小软件考察自己的学习情况。并且熟悉汇编语言开发程序的过程。2.2
4、程序设计的意义由于信息化的普遍,所以文本编辑器在我们工作中也是必不可少的,所以我选择了开发文本编辑器,不只为人们带来了便利,同时也能锻炼自己开发思路,熟悉汇编语言开发过程,以及提高软件开发水平。常见的有下的记事本, X下的文本编辑,下的、下的等。本次设计类似于下的。2.3 设计思路本程序主要利用功能调用设计编辑器的菜单和编辑窗口,以及光标的定位及获取。利用功能调用实现字符的读取及输出,以及对按键的识别。通过对光标以及字符输出来控制删除以及上下左右键的控制。三、设计的实现过程3.1 总体设计方案程序利用模块化设计方法,对每个要实现的功能都设计成子程序,方便使用。程序中具体模块如图3-1。主程序绘
5、制界面按键判断子菜单绘制功能的实现图3-1 程序关系3.2 实现过程程序通过对和的功能调用实现了对窗口、菜单、字符输入输出、按键识别等功能。程序整体利用了模块化的程序设计方法,把每个功能模块都分成子程序来分别调用。程序中主要用到了以下子程序:l (显示菜单栏);l (显示编辑窗口);l (显示文件菜单);l (显示文本菜单);l (删除字符);l (光标向下);l (光标向左);l (光标向上);l (光标向右);l (菜单的循环选择);l (退出);l (子菜单显示及控制);3.3 数据定义程序中要显示的字符串都事先在数据段和附加段中定义好了,由于功能调用的需要所以把数据定义在了数据段和附加
6、段中。以下是程序中用到数据的定义: s $f1 ,10,13,10,13,$f2 $i 0b 0 1200 (?),$ t $ $1 $2 $3 C1141$4 2013-6-22$q1 543589796$ s1 $s2 $s3 $s4 $s5 $s6 $s7 $ :$ 5,5,$ :$ :$ :$ :$ 事先定义好数据的结构可以减少程序设计中很多的麻烦。3.4 模块设计3.4.1绘制界面主要利用了功能调用绘制了两个窗口,一个是编辑区,一个是菜单栏。实现过程见图3-4-1。开始绘制编辑区绘制菜单栏返回主程序图3-4-1 绘制界面3.4.2 检测按键这个模块主要是利用了0, 16H来实现的,其
7、中中存放的是按键的扫描码,中存放的是按键的码。具体实现过程见图3-4-2。开始等待输入0?按键处理输出字符返回主程序否是图3-4-2 检测按键3.4.3 子菜单绘制该模块同样采用了功能调用设置子菜单,具体操作见图3-4-3。开始绘制子菜单绘制子菜单绘制子菜单绘制子菜单返回主程序图3-4-3 绘制子菜单四、调试运行及结果分析4.1 运行结果程序的主界面,包含有,菜单,如图4-1所示。图4-1 程序主界面按下键对菜单进行循环选择,绿色光带显示当前选中菜单,按任意除之外的按键切换到编辑区,如图4-2所示。图4-2 选择菜单菜单包括和子菜单,如图4-3所示。图4-3 下拉菜单当光带选中或者时按下回车键
8、,将执行光带所选中的子菜单项所对应的程序,图中为选中,如图4-4所示。图4-4 选择菜单下只有一个,用来清屏,如图4-5所示。图4-5子菜单主要用来显示作者以及开发的相关信息,如图4-6.图4-6 选中4.2 结果分析本程序主要仿照下的文本编辑器,但是由于时间的关系有些功能未实现,主要实现了菜单的弹出、选择、光标的移动、文本的删除、屏幕上卷等功能。五、测试及问题探讨5.1 程序测试首先是测试文本编辑区,如图5-1.图5-1 编辑测试然后是测试菜单弹出后文本区的内容是否被抹掉,如图5-2和5-3所示。图5-2 文本区保存图5-3 文本区回复接下来是测试清屏菜单项,如图5-4和5-5所示。图5-4
9、 选中图5-5 文本清屏六、课设总结及体会通过本次课程设计可以说收获颇多,虽然在程序设计的过程中遇到很多问题,其中想过放弃,也曾因此彻夜不眠过,甚至有思路就立马把程序写出来。但最终都在老师的帮助和自己的努力下走过来了。做完了这个程序之后感觉对汇编的理解更加深刻了,也似乎懂得了开发底层软件的原理。虽然汇编和其它程序设计语言相比麻烦很多,但是汇编是通过对计算机底层硬件的控制来达到人机交互的效果或者是实现了人们需要的功能。可以说了解了计算机大体的工作过程,为以后学习嵌入式系统以及计算机底层方面做了铺垫。七、参考文献1吕林涛. 微型计算机原理及接口技术.科学出版社.2011年5月2王延松.微机原理及接
10、口技术实践教程.2011年9月3沈美明汇编语言程序设计.清华大学出版社.2001年8月附录源程序: s $f1 ,10,13,10,13,$f2 $i 0b 0 1200 (?),$ t $ $1 $2 $3 C1141$4 2013-6-22$q1 543589796$ s1 $s2 $s3 $s4 $s5 $s6 $s7 $ :$ 5,5,$ :$ :$ :$ :$ 1000 (?) : ,0 ,3 10h ;显示菜单栏 ;显示编辑区 ,4 21h ;显示菜单栏 ,6 ,0 ,0 ,0 ,0 ,79 ,70h 10h ,6 ,1 ,0 ,0 ,0 ,79 ,70h 10h ,2 ,0 ,0
11、 ,0 10h ,09h 21h ;显示编辑区 ,0;作为缓存指针 ,6 ,0 ,1 ,0 ,24 ,79 ,1 10h ,6 ,1 ,1 ,0 ,24 ,79 ,1 10h: ,2 ,0 ,1 ,0 10h1: ,80: ,00h;从键盘读取字符 16h ,1;判断输入的字符是否是 ,0;判断输入的字符是否是回车 ,48h;判断按键是否是上中存放的是特殊键盘扫描码 ,4 ;判断是否是左 ,4;判断是否是右 ,50h;判断是否是下 ,49h;判断是否是键按下 ,0 ;每次接收一个字符时都存放到中 ,$ 中存放的是普通字符的码 ,2 21h 1;这里相当于无限循环的值不起作用: ,10 ,13
12、,3;获取光标位置 ,0 10h ,24;判断回车之后是否是行尾 ,2 ,0 ,0 10h 1: ;这里不需要重新定义的值,程序会自动换行 1 ;调用左移子程序 1 ;调用右移子程序 1 ;调用下移子程序 1 ;调用子程序 1 ;上卷一行定位到行尾 1: ,6 ,0 ,0 ,0 ,24 ,79 10h ;编辑区上卷一行光标定位到行尾 ,6 ,1 ,1 ,0 ,24 ,79 ,1 10h ,2 ,0 ,24 ,0 10h ,3;读取光标位置 ,0 10h ,1 ,2;定位光标位置 10h: ;屏幕下卷 ,7 ,1 ,1 ,0 ,24 ,79 ,1 10h ,3;读取光标位置 ,0 10h ,2;
13、定位光标位置 10h ,3;读取光标位置 ,0 10h ,0;判断是否到了第一列 ;是的话移到上一行行尾 ,2 ,0 10h 1 ,1 ,6 ,1 ,1 ,0 ,24 ,79 ,1 10h ,2 ,0 ,79 ,1 10h 1 ,2;移到上一行行尾 ,0 ,79 10h1: ,3;读取光标位置 ,0 10h ,79 ,24 ,6 ,1 ,1 ,0 ,24 ,79 ,1 10h ,2 ,0 ,24 ,0 10h 2: ,2 ,0 ,0 10h 2: ,2 ,0 10h2: ,3 ,0 10h ,24 ,6 ,1 ,1 ,0 ,24 ,79 ,1 10h ,3 ,0 10h ,2 ,0 ,24 1
14、0h 3: ,2 ,0 10h3: ;按下键的处理过程 i,0 ;判断当前的菜单项是第几个 ,6;菜单项处清屏 ,0 ,1 ,0 ,0 ,0 ,3 10h ,13h输出字符串 ,0 ,4 ,0 ,0 ,0a5h ,0 1 10h 0: i,1 1 ,1 ,6 ,0 ,0 ,9 ,0 ,12 10h ,13h输出字符串 ,0 ,4 ,0 ,9 ,0a5h ,0 2 10h 01: i,2 2 ,1 ,6;小菜单清屏 ,0 ,0 ,18 ,0 ,21 10h ,13h输出字符串 ,0 ,4 ,0 ,18 ,0a5h ,0 3 10h 02: i,3 1 ,1 ,6 ,0 ,0 ,27 ,0 ,30
15、 10h ,13h输出字符串 ,0 ,5 ,0 ,27 ,0a5h ,0 4 10h0: i i,4 i,0: ,0h 16h ,49h ,0;判断是否是回车 0 i,0 0: i,1 0: i,3 ;不确定 0: i,1 ,6;菜单项处清屏 ,0 ,70h ,0 ,0 ,0 ,3 10h ,13h输出字符串 ,0 ,4 ,0 ,0 ,70h ,0 1 10h : i,2 1 ,70h ,6 ,0 ,0 ,9 ,0 ,12 10h ,13h输出字符串 ,0 ,4 ,0 ,9 ,70h ,0 2 10h 1: i,3 2 ,70h ,6;小菜单清屏 ,0 ,0 ,18 ,0 ,21 10h ,1
16、3h输出字符串 ,0 ,4 ,0 ,18 ,70h ,0 3 10h 2: i,0 ,70h ,6 ,0 ,0 ,27 ,0 ,30 10h ,13h输出字符串 ,0 ,5 ,0 ,27 ,70h ,0 4 10h: i,0 ;显示菜单 ,6 ,0 ,70h ,1 ,0 ,2 ,6 10h ,6 ,1 ,70h ,1 ,0 ,2 ,6 10h ,2 ,0 ,1 ,0 10h ,09h 1 21h ,00h 16h ,50h;如果按方向键下 : b,0 ,13h 6 ,0 ,4 ,2 ,0 ,0 ,70h 10h ,13h 5 ,0 ,4 ,1 ,0 ,0 ,05 10h : b,1 ,13h
17、5 ,0 ,4 ,1 ,0 ,0 ,70h 10h ,13h 6 ,0 ,4 ,2 ,0 ,0 ,05 10h: b b,2 b,0: ,00 16h ,50h;判断是否是方向键下 ,01h;判断是否是 1 ,0;判断是否是回车 b,1 1: 1: ,6 ,0 ,1 ,0 ,24 ,79 ,1 10h ,6 ,1 ,1 ,0 ,24 ,79 ,1 10h ,2 ,0 ,1 ,0 10h ,9 21h ,6 ,0 ,1 ,0 ,24 ,79 ,1 10h ;显示缓存数据 ,6 ,0 ,70h ,6 ,19 ,6 ,59 10h ,6;弹出窗口显示区 ,1 ,70h ,6 ,19 ,6 ,59 1
18、0h ,2 ,0 ,6 ,34 10h ,9 21h ,6 ,0 ,5 ,7 ,19 ,14 ,59 10h ,6 ,1 ,5 ,7 ,19 ,14 ,59 10h ,13h;显示 ,0 ,5 ,0 ,52h ,10 ,24 10h ,2 ,0 ,10 ,32 10h ,9 21h ,13h ,0 ,4 ,0 ,70h ,12 ,37 10h: ,00h 16h ,0 ,6 ,0 ,1 ,0 ,24 ,79 ,1 10h ,6 ,0 ,0 ,0 ,0 ,24 ,79 10h ,4 21h ,6 ,0 ,70h ,1 ,18 ,1 ,24 10h ,6 ,1 ,70h ,1 ,18 ,1 ,24
19、 10h ,2 ,0 ,1 ,18 10h ,09h 2 21h ,13h 7 ,0 ,5 ,1 ,18 ,0 ,05 10h: ,0 16h ,01h r121 ,0 r121 ,$r121: ,6 ,0 ,1 ,0 ,24 ,79 ,1 10h ,6 ,0 ,70h ,6 ,19 ,6 ,59 10h ,6 ,1 ,70h ,6 ,19 ,6 ,59 10h ,2 ,0 ,6 ,34 10h ,9;输出 1 21h ,6 ,0 ,3 ,7 ,19 ,14 ,59 10h ,6 ,1 ,3 ,7 ,19 ,14 ,59 10h ,13h ;显示 ,7 ,8 ,30 ,0 ,30h 10h ,
20、6;显示处清屏 ,0 ,30h ,9 ,30 ,9 ,38 10h ,13h ;显示 ,5 ,9 ,30 ,0 ,31h 10h ,6;显示处清屏 ,0 ,3 ,10 ,30 ,10 ,38 10h ,13h ;显示日期 ,5 ,10 ,30 ,0 ,30h 10h ,6;显示处清屏 ,0 ,3 ,11 ,30 ,11 ,38 10h ,13h ;显示 ,3 ,11 ,30 ,0 ,30h 10h ,2 ,0 ,8 ,42 10h ,9;显示 2 21h ,2 ,0 ,9 ,42 10h ,9;显示 3 21h ,2 ,0 ,10 ,42 10h ,9 4 21h ,2 ,0 ,11 ,42
21、10h ,9;显示 1 21h ,13h;显示 ,0 ,4 ,0 ,70h ,13 ,37 10h: ,0 16h ,0 ,6 ,0 ,1 ,0 ,24 ,79 ,1 10h ,6 ,1 ,1 ,0 ,24 ,79 ,1 10h ,2 ,0 ,1 ,0 10h ,3 ,0 10h ,1 2 ,0 1 ,2;当光标在第一行第0列时 ,0 ,1 ,0 10h ,2 ,0 21h ,2;光标回退 ,0 ,1 ,0 10h 2: ,0 1 ,2 ,0 ,79 10h ,2 ,0 21h ,3 ,0 10h ,2;光标回退 ,0 ,79 10h 1: ,2;当光标不是在第一行以及不在第0列时 ,0 10h ,2 ,0 21h ,3 ,0 10h ,2;光标回退 ,0 10h : ,$