ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:236.50KB ,
资源ID:4474488      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4474488.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编 字符图形程序 课程设计报告.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编 字符图形程序 课程设计报告.docx

1、汇编 字符图形程序 课程设计报告课程设计说明书题目: 字符图形程序 院 系: 计算机学院 专业班级: 学 号: 学生姓名: 指导教师: 2010年 12月 31日 安徽理工大学课程设计(论文)任务书 计算机科学与工程学院 硬件 教研室学 号 学生姓名 专业(班级) 设计题目题目一:判断闰年题目二: 简单计算器题目三: 代码转换程序题目四:字符图形程序题目五: 学生成绩管理题目六: 打字练习 (注:请在自己选做的题目后打)设计技术参数1 熟悉汇编指令、宏汇编语言的编程方法 2 BIOS中断调用、系统功能中断调用方法 3 磁盘文件、及文件内容操作设计要求题目的选择是根据汇编语言的特点主要针对系统内

2、部的一些中断调用、系统功能调用、系统数据处理、文件数据处理而设计的,是对所学课程知识较为系统的应用。 由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善程序。 另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。 工作量1. 完成所选题目的软件设计;2. 课程设计说明书1000字(不包括程序源代码)左右。工作计划第1次熟悉软件环境。第2次绘制程序流程图。第3次用编写程序。第4次用调试运行程序。第5次编写课程设计说明书参考

3、资料1.李敬兆 8086/8088和arm核汇编语言程序设计 中国科技大学出版社 2.沈美明,温冬婵 编著IBMPC汇编语言程序设计(第二版) 清华大学出版社出版3. 沈美明,温冬婵,张赤红 编著IBMPC 汇编语言程序设计实验教程 清华大学出版社出版指导教师签字教研室主任签字 2010年 12月 17 日安徽理工大学课程设计(论文)成绩评定表指导教师评语:成绩: 指导教师: 年 月 日摘要本次实验我主要做的是利用汇编程序实现字符图形显示,即通过一些字符的组合显示出字或者是图形。为了迎接2011年的到来,我编写的程序将显示2011以及笑脸这些内容。在程序编写前,我首先对自己显示的图形进行了设计

4、,确定了每个数字相对于前一个数字的位置,以便在编写程序的时候正确定义字符的属性,也为在显示的时候能够显示较好的效果,打下了基础。本次实验实验的编写环境是MASM,编译、链接也是在该环境下实现的。程序的运行我用的是DOS环境。通过参考网上的一些原程序,我发现要编写好该程序,首先应该对BIOS的中断10熟悉,因此程序编写前,我先认真学习了该BIOS中断的有关功能。万事开头难,一旦了解了设计此程序的原理,并在此基础上掌握相关的技术,其他的工作也就跟着展开来。关键词:BIOS,字符,图形,中断调用 目录1设计目的 12概要设计 22.1 系统总体分析 22.2 主模块框图 23 详细设计 33.1 主

5、模块及子模块说明 33.2 各模块详细设计 34程序调试 104.1 运行界面分析 104.2算法的分析 104.3调试过程及分析 105心得体会 135.1 设计体会 135.2 系统改进 13参考文献 14 1设计目的本次设计的目的主要是为了让大家进一步的学会汇编程序的编译,链接,执行操作。深入了解利用汇编指令是如何实现对存储器及寄存器访问的,并在此基础上学会用汇编指令、伪指令、BIOS中断调用、DOS中断调用及子程序等实现相应的功能。字符图形程序设计的重点在于加强学生对BIOS中断10的学习,了解该中断的相应功能,感受中断调用给汇编程序带来的方便。2概要设计2.1 系统总体分析本次程序的

