您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 简易计算器的汇编语言程序设计报告
广东技术师范学院天河学院汇编语言课程设计报告实训题目简易计算器\系别计算机系l专业班级软件设计111班\姓名沈学发孟欣、陈法威、陈建维、李斯恺、曾炳忠、李智超\学号(20110411431)29、28、33、30、36、31、32/指导教师胡安明\所属系部计算机科学与技术系\1目录一、程序功能设计论证................................2二、程序流程图及其说明...............................31程序流程图......................................32流程图说明......................................4三、程序调试.........................................41.初始界面........................................42.加法运算实现界面................................43.除法运算实现....................................54.减法运算........................................55.乘法运算实现...................................66.清屏后的界面....................................6四、心得体会.........................................7五、参考文献.........................................7六、附录(代码).......................................82一、程序功能设计论证该课程设计的任务是做一个简易计算器,可以实现加减乘除四则运算。我们要解决的问题有:以什么方式输入数字、判断是进行什么运算、运算过程中的进位和借位问题以及如何实现清屏等问题。首先我们要解决的是输入问题,这里我们用INT21H的一号功能调用来进行输入;然后我们要进行的是判断是进行何种运算,当输入的运算符号不是“+、-、*、/”中的一种时,则报错,提示重新输入。当输入的是c或C时,则清屏;当输入的是q或Q时,则退出程序。由于运算过程中出现的进借位问题,会导致输出的结果为一位数,二位数,三位数或者是负数,所以在选择输出的方式时若是选9号功能调用会很不方便,因为9号功能调用要求有一个输出字符的缓冲区,由于输出的结果形式太多,缓冲区太难确定,而且若结果为负数,负号也得事先进行设置,所以单字符输出是一个合理的选择。最后还要对这个简易计算器进行功能完善,例如为了使程序符合我们使用者的操作习惯,我们可以添加按回车键换行输入,即当键入回车键后,可以换行重新输入;可以设置按C或c键清屏,当键入C或c键时,清除整个屏幕上的输入和输出的字符并可以重新输入并运算;当按下Q或q键退出程。3二、程序流程图及其说明1程序流程图42流程图说明该程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。通过流程图,可以看出程序开始运行时,首先输出提示语句,再输入字符,并判断输入的字符是否为Q或q,若是,则退出,不是则继续输入;判断输入的字符是否为C或c,若是,则清屏重新输入,否则继续输入;判断输入的是不是回车键,若是就回车换行输入,不是则继续输入;判断输入的是否为数字以及+,-,=这些字符,若不是会报错,是则将其存储到定义的数据区里面,再判断输入的是进行什么运算符,进行相应的运算,输出结果。继续上面的步骤三、程序调试1.初始界面运行程序后,进入程序运行初始界面,如图:2.加法运算实现界面不是0~9,+,-,=号或输入不正确时,程序会有报错提示,并提示重新输入,运行界面如图:53.除法运算实现如图:4.减法运算如图:65.乘法运算实现如图:6.清屏后的界面当输入C或c时则清屏,程序运行后清除整个窗口内输入和输出的字符并可以继续输入并计算。如图:7四、心得体会经调试,基本上任务要求设计的所有功能都实现,调试出的计算结果均正确。一周的课程设计结束了,给我的总体感觉就是忙碌但充实,而且真正学到了东西。以前做课程课计的时候总是前几天时间玩,后面几天才开始做,不过这次却是一直都在做这个课程设计,因为在网上我根本搜不到别人写的简易计算机的资料,所以从构思到设计流程图到编写源程序都是我一个人独立完成的,虽然这个过程比较痛苦,但是我真正的去体验了,当我编写的程序一遍一遍地报错,出的结果一次次和正确结果有出入的时候我真的好想放弃,但是我选择了坚持,通过调试程序,一步步地看寄存器和数据区的变化,最终发现了错误并改正了错误,当运行的结果全都正确的时候我真的好激动,好有成就感,因为这是我第一次自己独立地编写的长达两百多条的程序,虽然结构看上去有点乱,语句不够精练,但是不管怎样,我终于能够实现要求的功能了。另外,这次无论是设计个这程序还是写课程设计报告都让我学到了好多东西,有对课本知识更加深入的了解和掌握,也有对于流程图的设计以及绘制还有word的一些用法和排版等,都让我受益匪浅,总之,非常感谢学校和老师给我们安排了这次课程设计,不仅让我掌握了更多的知识,还让我领会到要把一件事情做好并真正有所收获还得靠自己独立地去完成并坚持不懈!希望在以后的学习中还能多搞几次这种课程设计。五、参考文献[1]周佩玲、彭虎、傅忠谦.微机原理与接口技术(基于16位机).北京:电子工业出版社.,2005[2]马春燕.微机原理与接口技术(基于32位机)实验与学习辅导.北京:电子工业出版社.,2007[3]何小海、严华.微机原理与接口技术.北京:科学出版社,2006[4]钱晓捷.新版汇编语言程序设计.北京:电子工业出版社,20078六、附录(代码)完整的程序代码如下;简单四则运算DATASSEGMENTDATA0DB'WELCOMETOUSEOURSYSTEM',0DH,0AH,'MADEBYYABUSHAN',0DH,0AH,'PLEASEINPUTANUMBER:',0DH,0AH,'$'DATA1DB'overflowinputagain:','$'DATA2DB'PLEASEINPUTANOTHERNUMBER(EXP:123)','$'DATA3DB'PLEASEINPUTANOPREATOR:','$'DATA4DB'THEOPERATORISWRONG,INPUTAGAIN:','$'TUICHUDB'Pleasepressanykeytocontinue!','$'OPERDB?FLAGDB0FLAG1DB0DATADW3DUP(?)DATASENDSSTACKSSEGMENTDW256DUP(?)STACKSENDSDISPMACROVARMOVAH,2MOVDL,VARINT21HENDMCODESSEGMENT9ASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVDI,OFFSETDATA0;提示信息CALLDISPLMOVSI,0;SI作为数组下标CALLINPUTCALLNEWLINEMOVDI,OFFSETDATA3;提示信息CALLDISPLAGAIN:MOVAH,1;1号功能输入四则运算符INT21HCMPAL,'Q'JEEXITCMPAL,'q'JEEXITCMPAL,'C'JEQINGPINGCMPAL,'c'JEQINGPINGCMPAL,'+';判断输入的是不是+,-,*,/JENEXT0CMPAL,'-'JENEXT0CMPAL,'*'JENEXT0CMPAL,'/'JENEXT010CALLNEWLINE;输入的运算符不合法,重新输入MOVDI,OFFSETDATA4CALLDISPLJMPAGAINNEXT0:MOVOPER,AL;保存运算符CALLNEWLINEMOVDI,OFFSETDATA2;输入第二个操作数CALLDISPLMOVSI,2CALLINPUTMOVAX,DATA[0]MOVBX,DATA[2]CMPOPER,'+';判断是那种操作,进行运算JENEXT1CMPOPER,'-'JENEXT2CMPOPER,'*'JENEXT3CMPOPER,'/'JENEXT4NEXT1:;加法运算CLCADCAX,BXJNCN1MOVFLAG,1;判断是否进位N1:MOVDATA[4],AX;运算结果放入内存JMPOUTPUTNEXT2:;减法运算11CLCSBBAX,BXJNCN2MOVFLAG,1;判断是否借位NEGAXN2:MOVDATA[4],AX;运算结果放入内存JMPOUTPUTNEXT3:;乘法运算CLCMOVDX,0MULBXMOVDATA[4],AX;运算结果放入内存JMPOUTPUTNEXT4:;除法运算CLCMOVDX,0CMPBX,0JNZN4;判断除数是否为0CALLNEWLINECALLERRORCALLNEWLINEMOVDI,OFFSETDATA2CALLDISPLMOVSI,2CALLINPUTJMPNEXT4N4:DIVBXMOVDATA[4],AX;运算结果放入内存OUTPUT:12CALLNEWLINEMOVDI,0;输出第一个操作数CALLPRINTDISPOPER;输出运算符MOVDI,2CALLPRINT;输出第二个操作数DISP'='CMPFLAG,1JNZNEXT5DISP'-'NEXT5:MOVDI,4CALLPRINT;输出结果MOVAH,4CHINT21H;-----------输入函数------------INPUTPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXMOVBX,0;BX存放十进制数CLCMOVDX,0L0:;----------输入数字----------13MOVAH,1;判断数字是否合法INT21HCMPAL,0DHJEL2SUBAL,30HJLL1CMPAL,9JGL1;---------转换成十进制数-------MOVAH,0;转换成10进制数放入内存XCHGAX,BXMOVCX,10MULCXADDAX,BXJCL1XCHGAX,BXJMPL0L1:MOVDX,0MOVBX,0CALLNEWLINECALLERRORJMPL0L2:CMPDX,0JNZL1MOVDATA[SI],BXMOVDX,014POPDXPOPCXPOPBXPOPAXRETINPUTENDP;--------------提示信息------------DISPLPROCNEARMOVAH,9MOVDX,DIINT21HRETDISPLENDP;-------回车换行--------NEWLINEPROCNEARPUSHAXPUSHDXMOVDL,0AHMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HPOPDXPOPAXRETNEWLINEENDP;----------错误提示----------------15ERRORPROCNEARPUSHAXPUSHDXMOVDX,OFFSETDATA1MOVAH,9INT21HPOPDXPOPAXRETERRORENDP;-----------显示函数--------PRINTPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXMOVCX,0MOVBX,10MOVAX,DATA[DI]LAST:MOVDX,0;除10压栈DIVBXPUSHDXINCCXCMPAX,0JNZLASTAGE:POPDX;出栈输出16ORDX,30HMOVAH,2INT21HLOOPAGEPOPDXPOPCXPOPBXPOPAXRETPRINTENDPJMPSTARTQINGPING:MOVAL,0;实现清屏功能MOVBH,7MOVCH,0MOVCL,0MOVDH,
本文标题:简易计算器的汇编语言程序设计报告
链接地址:https://www.777doc.com/doc-7216170 .html