微机原理简易计算器课程设计_第1页
微机原理简易计算器课程设计_第2页
微机原理简易计算器课程设计_第3页
微机原理简易计算器课程设计_第4页
微机原理简易计算器课程设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微机原理课程设计一一简易计算器第23页共24页课程设计报告课程设计名称:简易计算器系 别:空学生姓名:张梦瑶班 级:11通信1班学 号: 20110306111成 绩:指导教师:袁靛开课时间: 2013-2014学隼 1学期.设计题目简易计算器.主要内容1、采用模块化程序结构设计软件,可将整个软件分成若干功能模块2、画出程序流程图。3、根据流程图,编写源程序。4、上机调试程序。三.具体要求1、利用bios和dos勺中断来设计一个计算器,要求在屏幕上显示一个主菜 单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束 程序的功能。2、利用bios中断的10号功能调用来设置显示方式

2、。3、禾j用dos断的01号和02号子功能来完成键盘接收,结果显示。四.进度安排周一周二周三周四周五讲课设内容,安排任务查资料,确定 硬件电路方案编程调试编程调试写总结报告五.成绩评定考核方法:现场验收(占50%),课程设计报告(占50%)。考核内容:学习态度(出勤情况,平时表现等)、方案合理性、程序编制质 量、演示效果、设计报告质量。成绩评定:优,良,中,及格,不及格。特别说明:如发现抄袭,按照不及格处理前言 41、设计题目 52、设计内容 52.1 基本内容 52.2 主要功能 53、设计原理及方案 63.1 总体方案 63.2 程序流程图 73.2.1 主程序 73.2.2 计算子程序

3、83.3 系统模块详细设计 93.3.1 界面设置 93.3.2 算法选择设置 103.3.3 数制转换设置 114.汇编源程序代码 135、调试运行结果 205.1 操作说明 205.2 调试运行结果 206、心得体会 237、参考文献 24刖百课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识, 解决 实际工程设计和应用问题的能力的重要教学环节。它具有动手、动脑和理论联系 实际的特点,是培养在校工科大学生理论联系实际、敢于动手、 善于动手和独立 自主解决设计实践中遇到的各种问题能力的一个重要教学环节。计算器在我们日常生活中应用是相当普遍的, 可以说它已经成为现代社会生 活不可或缺

4、的一部分。本次课程设计就是根据微机原理与接口的相关知识,利用 bios和dos的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在 屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除 四种计算功能和结束程序的功能。同时利用bios中断的10号功能调用来设置显 示方式,利用dost断的01号和02号子功能来完成键盘接收,结果显示。通过本次课程设计,要求学生熟悉和掌握微机系统的软件的方法、设计步骤, 使学生得到微机开发应用方面的初步训练,熟练应用8086汇编语言编写应用程序和实际设计中的软件调试方法和步骤, 熟悉微机系统的软件开发工具的使用方 法。通过课程设计实践,不仅要

5、培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工 程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。1、设计题目简易计算器2、设计内容2.1基本内容1、编写一个程序,能从键盘上读入数据,并完成加、减、乘、除的计算。2、利用bios和dos勺中断来设计一个计算器,要求在屏幕上显示一个主菜 单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束 程序的功能。3、利用bios中断的10号功能调用来设置显示方式。4、利用dos断的01号和02号子功能来完成键盘接收,结果显示。2.2主要功能一、显示主菜单功能主菜单如下

6、:please input a number to choose the arithmetic operation1add 2 subtract 3 multiply4divide q return to dos二、计算功能1、别按数字键“ 1”、“2”、“3”,则执行相应子模块1、2、3,进行两个字 节与两个字节的加法、减法和乘法运算,并在屏幕上显示运算结果。2、按数字键“ 4”,执行子模块4,进行两个字节除一个字节的除法运算, 并显示结果。3、按字母键“ q,执行子模块5,程序退出,返回dos4、若按其它键则显示提示字符串:“please press numbeh、2、3、4、q:”, 然

