课程设计报告课程设计名称:简易计算器系别:三系学生姓名:张梦瑶班级:11通信1班学号:20110306111成绩:指导教师:袁静开课时间:2013-2014学年1学期微机原理课程设计——简易计算器第2页共24页一.设计题目简易计算器二.主要内容1、采用模块化程序结构设计软件,可将整个软件分成若干功能模块。2、画出程序流程图。3、根据流程图,编写源程序。4、上机调试程序。三.具体要求1、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。2、利用BIOS中断的10号功能调用来设置显示方式。3、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。四.进度安排周一周二周三周四周五讲课设内容,安排任务查资料,确定硬件电路方案编程调试编程调试写总结报告五.成绩评定考核方法:现场验收(占50%),课程设计报告(占50%)。考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制质量、演示效果、设计报告质量。成绩评定:优,良,中,及格,不及格。特别说明:如发现抄袭,按照不及格处理。微机原理课程设计——简易计算器第3页共24页目录前言.....................................................41、设计题目..............................................52、设计内容..............................................52.1基本内容..........................................52.2主要功能..........................................53、设计原理及方案........................................63.1总体方案..........................................63.2程序流程图........................................73.2.1主程序.......................................73.2.2计算子程序...................................83.3系统模块详细设计..................................93.3.1界面设置.....................................93.3.2算法选择设置................................103.3.3数制转换设置................................114.汇编源程序代码........................................135、调试运行结果.........................................205.1操作说明.........................................205.2调试运行结果.....................................206、心得体会.............................................237、参考文献.............................................24微机原理课程设计——简易计算器第4页共24页前言课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。计算器在我们日常生活中应用是相当普遍的,可以说它已经成为现代社会生活不可或缺的一部分。本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和DOS的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。同时利用BIOS中断的10号功能调用来设置显示方式,利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。通过本次课程设计,要求学生熟悉和掌握微机系统的软件的方法、设计步骤,使学生得到微机开发应用方面的初步训练,熟练应用8086汇编语言编写应用程序和实际设计中的软件调试方法和步骤,熟悉微机系统的软件开发工具的使用方法。通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。微机原理课程设计——简易计算器第5页共24页1、设计题目简易计算器2、设计内容2.1基本内容1、编写一个程序,能从键盘上读入数据,并完成加、减、乘、除的计算。2、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。3、利用BIOS中断的10号功能调用来设置显示方式。4、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。2.2主要功能一、显示主菜单功能主菜单如下:Pleaseinputanumbertochoosethearithmeticoperation1—add2—subtract3—multiply4—divideq—returntoDOS二、计算功能1、别按数字键“1”、“2”、“3”,则执行相应子模块1、2、3,进行两个字节与两个字节的加法、减法和乘法运算,并在屏幕上显示运算结果。2、按数字键“4”,执行子模块4,进行两个字节除一个字节的除法运算,并显示结果。3、按字母键“q”,执行子模块5,程序退出,返回DOS。4、若按其它键则显示提示字符串:“PleasePressNumber1、2、3、4、q:”,然后继续显示主菜单。微机原理课程设计——简易计算器第6页共24页3、设计原理及方案3.1总体方案利用BIOS中断的10号功能调用来设置显示方式。利用DOS中断的01号、02号子功能来完成键盘接受、结果显示。设置屏幕显示方式。MOVAH,00HMOVAL,NUM(NUM为显示方式属性字)INT10H接着从键盘上接受键值,并判别后转到相应的子模块进行运算,并显示结果。MOVAH,01HINT21H;AL=键入字符的ASCII码从键盘上接收一串字符串命令:MOVAH,0AHMOVDX,OFFSETBUF;BUF为数据段中定义的数据缓冲区INT21H显示单个字符命令:MOVAH,02HINT21H显示一串字符串的命令:MOVAH,09HMOVDX,OFFSETBUF;BUF为被显示字符串的首地址INT21H十进制数显示过程:将十进制数送到BX中,BX除以1000,余数送BX中,商在AL中,范围为0~9,显示AL中的内容。BX除以100,余数送BX中,商在AL中,显示AL中的内容,依次类推,直到分出个位数字。如最高位为0,则不应显示,而非最高位的0则显示。可利用设标志位并结合商的方法来决定是否显示0。微机原理课程设计——简易计算器第7页共24页3.2程序流程图3.2.1主程序图3.1主程序流程图显示主菜单接收数字AL=‘1’?AL=‘2’?AL=‘3’?AL=‘4’?AL=‘5’?调用加法子程序调用减法子程序调用乘法子程序调用除法子程序结束开始微机原理课程设计——简易计算器第8页共24页3.2.2计算子程序图3.2计算子程序流程图提示输入第一个数提示输入第二个数计算判断结果正负,并储存结果将结果转为ASCII码,并显示结果提示返回DOS还是重新计算将第一个数的ASCII码转为二进制并保存将第二个数的ASCII码转为二进制并保存结束微机原理课程设计——简易计算器第9页共24页3.3系统模块详细设计本次设计需要实现的模块图图如1所示图3.3模块图(1)界面设置主要实现确定界面样式的功能,以菜单形式显示。(2)算法选择设置用于选择加、减、乘、除来进行运算。(3)数制转换设置应用十进制——二进制的转换算法来处理加、减、乘、除四则运算。3.3.1界面设置1、设置屏幕显示方式:MOVAH,00HMOVAL,2INT10H通过调用BOIS的O2H号功能来设置屏幕显示方式。此处AL=2,即设置屏幕显示方式为80*25黑白文本。2、显示主菜单:DOS不仅为用户提供了许多指令,而且还有用户可以直接调用的上百个常用子程序。这些子程序的功能主要是进行磁盘读/写、基本输入/输出管理等。在使四则运算器程序设计界面设置算法选择设置数制转换设置微机原理课程设计——简易计算器第10页共24页用时,用户只需要了解各个子程序的编号即可,这些编号成为DOS功能调用号。其调用过程为:(1)DOS功能条用号送AH寄存器。(2)如果需要,按要求给定输入参数(由得不需要输入参数)。(3)写入中断指令“INT21H”。调用结束,按功能使用其输出参数。本程序主菜单显示代码如下:MOVAH,09HMOVDX,OFFSETTOPINT21H先在数据段中定义主菜单中要显示的字符串,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。3.3.2算法选择设置汇编语言中加减乘除运算指令分别为ADD、SUB、、MUL、DIV。首先选择要进行的四则运算,规定:若选择1,则进行加法;选择2,则进行减法;选择3,则进行乘法;选择4,则进行除法。具体计算过程分析如下:1、从键盘接收一个数字:MOVAH,01HINT21H通过调用DOS系统的01H号功能——键入字符并回车来实现,其出口参数为键入字符的ASCII码,存在AL中。2、接收键入用于计算的数:MOVAH,0AHMOVDX,OFFSETBUF1通过调用DOS系统的0AH号功能——键入字符串至内存缓冲区来实现,其入口参数如下:DS:DX=存放键入字符串的缓冲区的首地址;(DS:DX)=用户规定的缓冲区;(DS:DX+1)=实际键入的字符数;从(DS:DX+2)开始放键入的字符串。因此,在下面的程序中运用所键入的数字时要注意字符串的首地址。3、显示结果:微机原理课程设计——简易计算器第11页共24页MOVAH,09HMOVDX,OFFSETBUF3INT21H将结果存入数据段中定义的缓冲区BUF3中,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。3.3.3数制转换设置1、子程序A2——将数的ASCII码转为二进制数:A2PROCNEARMOVCL,BUF1+1;把BUF1+1中的实际键入的字符数放入CLMOVCH,0;CH清零MOVBX,OFFSETBUF1+2;把第一个数字的地址放在BXPUSHBX;保存BX中的值PUSHCX;保存CX中的值L1:MOVAL,[BX]ANDAL,0FH;把ASCII码转换为十进制MOV[BX],AL;存放十进制INCBX;下一个数字的地址LOOPL1POPCX;恢复CXPOPBX;恢复BXMOVAX,0;将累加和赋零MOVSI,10L2:MULSIADDAL,[BX]ADCAH,0INCBXLOOPL2;累加乘10L3:RET微机原理课程设计——简易计算器第12页共24页A2ENDP入口:十进制数的ASCII在BUF1内;出口:转换后的二进制数在AX内。算法:先将其转换为十进制,再用累加和乘10加X的方法变为二进制,如将163转换为二进制数,可先将累加和赋0,再计算(((0*10+1)*10+6)*10+3)结果为二进制数。2、将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示(A3程序段):该模块的程序设计详见程序清单