6、设计题目为字符图形显示,根据题目,我们可得出,我们所要完成的任务就是用若干个字符来组合成一个图形并在屏幕中显示。故有以下几步:1)定义数据段,其中包括用以显示图形的字符列表。2)定义堆栈段。用来在调用子程序时,保存“现场”,恢复“现场”3)定义代码段。代码段的地位如同计算机中的CPU,是整个程序的核心。代码段主要包括主程序MAIN,清屏子程序CLEAR_SCREEN,画图子程序MAKE_GRAPHICS。2.2 主模块框图该程序的主模块图如图2-1: 图2-1 主要的模块框图3 详细设计3.1 主模块及子模块说明数据段:根据你想要显示的图形,来定义每一字符。列表的第一项是组成该图形所需字符的个

7、数,其以后的部分直至数据段结束定义的都是显示图形的字符,每个字符为列表的一项,每一项包含四个元素,每个元素都为字节类型,它们分别是字符的ASCII码,字符的属性、字符相对于前一个字符的纵向位置、字符相对于前一个字符的横向位置。堆栈段:这一段即使删除对程序的总体效果来说没有太大影响,因为系统会自动“划”出一部分空间用于堆栈。但是为了使程序满足完整性的条件,还是应该定义了一个相对较大的堆栈。代码段:是整个汇编程序的核心部分,该段利用汇编指令依靠堆栈段的辅助作用对数据段中内容进行处理。它包括三个部分:1)主程序MAIN:主要进行设置显示模式和退出的一般操作,其类型为FAR,因为从本质上来说,一个汇编

8、程序的运行是利用DOS的段间调用主程序实现的;2)清屏子程序CLEAR_SCREEN:为了能够使图形很好的显示在窗口中,必须保持显示图形的屏幕在显示图形之前是没有其他的符号存在的,利用清屏子程序可以将显示图形前的操作遗留的痕迹清理掉,保证屏幕的整洁;3)画图子程序MAKE_GRAPHICS,这个程序根据数据段的字符列表,利用BIOS中断10的2号功能、0F功能及9号功能将其中定义的字符一个个的显示在屏幕上。3.2 各模块详细设计1)程序有清屏子程序如图3-1:图3-1 清屏子程序流程图画图子程序如图3-2:图3-2 画图子程序流程图图3-3 主程序流程图2)程序的源代码如下:DATA SEGM

9、ENTDB1 DB 95;定义字符列表,各字符 DB 05H,14H,0,0;各参数字符ASCII码,字符属性,纵坐标,横坐标 DB 05H,14H,0,1 DB 05H,14H,1,0DATA ENDSSTACK SEGMENT DB 2000 DUP (?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AH,0 MOV AL,00;显示方式的定义,0强调的是背景是黑白的 INT 10H CALL

10、CLEAR_SCREEN;调用清屏子程序 LEA DI,DB1 MOV DH,10;光标所在位置 MOV DL,2;颜色 CALL MAKE_GRAPHICS;画图子程序 MOV AH,8;键盘输入 INT 21H CMP AL,71H;判断是否为Q JZ EXIT JB NEXT NEXT:CMP AL,51H;Q JZ EXIT MAIN ENDPCLEAR_SCREEN PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,6 MOV AL,0 MOV CH,0 MOV CL,0 MOV DH,120 MOV DL,200 MOV BH,7;空

11、白区域的缺省属性 INT 10H POP DX POP CX POP BX POP AX RETCLEAR_SCREEN ENDPMAKE_GRAPHICS PROC NEAR;画图子程序 PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AH,0FH;显示器的状态,入口参数AH,出口参数:AL=显示方式AH=屏幕字符列数,BH=页码 INT 10H SUB CH,CH MOV CL,DI INC DIAGAIN:ADD DH,DI+2 ADD DL,DI+3 MOV AH ,2;设置光标的位置,入口参数:AH=02H,BH=页码,DH,DL列行坐标 IN

12、T 10H MOV AL,DI MOV BL,DI+1 PUSH CX MOV CX,1 MOV AH,09;在当前光标处显示属性字符,入口:AH=09H,AL=显示的字符 ;BL=字符的属性,CX=重复输出的次数 INT 10H POP CX ADD DI,4 LOOP AGAIN POP DI POP DX POP CX POP BX POP AX RET MAKE_GRAPHICS ENDPEXIT: MOV AH,4CH INT 21H CODE ENDS END MAIN3)对程序进行分析如下:再调用中断的时候,中断的功能号总是置于AH寄存器中。同时,为了实现相应的功能,应该在调用中