7、后继续显示主菜单。3、设计原理及方案3.1总体方案利用bios中断的10号功能调用来设置显示方式。利用dos断的01号、02号子功能来完成键盘接受、结果显示。设置屏幕显示方式。mov ah , 00hmov al , num (num显示方式属性字)int 10h接着从键盘上接受键值,并判别后转到相应的子模块进行运算,并显示结果。 mov ah , 01hint 21h; al蹴入字符的 ascii码从键盘上接收一用字符串命令:mov ah , 0ahmov dx , offset buf ; buf为数据段中定义的数据缓冲区int 21h显示单个字符命令:mov ah , 02hint 21

8、h显示一用字符串的命令:mov ah , 09hmov dx , offset buf ; buf为被显示字符串的首地址int 21h十进制数显示过程:将十进制数送到 bx中,bx除以1000,余数送bx中, 商在al中,范围为09,显示al中的内容。bx除以100,余数送bx中,商在 al中,显示al中的内容,依次类推,直到分出个位数字。如最高位为0,则不应显示,而非最高位的0则显示。可利用设标志位并结 合商的方法来决定是否显示003.2程序流程图3.2.1 主程序图3.1主程序流程图3.2.2计算子程序提示输入第一个数将第一个数的ascii码转为二进制并保存提示输入第二个数将第二个数的as

9、cii码转为二进制并保存判断结果正负,并储存结果将结果转为ascii码,并显示结果提示返回dos还是重新计算图3.2计算子程序流程图3.3系统模块详细设计本次设计需要实现的模块图图如1所示图3.3模块图(1)界面设置主要实现确定界面样式的功能,以菜单形式显示。(2)算法选择设置用于选择加、减、乘、除来进行运算。(3)数制转换设置应用十进制一一二进制的转换算法来处理加、减、乘、除四则运算。3.3.1界面设置1、设置屏幕显示方式:mov ah,00hmov al,2int 10h通过调用bois的o2h#功能来设置屏幕显示方式。此处 al=2,即设置屏幕 显示方式为80*25黑白文本。2、显示主菜

10、单:do杯仅为用户提供了许多指令,而且还有用户可以直接调用的上百个常用 子程序。这些子程序的功能主要是进行磁盘读/写、基本输入/输出管理等。在使用时,用户只需要了解各个子程序的编号即可,这些编号成为do财能调用号。其调用过程为:(1) do财能条用号送ah寄存器。(2)如果需要,按要求给定输入参数(由得不需要输入参数)。(3)写入中断指令“ int 21h”。调用结束,按功能使用其输出参数。本程序主菜单显示代码如下:mov ah,09hmov dx,offset topint 21h先在数据段中定义主菜单中要显示的字符串, 再通过调用doss统的09h号 功能一一显示字符串(用尾字符为$,但不

11、显示)来完成。3.3.2 算法选择设置汇编语言中加减乘除运算指令分别为 add sub、mul div。首先选择要进行的四则运算,规定:若选择 1,则进行加法;选择2,则进 行减法;选择3,则进行乘法;选择4,则进行除法。具体计算过程分析如下:1、从键盘接收一个数字:mov ah,01hint 21h通过调用doss统的01h号功能一一键入字符并回车来实现,其出口参数为 键入字符的ascii码,存在al中。2、接收键入用于计算的数:mov ah,0ahmov dx,offset buf1通过调用doss统的0ah号功能一一键入字符串至内存缓冲区来实现,具入 口参数如下:ds: dx%放键入字符

12、串的缓冲区的首地址;(ds: dx)=用户规定 的缓冲区;(ds: dx+d =实际键入的字符数;从(ds dx+2开始放键入的字符 申。因此,在下面的程序中运用所键入的数字时要注意字符串的首地址。3、显示结果:mov ah,09hmov dx,offset buf3int 21h将结果存入数据段中定义的缓冲区 buf3中,再通过调用dos8统的09h号 功能一一显示字符串(用尾字符为$,但不显示)来完成。3.3.3 数制转换设置1 、子程序a2-一将数的ascii码转为二进制数:a2 proc nearmov cl,buf1+1符数放入clmov ch,0mov bx,offset buf1

13、+2push bxpush cxl1: mov al,bxand al,0fhmov bx,alinc bxloop l1pop cxpop bxmov ax,0mov si,10l2: mul siadd al,bxadc ah,0inc bxloop l2;把buf1+1中的实际键入的字;ch清零;把第一个数字的地址放在bx;保存bx中的值;保存cx中的值;把ascii码转换为十进制;存放十进制;下一个数字的地址;恢复cx;恢复bx;将累加和赋零累加乘10l3: reta2 endp入口:十进制数的ascii在buf1内;出口:转换后的二进制数在 ax内。算法:先将其转换为十进制,再用累加

14、和乘10加x的方法变为二进制,如将163转换为二进制数,可先将累加和赋0,再计算(0*10+1) *10+6) *10+3) 结果为二进制数。2、将计算结果的二进制数转换为对应的十进制数ascii码并输出显示(a3程序段):该模块的程序设计详见程序清单及说明中 a& bb程序段入口:二进制数在 ax内;出口:转换后的 ascii码在buf内。算法:ax内的数范围在+32767到-32768之间,先检查ax符号位,决定输 出+-,若为负,先求补码得到原码后可与正数统一处理。方法:把将被 转换的二进制数先除以10000,商为万位数,再将余数除以1000,商为千位数, 以此类推,求出百十位数,剩下的

