1课课程程设设计计报报告告课程名称:汇编语言程序设计课题名称:数字方阵程序姓名:朱海清(20070798)班级:计科0701指导老师:卢清平报告日期:2010年7月2目录第一章前言..............................................31.1摘要....................................................31.2基本功能要求.............................................3第二章程序设计..........................................42.1题目基本内容.............................................42.2系统流程框图.............................................42.3课程设计的具体内容说明...................................52.4课程设计中关键内容的分析设计说明.........................62.5运行截图.................................................6第三章课程设计小结......................................7参考文献.................................................8附录:....................................错误!未定义书签。源程序代码..................................................83第一章前言1.1摘要本次课程设计,是使用汇编作为开发语言实现功能要求。总所周知,汇编是一个低级语言,对硬件有很大的依赖性,在使用上也不及高级语言方便,但其在执行效率上比高级语言有很大的优势。本次课程设计,一方面让我们再次熟悉汇编指令,再次对算法的设计有一定的要求。另一方面让我们对较大汇编程序的编写有一个清晰的过程,学习把一个教大问题分解成若干个小问题,即子程序是一个良好的编程习惯。掌握汇编指令,学习的理论知识应用于解决实际的问题。1.2基本功能要求显示一个数字的方阵,提示输入一个3-5的数字,根据输入的数字显示方阵,如输入4,输出123412131451116156109874第二章程序设计2.1题目基本内容设计题目:成绩评定具体要求:(1)输出提示输入,接受在一定范围内的指定数字,3到9之间,否则重新输入,如果是ESC键,则推出程序(2)对接受的数字进行,数字矩阵的显示2.2系统流程框图主程序:5SHOW循环显示子程序:CRT子程序Y2.3课程设计的具体内容说明根据课题的要求,主要完成一下几方面的设计:1.显示提示输入,提示输入,并保证输入大于3小于9,否则重新输入2.编写子程序,用算法实现每次形如矩形的输出,如123412511610987直至输出完毕取得BP中的值向右输出n数每输出一个自加向下输出n-1个数每输出一个自加向左输出n-1个数每输出一个自加向右输出n-2每输出一个自加子程序返回此位填空格输出输出其值调整AL值分别得到二位十进制个位,十位值十位是否为00N输出个位值子程序返回63.在输出时,如果是两位十进制数,使用设计子程序分别输出个位,十位值,若是一位十进制数,十位填充空格,输出。2.4课程设计中关键内容的分析设计说明1、要求输入介于3到9,如果输入不符合要求,不能显示其内容,要求重新输入,直至符合要求方显示。2、算法实现并不是件简单的事情。高级语言可以设置二维数组实现,不必考虑其位数,输出也仅是一个元素值。而用汇编则遇到定位鼠标,才是显示,根据程序要求,想要达到程序要求,必须对鼠标位置做精确定位。汇编一次只能输出一个字符,对于二位十进制数据时,必须作出处理分别输出。如果对于一位二进制数不做处理,输出时的样子非常难看。处理方案是:当输出一位十进制数时,在十位位置填充空格,显示效果良好。3、在汇编语言中,输出位置是在光标的位置显示,定位鼠标位置,在显示时没有选择DOS和BIOS中断,而是选择了教为简洁的STOSB的“显式操作数”形式输出。2.4程序运行截图从键盘输入3-9的数字,截图如下:例如输入3,运行结果如以下截图:例如键入4,运行结果如以下截图:7例如键入5,运行结果如以下截图:第三章课程设计感悟课程设计是将课本上所学的理论知识运用与解决实际的问题,对松散的理论知识的一个集合式运用,也是综合知识,综合运用能力的一个过程。对知识的掌握和灵活运用是一个很好的考察。由于汇编是大二时所学,那么长时间没有运用,忘了好大一部分。当要做课程设计时,又把整本书又复习了一遍,而且我们那本课本是入门级教材。对诸如DOS和BIOS中断的介绍也只是一个简单的叙述,当真正要使用某一功能时,我们的课本就捉襟见肘了。因此在课程设计的过程中,图书馆是不得不常去的一个地方了。丰富的网络资源也很不错,但发现在查看网上的资料的时候最大的问题是如果获得自己想要的东西,搜索时选择准确的关键字是至关重要,准确的关键字能让你很快的找到所需的资料,而一个不好的关键字则让你的工作事倍功半。找过自己所需的资料时,筛选自己所需的也是一个很重要的过程。你搜索的到的资料不一定就适合你,因为汇编的平台依赖性,而且整个汇编的模式选择也不同,等等。本次课程设计,掌握了使用“轻松汇编”这个汇编编辑器,和在其提供的调试环境下做调试。做调试的过程中按F7(跟踪调试)F8(单步调试)是一个以前听说过学习c++和vc的人的F9,F10键是光秃秃的,现在真的明白了。调试是一个必要必须的过程,这样才知道你的程序出现问题时的问题所在。在课程设计的过程中,遇到了好多问题,走了不少的弯路,通过努力,最终解决了不少问题。做课程设计的过程是为自己修一条路,先前是凸凹不平的道路,等到你做足了功夫,一点点的走过。自己的这条路才宽了,才平了。由于3到5之间的算法原理和3到9之间的算法是一样的,所以课程设计做到了3到9。综合来说,本次课程设计让我对学习汇编有了一个新的认识。8参考文献[1]钱晓捷.新版汇编语言程序设计.北京:电子工业出版社,2008[2]杨季文.80x86汇编语言程序设计教程.北京:清华大学出版社,2004[3]李珍香等.汇编语言课程设计案例精编.北京:中国水利水电出版社,2005[4]洪志全罗省贤.汇编语言程序设计教程.北京:电子工业出版社,2004[5]楼顺天周佳社.微机原理与接口技术.北京:科学出版社,2006附录:源程序代码CODESEGMENTASSUMECS:CODE,DS:CODEORG100HSTART:PUSHCSPOPDSMOVAX,3INT10H;BIOS中断,置文本显示模式MOVAX,0B800HMOVES,AX;定位显存MOVDX,OFFSETMSGMOVAH,9INT21H;提示T0:MOVAH,0INT16H;接收数据CMPAL,1BH;Esc键结束程序esc(ascii=1Bh)JZQUITCMPAL,'3';数据校验,保证输入3al9JBT0CMPAL,'9'JAT09MOVAH,0EH;在Teletype模式下显示字符INT10H;显示有效数SUBAL,30H;得到十进制数字PUSHAXMULAL;al*alMOVSI,AX;保存矩阵最大数到si中POPAXCBW;changbytetowordMOVBP,1;第一个元素值MOVDI,3*80*2NEXT:MOVCNT1,AX;输入数据保存到cnt1DECAX;n-1MOVCNT2,AXMOVCNT3,AXDECAX;(n-1)-1MOVCNT4,AXADDDI,3*2CALLSHOW;输出矩阵MOVAX,CNT1SUBAX,2SUBDI,3*2CMPBP,SIJBENEXT;bpsi,则继续执行MOVAH,0INT16H;等待JNZSTARTQUIT:MOVAX,4C00HINT21HSHOW:;显示方阵MOVCX,CNT1;right向右赋值M1:CALLCRTINCBP;下一个元素数值LOOPM1MOVCX,CNT2;down向下赋值JCXZP2;cx=0,则转p2处M2:ADDDI,(80-3)*2CALLCRTINCBPLOOPM2MOVCX,CNT3;left向左赋值JCXZP210M3:SUBDI,6*2;下一个元素位置CALLCRTINCBPLOOPM3MOVCX,CNT4;up向上赋值JCXZP2M4:SUBDI,(80+3)*2CALLCRTINCBPLOOPM4P2:RETCRT:MOVAX,BPAAM;调整指令ORAX,3030HXCHGAH,AL;交换ah和alCMPAL,'0'JNZP1MOVAL,20HP1:STOSB;显示十位INCDIMOVAL,AHSTOSB;显示个位INCDIMOVAL,20HSTOSB;显示空格INCDIRETMSGDB'input(3-9),Esctoquit:$'CNT1DW?CNT2DW?CNT3DW?CNT4DW?CODEENDSENDSTART使用说明:本程序在“轻松汇编”中编辑调试通过。