13、断之前将相应的入口参数放于默认的寄存器中。本次实验中,所用到的BIOS中断有以下几种:在主程序设计之初对显示模式的定义利用了其中的0号功能现对它的描述如下:功能号:00H功能:设置显示模式入口参数:AH=00HAL=显示模式显示模式的列表为:显示模式 显示模式属性00H 40*25 16色 文本01H 40*25 16色 文本02H 80*25 单色字符显示方式03H 4色 彩色字符显示方式.程序中,我将AL的值设为02表示在图形显示时,我所采用的模式是80*25的单色文本字符显示模式。在清屏子程序中,调用的中断有:功能号:06H功能: 初始化屏幕或滚屏入口参数:AH=06H向上滚屏AL= 滚

14、动的函数BH=空白区域的缺省(CH、CL)=窗口的左上角位置(Y坐标,X坐标)(DH、DL)=窗口的左上角位置(Y坐标,X坐标)出口参数:无利用该功能,设置AL的值为0(清窗口),BH的值为7即00000111,设置空白区域的属性与前景色一致,(CH、CL)=(0,0),(DH、DL)=(79,24)即图形能够显示在这个区域之内。AH=06/07都可以起到清屏的作用,不同的是,前者是向上滚屏,后者是向下滚屏,即06H表示清屏时从下向上清理,07H表示清屏时从上向下清理。画图子程序中用到的BIOS的10号中断:功能号:0FH 功能:读取显示器模式 入口参数:AH0FH 出口参数:AH屏幕字符的列

15、数 AL显示模式(参见功能00H中的说明) BH页码功能号:02H 功能:用文本坐标下设置光标位置 入口参数: AH02H BH显示页码 DH行(Y坐标) DL列(X坐标) 出口参数: 无功能号:09H 功能:在当前光标处按指定属性显示字符 入口参数:AH09H AL字符 BH显示页码 BL属性(文本模式)或颜色(图形模式) CX重复输出字符的次数 出口参数:无三个功能调用依次为后者的基础,0F功能的出口参数,是2号功能的入口参数,只有设定好了光标的位置,才能显示对应的字符,最终通过不断的循环调用(LOOP AGAIN),即将所有的字符均显示出来了。得到效果图后,返回到主程序,主程序通过键盘的

16、输入,判定是否返回DOS界面。首先判定输入的字符是否为Q,若不是则再判定输入的字符是不是q,若都不是怎什么也不做,若是其中的一个值则返回DOS界面中。4程序调试4.1 运行界面分析本程序我所使用的运行界面为DEBUG,如图4-1:图4-1 DEBUG运行界面 利用DEBUG进行汇编,对初学者来说比较容易,只要进入.ASM文件经编译链接后产生的.EXE文件的目录下,利用命令debug xx.exe即可对目标文件进行汇编、反汇编等操作,DEBUG作为调试程序有很多的指令,该此程序设计我所用到的主要是反汇编命令U、运行指令G以及退出指令Q。U(Unassemble)对指令进行反汇编,后可带参数也可不

17、带。指令的地址以十六进制的形式和汇编的助记符一起显示出来。可以使用U xxxx:xxxx命令从某一指定的位置开始反汇编。如果不加参数,将显示至屏幕满为止。它的默认段地址包含于CS寄存器中。G(go)也称转移命令,加参数时用来执行正在调试的程序,当执行到指定的地址时停止,并显示寄存器和下一条要执行的命令。不加参数时,用于执行正在调试的没有断点的程序,起始地址默认为DS:0000,程序运行结束,DEBUG显示“Program terminated normally”本次设计运用的就是不带参数的GO命令来执行程序。DEBUG除了能够汇编程序外,还可以用来检查和修改内存位置,载入存储和执行程序、以及检