15、为个位数。最后各个数加上30h,即为对应字符。4.汇编源程序代码data segmentn=15top db 5 dup(0ah)operation, 0dh,0ahdb n dup( ),db n dup(),1db n dup(),4db n dup( ),db n dup( ), please input a number to choose the arithmetic,0dh,0ahadd 2 subtract 3 multiply, 0dh,0ahdivide q return to dos, 0dh,0ah,0dh,0ahdb n dup( choice (123.4.q)$me

16、sg1 db 0dh,0ah,please press number: 1.2.3.4.q !$mesg2 db 0dh,0ah,please input the first number :$mesg3 db 0dh,0ah,please input the second number :$mesg4 db 0dh,0ah,play add :$mesg5 db 0dh,0ah,play subtract :$mesg6 db 0dh,0ah,play multiply :$mesg7 db 0dh,0ah,play divide :$mesg8 db 0dh,0ah,the result

17、:$mesg9 db 0dh,0ah,press q return doc,any press return start!$ buf1 db 6;十进制数的缓冲区,可接收6个字符db ?;保留,用于10号调用时doc*入实际输入字符数db 6 dup(?) ;一个符号位,四位数字ascii码,加上一个回车符 buf2 dw ?;将第一个数转换为二进制后,放于这里buf3 db 6 dup(?),$;将结果转换为 ascii码后,放在这里data endsstack segment stackstackcode segmentassume cs:code , ds:datastart: mov

18、ax,datamov ds,axmov ah,00h;mov al,2int 10hmov ah,09h;mov dx,offset topint 21haa: mov ah,01h;int 21hcmp al,1;jne next1;jmp jia;next1: cmp al,2;jne next2;jmp jian;next2: cmp al,3;jne next3;jmp cheng;next3: cmp al,4;jne next4;jmp chu;next4: cmp al,q;jne next5;mov ah,4ch;int 21h设置屏幕显示方式显示菜单从键盘接收一个数字与1比较

19、不等于1就转到next1等于1就转到加法程序与2比较不等于2就转到next2等于2就转到减法程序与3比较不等于3就转到next3等于3就转到乘法程序与4比较不等于4就转到next4等于4就转到除法程序与q比较不等于q就转到next5 回dos显示mesg1next5: mov ah,09h;mov dx,offset mesg1int 21hjmp aa;a1 proc nearmov ah,09h;mov dx,offset mesg2int 21hmov ah,0ah;mov dx,offset buf1int 21hcall a2;mov buf2,ax;buf2mov ah,09h;m

20、ov dx,offset mesg3int 21hmov ah,0ah;mov dx,offset buf1int 21hcall a2;进制转换reta1 endpa2 proc nearmov cl,buf1+1;放入clmov ch,0; chmov bx,offset buf1+2push bx;跳到aa提示输入第一个数接收第一个数调用a2进行ascii-二进制的转换把第一个数转换的二进制放在提示输入第二个数接收第二个数调用a2把第二个数进行ascii-二把buf1+1中的实际键入的字符数清零把第一个数字的地址放在bx保存bx中的值push cx;l1: mov al,bxand al

21、,0fh;mov bx,al;inc bx;loop l1pop cx;pop bx;mov ax,0;mov si,10l2: mul siadd al,bxadc ah,0inc bxloop l2;l3: reta2 endpjia: mov ah,09hmov dx,offset mesg4int 21hcall a1;add ax,buf2;数和放在axjmp a3;jian: mov ah,09hmov dx,offset mesg5int 21hcall a1mov bx,ax;保存cx中的值把ascii码转换为十进制存放十进制下一个数字的地址恢复cx恢复bx将累加和赋零累加乘1

22、0加法程序调用a1把转换后的放在buf2中的第一个的第二个数相加减法程序把转换后的放在ax的第二个数放到bxmov ax,buf2;放到axsbb ax,bx;jmp a3cheng: mov ah,09hmov dx,offset mesg6int 21hcall a1mov bx,ax;到bxmov ax,buf2;放到axmul bx;jmp a3chu: mov ah,09hmov dx,offset mesg7int 21hcall a1mov dx,ax;dxmov ax,buf2到axdiv dl;mov ah,0h;jmp a3a3: mov buf3,+;cmp ax,0;j

23、ge l4; ax0把转换后放在buf2中的第一个数两数相减乘法程序把转换后的放在ax的第二个数放把转换后的放在buf2中第一个数两数相乘除法程序把转换后的放在ax的第二个数放到把转换后的放在buf2中第一个数放两数相除,商在al里使ah清零把 buf3+把结果于0比较转到l4neg ax; ax32c*d, exe - abqqplease input a miribei* to elioose the aiiitjmetic opeion11 b add 2 j b aubtfiict 3 j b iwlt4 j b d iu ide qj b return to doschoice图5.

24、1进入系统界面(2)加法:算法选择1,按提示输入两个十六进制数,回车后显示计算式和结果。程序运行截图如图5.2所示please input; a numbei* 七o choose trlieic opeion1 j 0 -add 2 j b &ubt:pact: 3 j d min it iplsi4 j b d iu idle q j b re turn to doscho icc : 1p lay aidd *please input the f irst nunhe:r : 23 please input: t:he second numbei the result : *29图5.2

25、加法程序截图(3)减法:算法选择2,按提示输入两个十进制数,回车后显示计算结果, 程序运行截图如图5.3所示。s; c:tind0issyste*32c*d, cse - aplease input a nunber to choose the arithueticoperation1j 日 add 2 j b subtract 3|b nult iply 4j bduidle qje retupn to doschoice :please press number1: 1.2.3.4.q ?2 play subtract ;please input the first number -78p

26、lease input tie second nunber =23the result s +55图5.3减法程序截图(4)乘法:算法选择3,按提示输入两个十进制数,回车后显示计算结果 程序运行截图如图5.4所示。c c: vih)0vsfy3tem32c*d. exe - aplease input a. number to chaose the arithmetic oper4t ion1i b4dd 2 i b subtract 3bmultiply4j b diuide qjl return to doscho ice :plebsenunhe i* 1.2-3. q t3play m

