微机原理简易计算器课程设计.docx
- 文档编号:7756074
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:25
- 大小:95.18KB
微机原理简易计算器课程设计.docx
《微机原理简易计算器课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理简易计算器课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
微机原理简易计算器课程设计
告计报课程设
简易计算器课程设计名称:
三系系别:
张梦瑶学生姓名:
111通信班班级:
20110306111学号:
成绩:
指导教师:
袁静
开课时间:
2013-2014学年1学期
微机原理课程设计——简易计算器
一.设计题目
简易计算器
二.主要内容
1、采用模块化程序结构设计软件,可将整个软件分成若干功能模块。
2、画出程序流程图。
3、根据流程图,编写源程序。
4、上机调试程序。
三.具体要求
1、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
2、利用BIOS中断的10号功能调用来设置显示方式。
3、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
四.进度安排
周一
周二
周三
周四
周五
讲课设内容,安排任务
查资料,确定硬件电路方案
编程调试
编程调试
写总结报告
五.成绩评定
考核方法:
现场验收(占50%),课程设计报告(占50%)。
考核内容:
学习态度(出勤情况,平时表现等)、方案合理性、程序编制质量、演示效果、设计报告质量。
成绩评定:
优,良,中,及格,不及格。
:
如发现抄袭,按照不及格处理。
特别说明
页24共页2第
微机原理课程设计——简易计算器
前言.....................................................4
1、设计题目..............................................5
2、设计内容..............................................5
2.1基本内容..........................................5
2.2主要功能..........................................5
3、设计原理及方案........................................6
3.1总体方案..........................................6
3.2程序流程图........................................7
3.2.1主程序.......................................7
3.2.2计算子程序...................................8
3.3系统模块详细设计..................................9
3.3.1界面设置.....................................9
3.3.2算法选择设置................................10
3.3.3数制转换设置................................11
4.汇编源程序代码........................................13
5、调试运行结果.........................................20
5.1操作说明.........................................20
5.2调试运行结果.....................................20
6、心得体会.............................................23
7、参考文献.............................................24
页24共页3第
微机原理课程设计——简易计算器
前言
课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力的重要教学环节。
它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一个重要教学环节。
计算器在我们日常生活中应用是相当普遍的,可以说它已经成为现代社会生活不可或缺的一部分。
本次课程设计就是根据微机原理与接口的相关知识,利用BIOS和DOS的中断来设计一个简易计算器,能够实现加减乘除四则运算,并在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
同时利用BIOS中断的10号功能调用来设置显示方式,利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
通过本次课程设计,要求学生熟悉和掌握微机系统的软件的方法、设计步骤,使学生得到微机开发应用方面的初步训练,熟练应用8086汇编语言编写应用程序和实际设计中的软件调试方法和步骤,熟悉微机系统的软件开发工具的使用方法。
通过课程设计实践,不仅要培养学生事实求是和严肃认真的工作态度,培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅资料,撰写设计报告表达设计思想和结果的能力。
页24共页4第
微机原理课程设计——简易计算器
1、设计题目
简易计算器
2、设计内容
2.1基本内容
1、编写一个程序,能从键盘上读入数据,并完成加、减、乘、除的计算。
2、利用BIOS和DOS的中断来设计一个计算器,要求在屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除四种计算功能和结束程序的功能。
3、利用BIOS中断的10号功能调用来设置显示方式。
4、利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
2.2主要功能
一、显示主菜单功能
主菜单如下:
Pleaseinputanumbertochoosethearithmeticoperation
1—add2—subtract3—multiply
4—divideq—returntoDOS
二、计算功能
1、别按数字键“1”、“2”、“3”,则执行相应子模块1、2、3,进行两个字节与两个字节的加法、减法和乘法运算,并在屏幕上显示运算结果。
2、按数字键“4”,执行子模块4,进行两个字节除一个字节的除法运算,并显示结果。
3、按字母键“q”,执行子模块5,程序退出,返回DOS。
4、若按其它键则显示提示字符串:
“PleasePressNumber1、2、3、4、q:
”,然后继续显示主菜单。
页24共页5第
微机原理课程设计——简易计算器
3、设计原理及方案
3.1总体方案
利用BIOS中断的10号功能调用来设置显示方式。
利用DOS中断的01号、02号子功能来完成键盘接受、结果显示。
设置屏幕显示方式。
MOVAH,00H
MOVAL,NUM(NUM为显示方式属性字)
INT10H
接着从键盘上接受键值,并判别后转到相应的子模块进行运算,并显示结果。
MOVAH,01H
INT21H;AL=键入字符的ASCII码
从键盘上接收一串字符串命令:
MOVAH,0AH
MOVDX,OFFSETBUF;BUF为数据段中定义的数据缓冲区
INT21H
显示单个字符命令:
MOVAH,02H
INT21H
显示一串字符串的命令:
MOVAH,09H
MOVDX,OFFSETBUF;BUF为被显示字符串的首地址
INT21H
十进制数显示过程:
将十进制数送到BX中,BX除以1000,余数送BX中,商在AL中,范围为0~9,显示AL中的内容。
BX除以100,余数送BX中,商在AL中,显示AL中的内容,依次类推,直到分出个位数字。
如最高位为0,则不应显示,而非最高位的0则显示。
可利用设标志位并结合商的方法来决定是否显示0。
页24共页6第
微机原理课程设计——简易计算器
3.2程序流程图
3.2.1主程序
开始'?
‘AL=1'AL=‘2调用加法子程序调用减法子程序提示输入第一个数将第一个数的将第二个数的ASCII码,并显示结果将结果转为还是重新计算提示返回DOS束结四则运算器程序设计界面设置
显示主菜单码转为二进制并保存ASCII
接收数字
?
4'AL=‘'?
AL=‘5调用除法子程序结束数算制转换设置
法选
?
'‘3码转为二进制并保存计算择设置
?
AL=调用乘法子程序提示输入第二个数ASCII判断结果正负,并储存结果
主程序流程图图3.1
页24共页7第
微机原理课程设计——简易计算器
3.2.2计算子程序
计算子程序流程图3.2图页24共页8第
微机原理课程设计——简易计算器
3.3系统模块详细设计
本次设计需要实现的模块图图如1所示
模块图图3.3
1)界面设置(主要实现确定界面样式的功能,以菜单形式显示。
2)算法选择设置(用于选择加、减、乘、除来进行运算。
)数制转换设置3(应用十进制——二进制的转换算法来处理加、减、乘、除四则运算。
界面设置3.3.1
、设置屏幕显示方式:
1MOVAH,00H
MOVAL,2
INT10H
,即设置屏幕号功能来设置屏幕显示方式。
此处AL=2BOIS通过调用的O2H80*25黑白文本。
显示方式为、显示主菜单:
2而且还有用户可以直接调用的上百个常用不仅为用户提供了许多指令,DOS在使输出管理等。
/子程序。
这些子程序的功能主要是进行磁盘读/写、基本输入页24共页9第
微机原理课程设计——简易计算器
用时,用户只需要了解各个子程序的编号即可,这些编号成为DOS功能调用号。
其调用过程为:
(1)DOS功能条用号送AH寄存器。
(2)如果需要,按要求给定输入参数(由得不需要输入参数)。
(3)写入中断指令“INT21H”。
调用结束,按功能使用其输出参数。
本程序主菜单显示代码如下:
MOVAH,09H
MOVDX,OFFSETTOP
INT21H
先在数据段中定义主菜单中要显示的字符串,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。
3.3.2算法选择设置
。
DIV、MUL、汇编语言中加减乘除运算指令分别为ADD、SUB、首先选择要进行的四则运算,规定:
若选择1,则进行加法;选择2,则进行减法;选择3,则进行乘法;选择4,则进行除法。
具体计算过程分析如下:
1、从键盘接收一个数字:
MOVAH,01H
INT21H
通过调用DOS系统的01H号功能——键入字符并回车来实现,其出口参数为键入字符的ASCII码,存在AL中。
2、接收键入用于计算的数:
MOVAH,0AH
MOVDX,OFFSETBUF1
通过调用DOS系统的0AH号功能——键入字符串至内存缓冲区来实现,其入口参数如下:
DS:
DX=存放键入字符串的缓冲区的首地址;(DS:
DX)=用户规定的缓冲区;(DS:
DX+1)=实际键入的字符数;从(DS:
DX+2)开始放键入的字符串。
因此,在下面的程序中运用所键入的数字时要注意字符串的首地址。
3、显示结果:
页24共页10第
微机原理课程设计——简易计算器
MOVAH,09H
MOVDX,OFFSETBUF3
INT21H
将结果存入数据段中定义的缓冲区BUF3中,再通过调用DOS系统的09H号功能——显示字符串(串尾字符为$,但不显示)来完成。
3.3.3数制转换设置
1、子程序A2——将数的ASCII码转为二进制数:
A2PROCNEAR
MOVCL,BUF1+1;把BUF1+1中的实际键入的字符数放入CL
MOVCH,0;CH清零
MOVBX,OFFSETBUF1+2;把第一个数字的地址放在BX
PUSHBX;保存BX中的值
PUSHCX;保存CX中的值
L1:
MOVAL,[BX]
ANDAL,0FH;把ASCII码转换为十进制
MOV[BX],AL;存放十进制
INCBX;下一个数字的地址
LOOPL1
POPCX;恢复CX
POPBX;恢复BX
MOVAX,0;将累加和赋零
MOVSI,10
L2:
MULSI
ADDAL,[BX]
ADCAH,0
INCBX
LOOPL2;累加乘10
L3:
RET
页24共页11第
微机原理课程设计——简易计算器
A2ENDP
入口:
十进制数的ASCII在BUF1内;出口:
转换后的二进制数在AX内。
算法:
先将其转换为十进制,再用累加和乘10加X的方法变为二进制,如将163转换为二进制数,可先将累加和赋0,再计算(((0*10+1)*10+6)*10+3)结果为二进制数。
2、将计算结果的二进制数转换为对应的十进制数ASCII码并输出显示(A3程序段):
该模块的程序设计详见程序清单及说明中A3、BB程序段
入口:
二进制数在AX内;出口:
转换后的ASCII码在BUF内。
算法:
AX内的数范围在+32767到-32768之间,先检查AX符号位,决定输出‘+'‘-',若为负,先求补码得到原码后可与正数统一处理。
方法:
把将被转换的二进制数先除以10000,商为万位数,再将余数除以1000,商为千位数,以此类推,求出百十位数,剩下的为个位数。
最后各个数加上30H,即为对应字符。
页24共页12第
微机原理课程设计——简易计算器
4.汇编源程序代码
DATASEGMENT
N=15
TOPDB5DUP(0AH)
DBNDUP(''),'Pleaseinputanumbertochoosethearithmetic
operation',0DH,0AH
DBNDUP(''),'',0DH,0AH
DBNDUP(''),'1—add2—subtract3—multiply',0DH,0AH
DBNDUP(''),'4—divideq—returntoDOS',0DH,0AH
DBNDUP(''),'',0DH,0AH
DBNDUP(''),'Choice(1.2.3.4.q):
$'
MESG1DB0DH,0AH,'Pleasepressnumber:
1.2.3.4.q!
$'
MESG2DB0DH,0AH,'Pleaseinputthefirstnumber:
$'
MESG3DB0DH,0AH,'Pleaseinputthesecondnumber:
$'
MESG4DB0DH,0AH,'PlayAdd:
$'
MESG5DB0DH,0AH,'PlaySubtract:
$'
MESG6DB0DH,0AH,'PlayMultiply:
$'
MESG7DB0DH,0AH,'PlayDivide:
$'
MESG8DB0DH,0AH,'TheResult:
$'
MESG9DB0DH,0AH,'PRESSQRETURNDOC,ANYPRESSRETURNSTART!
$'
BUF1DB6;十进制数的缓冲区,可接收6个字符
DB?
;保留,用于10号调用时DOC填入实际输入字符数
DB6DUP(?
);一个符号位,四位数字ASCII码,加上一个回车符
BUF2DW?
;将第一个数转换为二进制后,放于这里
BUF3DB6DUP(?
),'$';将结果转换为ASCII码后,放在这里
DATAENDS
STACKSEGMENTSTACK'STACK'
页24共页13第
微机原理课程设计——简易计算器
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAH,00H;设置屏幕显示方式
MOVAL,2
INT10H
MOVAH,09H;显示菜单
MOVDX,OFFSETTOP
INT21H
从键盘接收一个数字AA:
MOVAH,01H;
INT21H
与1CMPAL,'1';比较
不等于1就转到JNENEXT1;NEXT1
等于1就转到加法程序JMPJIA;
2比较NEXT1:
CMPAL,'2';与NEXT22JNENEXT2;就转到不等于就转到减法程序JMPJIAN;2等于与3NEXT2:
CMPAL,'3';比较NEXT3不等于3就转到JNENEXT3;
3JMPCHENG;就转到乘法程序等于比较NEXT3:
CMPAL,'4';与4NEXT4不等于JNENEXT4;4就转到等于JMPCHU;4就转到除法程序NEXT4:
CMPAL,'q';比较与qNEXT5JNENEXT5;不等于q就转到DOS回MOVAH,4CH;
INT21H
MESG1
显示NEXT5:
MOVAH,09H;
页24共页14第
微机原理课程设计——简易计算器
MOVDX,OFFSETMESG1
INT21H
JMPAA;跳到AA
A1PROCNEAR
MOVAH,09H;提示输入第一个数
MOVDX,OFFSETMESG2
INT21H
MOVAH,0AH;接收第一个数
MOVDX,OFFSETBUF1
INT21H
CALLA2;调用A2进行ASCII-二进制的转换
MOVBUF2,AX;把第一个数转换的二进制放在BUF2
MOVAH,09H;提示输入第二个数
MOVDX,OFFSETMESG3
INT21H
MOVAH,0AH;接收第二个数
MOVDX,OFFSETBUF1
INT21H
CALLA2;调用A2把第二个数进行ASCII-二进制转换
RET
A1ENDP
A2PROCNEAR
MOVCL,BUF1+1;把BUF1+1中的实际键入的字符数放入CL
MOVCH,0;CH清零
MOVBX,OFFSETBUF1+2;把第一个数字的地址放在BX
PUSHBX;保存BX中的值
页24共页15第
微机原理课程设计——简易计算器
PUSHCX;保存CX中的值
L1:
MOVAL,[BX]
ANDAL,0FH;把ASCII码转换为十进制
MOV[BX],AL;存放十进制
INCBX;下一个数字的地址
LOOPL1
POPCX;恢复CX
POPBX;恢复BX
MOVAX,0;将累加和赋零
MOVSI,10
L2:
MULSI
ADDAL,[BX]
ADCAH,0
INCBX
LOOPL2;累加乘10
L3:
RET
A2ENDP
JIA:
MOVAH,09H;加法程序
MOVDX,OFFSETMESG4
INT21H
CALLA1;调用A1
ADDAX,BUF2;把转换后的放在BUF2中的第一个数和放在AX
JMPA3;的第二个数相加
JIAN:
MOVAH,09H;减法程序
MOVDX,OFFSETMESG5
INT21H
CALLA1
MOVBX,AX;把转换后的放在AX的第二个数放页24共页16第
微机原理课程设计——简易计算器
到BX
MOVAX,BUF2;把转换后放在BUF2中的第一个数放到AX
SBBAX,BX;两数相减
JMPA3
CHENG:
MOVAH,09H;乘法程序
MOVDX,OFFSETMESG6
INT21H
CALLA1
MOVBX,AX;把转换后的放在AX的第二个数放BX
到把转换后的放在BUF2MOVAX,BUF2;中第一个数AX
放到两数相乘MULBX;
JMPA3
除法程序CHU:
MOVAH,09H;
MOVDX,OFFSETMESG7
INT21H
CALLA1
把转换后的放在MOVAXDX,AX;的第二个数放到DX
把转换后的放在MOVAX,BUF2;BUF2中第一个数放AX
到两数相除,商在DIVDL;AL里
使AH清零MOVAH,0H;
JMPA3
把BUF3放A3:
MOVBUF3,'+';'+'
把结果于0比较CMPAX,0;
转到L4
JGEL4;AX>0页24共页17第
微机原理课程设计——简易计算器
NEGAX;AX<0将AX取反
MOVBUF3,'-';把BUF3放'-'
L4:
CWD
MOVBX,10000
DIVBX;商为第一位数字放在AL,余数放在DX
CALLBB
MOVBUF3+1,AL;把第一个数放在BUF3+1单元中
把放在MOVAX,DX;DX中的余数放到AX
CWD
MOVBX,1000
商为第二位数字放在AL,DIVBX;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 简易 计算器 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)