18、查和修改寄存器。总的来说,DEBUG对于汇编的初学者绝对是强有力的工具。4.2算法的分析本次设计的思想便是利用字符来拼凑一个图形,调用画图子程序循环的输出不同位置的字符,直到所需的所有字符输出完,图形也就显示出来了。4.3调试过程及分析1)编译,链接,如图4-2: 图4-2 编辑器界面点击该编辑器中的C(compiler),弹出对话框,如图4-3:图4-3 编译对话框点击确定,若没有错误,菜单栏中的L(Link)会由灰色,变成红色,点击该键,弹出如下对话框,如图4-4:图4-4 链接对话框链接成功后点击R(Run)即可进入DOS界面(与文件所在的目录一致),如图4-5:图4-5 DOS界面在光

19、标闪动处输入debug 0.exe后,进入debug,再利用go命令执行程序。程序的结果如图4-6:图4-6程序运行结果按Q后可以退出,返回DOS,效果如图4-7:图4-7 按Q(q)后的显示5心得体会5.1 设计体会当拿到这个题目的瞬间,让我感到很迷茫。以前所做的汇编实验,多是对存储器,寄存器的内容进行处理。而这次字符图形显示,看着老师给的提示,我也不是很明白这个程序的最终成果到底是什么样子的。定义字符列表是干什么用的呢?以前从没有碰到过关于定义列表的东西啊?带着这些疑问,我先是问了老师,老师说用很多个字符拼成一个图形,所以要定义一个字符列表来存放组成图形的每个字符,及其相应的属性。有了一个

20、大概的框架,了解了程序设计的目的,我着手就容易多。利用网络资源我搜到了一个显示“中国北京”的源程序,当时放心多了,有了可以借鉴的东西就仿佛有了先人的指导。打开了源程序,懵了,看不懂!BIOS中断调用,以前接触少的可怜。于是我又在网上看了一些关于BIOS中断10的相关功能,一边看程序,一边看网上的解释,但是对各种各样的显示模式,及显示相关的专有名词不是很了解,比如06H号功能的向上滚屏就弄的我一头雾水,又去请教了老师。在老师的举例分析下,总算有了一定的认识,了解了它是怎么工作的。但老师提醒我,不要把重心过多的放在外在的显示上,要关注字符是如何显示的。按照老师的指示,我先泛泛的看了和显示相关的内容

21、,大概有了一个概念,然后把主要精力放在了画图子程序上,其实我觉得画图子程序就是三个中断调用的配合,外加一个循环。仔细分析各个功能的入口出口参数,很快网上download的程序就看明白了。万事开头难,有的东西你一旦有了思路,不断思考,并按此循序渐进的展开最终定能获得成功,当你回过头来看看自己走过的路时,你会为自己而感到自豪,会有一种由衷的满足感。5.2 系统改进虽然我的程序基本满足了本次课程设计的要求,但其中依然有很多需要改进的地方。比如我选择图形的显示模式是单字符显示方式,这比320*200的四色图形显示方式简单的多,降低了程序的要求,省掉了对屏幕色彩及调色板的设置。同时,由于最后以Q(q)键结束程序,所以不需要延迟程序,因此在程序中将其省略。但编写延迟子程序的方法和思想应该长期保存在自己的记忆中。参考文献1李敬兆 .8086/8088和arm核汇编语言程序设计. 合肥:中国科技大学出版社 2沈美明,温冬婵编著.IBMPC汇编语言程序设计(第二版).北京:清华大学出版社出版3沈美明,温冬婵,张赤红 编著.IBMPC 汇编语言程序设计实验教程. 北京:清华大学出版社出版

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1