27、ultiply :fifiaise input the f ii*s:t nunbei* 110please input the second nunbep :11the result :110图5.4乘法程序截图(5)除法:算法选择3,按提示出入两个十进制数,回车后显示计算结果,程序运行截图如图5.5所小七、c:flnd0vssystem32cxi. exe - aplease inp14t a number to choose the arithmetic operatiom1j b add 2 j b subtract 3 j b multiply4| s divide q j b ie

28、tzurni to doschoice :please press ntinbei*: 1.2.3 .4-q f 4play diu idle ;please input tlie first number :15please input the second nunber khm result e +3(6)退出:按q键即可退出程序。程序运行截图如图 5.6所示please input a nimhep t choose the arithmetic operationij *add 21bsubtract 3| multiply4j b diuide qj b return to doschoice :please press numhd 1 _2,3.4.q ?qk 5asl15.0图5.6退出运行截图程序运行后可以看出,程序完成了十进制加减乘除四则运算, 按q键则退出 程序,符合设计要求。同时,屏幕上可以显示计算结果,也完成了设计要求。图5.5除法程序截图第27页共24页微机原理课程设计一一简易计算器6、心得体会本次为期一周的微机原理与接口课程设计已经结束了,在这并不算长的时间里我却获益良多。第一,我对本学期所学的理论知识有了更加深刻的理解。首先是对汇编语言的编程思想、程序设计流程有了更加深刻的认识。另

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论