目录1设计内容及要求……………………………………………11.1设计内容……………………………………………………………11.2设计要求……………………………………………………………12设计…………………………………………………………12.1设计原理……………………………………………………………12.2详细设计…………………………………………………………..22.2.1模块层次图……………………………………………………………………….22.2.2各模块说明……………………………………………………………………….22.3程序流程图…………………………………………………………22.4主要说明…………………………………………………………….43测试及评估…………………………………………………43.1测试结果……………………………………………………………43.2程序的改进空间……………………………………………………74心得体会……………………………………………………75参考资料……………………………………………………8附录……………………………………………………………9武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院1字符图形程序的设计与实现1设计内容及要求:1.1设计内容:(1)制作一个图形元素表,表中将所需的各种字符图形编上号码,并用存储器映射法将其显示在屏幕的左上部分。(2)将光标定位在屏幕的右半部分画图区,上、下、左、右光标控制键控制光标在四个方向的移动,不显示其轨迹,同时要控制光标位置不超出画图区的边界。(3)当按动某一数字键时,在光标位置处显示出相应编号的字符图形,然后移动光标,再显示下一个图形,最后绘出一幅有字符组成的图形。(4)按动ESC键,退出程序,返回DOS。1.2设计要求:本次设计的目的主要是为了让大家进一步的学会汇编程序的编译,链接,执行操作。深入了解利用汇编指令是如何实现对存储器及寄存器访问的,并在此基础上学会用汇编指令、伪指令、BIOS中断调用、DOS中断调用及子程序等实现相应的功能。字符图形程序设计的重点在于加强学生对BIOS中断10的学习,了解该中断的相应功能,感受中断调用给汇编程序带来的方便。通过编写汇编语言,实现字符图形的显示,让学生加深了对汇编程序理论课程的理解,更加了解汇编语言的应用,并且能够按要求编写程序,从而提高学生的汇编语言知识,更进一步地了解了汇编语言,通过本次设计,可以让学生深刻体会到中断调用的功能。2设计:2.1设计原理:本程序是显示由多个字符组成的图形的程序,需要将多个字符定义在一个字符图形表里。字符图形表包括每个字符的ASCⅡ码、属性以及在显示图形中的相对位移量(相对位移量是指前一个字符和当前要显示的字符之间的行距和列距)四个参数组成。字符图形表中的第一个字节“89”是组成图形的字符数,编写程序需要将每个字符的ASCⅡ码和属性以及显示的位置放入相应的寄存器中,然后发出显示命令,当89个字符都显示出来后,我们就可以看到两个“字”的图形。为了清晰地看到每一个字,需要延时,程序中编写了延时子程序。此外,程序中还有武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院2清屏子程序和移动子程序,通过适当改变延时时间,甚至可以实现图形的移动。2.2详细设计:2.2.1模块层次图:2.2.2各模块说明:输入功能为从键盘读字符。调用参数AH=功能类型。返回参数AL=输入字符的ASCII码,AH=输入字符的扫描码。显示功能在DOS文本方式显示字符。使用DOS显示中断(INT10H),调用参数AH=功能类型,BH=显示的页号,AL=要显示的字符,BL=显示字符的属性(颜色等),CX=字符的重复次数。无返回参数。清屏功能为清除屏幕内的内容。调用参数AH=功能类型,AL=0初始化窗口,BH=卷入行属性,CH/CL=要清屏区域左上角的行/列号,DH/DL=要清屏区域右下角的行/列号。无返回参数。2.3程序流程图:字符图形程序输入显示清屏图1“字符处理系统”层次图武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院3开始显示字符集和边界从键盘接收字符,AH←字符码AH←扫描码字符是否为上字符是否为下字符是否为左字符是否为右字符是否为DEL字符是否为ESC结束NNNNNN字符是否为数字1-9字符是否为字母a-i光标是否过界N光标位置还原光标上移光标是否过界光标位置还原光标下移光标是否过界光标位置还原光标左移光标是否过界光标位置还原光标右移清除屏幕内容显示对应的字符设置对应的颜色图2“字符处理系统”流程图YYYYYYNYYNNYYYNYN武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院42.4主要说明:数据类型的定义和说明:datasegmentarray1db0,1,2,3,4,5,6,7,8,9rowdb0coldb0colordb0fharray2db'pleasepayattention:pressESCtoexit&pressdeltoclearscreen','$'array3db'CHARACTER:','$'array4db'COLOR:','$'dataends函数说明:Start函数输入数字表示的函数显示颜色Up之类的函数改变方向Draw函数开始画图Reset函数重新画图Clear函数清屏函数3测试及评估:3.1测试结果:通过键盘输入0-9来画字符,通过输入←,↑,→,↓来控制画图光标,通过键盘输入a-i来控制显示字符的颜色,输入‘del’键来清除画图区域,输入“ESC”则退出,结果如下图:其中,控制光标对应的扫描码为:↑(48H)、←(4BH)、→(4DH)、↓(50)进入masm:武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院5运行文件:Link文件:运行.exe文件:武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院6运行结果:结果:武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院73.2程序的改进空间:虽然我的程序基本满足了本次课程设计的要求,但其中依然有很多需要改进的地方。比如我选择图形的显示模式是单字符显示方式,这比320*200的四色图形显示方式简单的多,降低了程序的要求,省掉了对屏幕色彩及调色板的设置。同时,由于最后以Q(q)键结束程序,所以不需要延迟程序,因此在程序中将其省略。但编写延迟子程序的方法和思想应该长期保存在自己的记忆中。4心得体会:为期一周的课程设计很快结束了,在设计的过程中,可谓既有喜又有忧,遇到了一些难题,也获得了很大的收获,做如下小结:我的课程题目为:字符图形程序的设计与实现,其中的一些相关知识在课上是老师没有讲过的,所以要先做好准备工作。根据课程任务书的要求,阅读了相关的资料:了解到了如何使用上下左右四个键,及其相应的扫描码的使用;认识了DOS中断中各个寄存器的使用和含义;理解了BIOS设置显示的方式;及图形程序设计的方法。在设计中也遇到了一些问题,像在进行界面设计的时候,设计区域边界和区域内布武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院8局比较难确定,设计不好就影响界面的美观;编码过程中光标位置的重置容易忘记,是在调试过程中才发现出来的;编码过长,内存占用比较多。根据题目要求,我做了认真的分析,根据相应的要求先画流程图,这样可以有一个清晰的思路,在编写程序的过程中就避免因为头脑混乱而导致错误,同时也方便了程序的设计和编写。因为遇到了这些问题,也带来了不少收获,在解决问题和请教同学的过程中,使我又有了新的认识和理解,并改正了自己在理解上的一些错误,使自己又得到了提高和进步。我对汇编语言程序设计有了进一步的了解。对于DOS中断和BIOS键盘中断、BIOS显示中断,也有了更深层次的了解,对于其功能调用有了一定的掌握。这次实验还让我熟悉了分支程序、子程序设计的知识。通过对图形程序设计的实现,也使我对汇编语言产生了更浓的兴趣。今后在课余时间,可以多多阅读相关的书籍,来扩展自己的知识面。在知道本次设计要实现什么功能后,目标还是很明确的。在咨询老师的帮助下,以及在网上查看相关资料,这次课程设计做得比较顺利。我们这组成员很团结,大家在一起交流了很多,正是我们大家的一起努力才可以顺利完成本次课程设计。通过本次课程设计,我基本掌握了怎样运用汇编语言去设计字符图形,并制作出相应的流程图。此外,加强了我对MASM软件的熟悉与使用。另外,因为我的笔记本系统不支持doc全屏显示,但是通过对中断及显示方式的进一步查阅和了解,我解决了这个问题。很感谢老师,在图形坐标的制作上我遇到了点困难,但通过研究所查找的资料和对源程序的分析,基本上可以定义正确的字符图形表。对于本次课程设计我受益匪浅,很感谢老师和同学的帮助。5参考资料:《IBM-PC汇编语言程序设计(第2版)》,作者:沈美明、温冬蝉,清华大学出版社2001年8月出版。《IBM-PC汇编语言程序设计实验教程》,作者:沈美明、温冬蝉、张赤红,清华大学出版社武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院9附录:datasegmentarray1db0,1,2,3,4,5,6,7,8,9rowdb0coldb0colordb0fharray2db'pleasepayattention:pressESCtoexit&pressdeltoclearscreen','$'array3db'CHARACTER:','$'array4db'COLOR:','$'dataendsprognamsegmentassumecs:prognam,ds:datamainprocfarstart:callclearpushdsmovax,0pushaxmovax,datamovds,axleadx,array2movah,9int21hmovrow,1movcol,24movbx,26武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院10l0:callresetmoval,7chmovbh,0movcx,1movah,0ahint10hincrowdecbxjnzl0movrow,2movcol,0movdi,0callresetleadx,array3movah,9int21hmovrow,3movcol,0l1:callresetmovax,diaddal,30hmovbh,0movcx,1movah,0ahint10hinccolcallreset武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院11movbh,0movcx,1movah,0ahmoval,array1[di]int10hincdicmpdi,9jal2addcol,6cmpcol,22jbl1addrow,2movcol,0JMPl1l2:addrow,4movcol,0callresetleadx,array4movah,9int21hincrowmovcol,0movdi,1l3:callresetmovbx,diaddbl,60hmovbh,0武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院12movcx,1movah,0ahmoval,blint10hinccolcallresetsubbl,60hmovbh,0movcx,1movah,9moval,0dbhint10hincdicmpdi,9jal4addcol,6cmpcol,22jbl3addrow,2movcol,0JMPl3l4:movrow,1movcol,26callresetdraw:movah,0int16hcmpah,48h武汉理工大学《汇编语言程序设计》课程设计报告书武汉理工大学计算机科学与技术学院13jeupcmpah,50hjedowncmp