计算器微机原理课设武汉理工Word文档格式.docx
- 文档编号:22418674
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:25
- 大小:650.47KB
计算器微机原理课设武汉理工Word文档格式.docx
《计算器微机原理课设武汉理工Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算器微机原理课设武汉理工Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。
计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。
通过使用汇编语言设计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用。
本次课程设计以实现一个基本功能完善,界面友好,操作简便易行的计算器为最终目的。
通过对具有加减乘除基本功能的计算器的设计实现,学会使用汇编语言实现输入输出模块的设计,模块合理调用的设计,加减乘除运算的判断以及退出程序的判断的设计。
通过对各种指令的合理使用,熟悉并加深对各种指令的用法。
学会使用汇编语言设计各个功能模块。
当实现各个程序模块后,学会通过程序的调用最终实现一个具有基本计算功能的简单计算器
微机原理课程设计的意义是为了使学生加深对所学的微机原理知识的理解,培养学生的专业素质,提高其利用微机原理知识处理问题的能力,为今后专业课程的学习、毕业设计和工作打下良好的基础。
2.设计思想及主要功能
2.1设计思想
程序主要分为主程序,输入子程序,输出子程序,加法子程序,减法子程序,乘法子程序,除法子程序。
根椐输入的符号选用不同的运算子程序,最后调用输出子程序。
各个程序的具体做法,详见后面的流程图和分析。
本程序的关键是在输入、输出程序,值得特别注意的地方是call和ret的调用,而且还要清楚跳转的返回地址;
由于计算器比数学用表等计算工具要先进得多,应该积极倡导学生加速用计算器取代数学用表的进程。
从键盘输入数据与运算符;
可以进行加、减、乘、除四则运算,输入和输出的数均必须为十进制的。
输入的数据最大为双字的,。
如果输入的除数为0;
输出错误信息。
输入的表达式有误,输出错误信息。
输入的两个数,不能除尽时,输出除数输入错误信息。
如果输入了空格,同样输出错误信息。
输出的数据最大可输出4字,为的是输出乘除法的结果。
2.2实现的主要功能
(1)输入和输出的数均为十进制的。
(2)输入的数据最大为双字的且必须是数字,当输入字母或其他非数字符号时,输出错误信息。
(3)如果输入的除数为0;
(4)输入的表达式有误,输出错误信息。
(5)输入的两个数,有一个大于双字,输出错误信息。
(6)如果输入了空格,输出错误信息。
(7)输出的数据最大可输出4字,为的是输出乘法的结果。
(8)除法有不能整除的情况时,输出小数结果保留小数点后四位
3.设计流程图
3.1主程序流程图
图3-1主程序流程图
主程序流程图为图3-1,此程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。
程序流程图说明:
通过流程图,可以看出程序开始运行时,首先输出提示语句,当用户输入后,程序根据所输入的内容进行判断,通过判断的结果来决定调用哪个功能模块,首先要判断输入的字符是否为Q或q,若是,则退出程序,不是则继续输入。
还要判断输入的是否为0--9,‘+’,‘-’,‘*’,‘/’这些字符,若不是会报错,是则将根据运算符号调用相应的功能模块完成运算。
最后将运算的结果显示在屏幕上,并返回主题程序,使用户可以重新输入。
3.2子程序流程图
这里主要介绍除法子程序流程图,其他的与之相似。
在运算时先判断输入第一个字符是否符合,若不符合则重新输入,否则输入第二个字符,判定第二个字符是否为0,若为零则输出错误,若第二个字符也符合,则输出结果,返回主程序。
除法做的是先从高位开始,依次除以除数,高位的余数和低位组合起来,再除以除数。
运算过程中余数保存起来。
把余数存到result中,因为display输出的是result的值。
除法子程序流程图如图3-2所示:
图3-2除法子程序流程图
4.程序代码
SSEGSEGMENTstack'
stack'
;
堆栈段定义
DB200DUP(?
)
SSEGends
DATASEGMENT;
数据段定义
;
----------------------主程序中的提示信息-------------------------
MSG1DB0AH,0DH,'
Welcome!
!
$'
MSG2DB0AH,0DH,'
choose:
+,-,*,/'
'
$'
MSG3DB0AH,0DH,'
yourchooseiswrong,pleaseagain!
'
MSG4DB0AH,0DH,'
pleaseinputdata1:
MSG5DB0AH,0DH,'
pleaseinputdata2:
MSG6DB0AH,0DH,'
Theresultis:
'
MSG7DB0AH,0DH,'
-'
MSG8DB0AH,0DH,'
Youinputtheillegalshuju,pleaseagain!
MSG9DB0AH,0DH,'
PressQorqtoExit,pressanykeytocontinue!
MSG10DB0AH,0DH,'
.'
DATA1DW?
DATA2DW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
SSEG
START:
MOVAX,DATA
MOVDS,AX
DISPAYMACROMESSAGE
LEADX,MESSAGE;
MOVAH,9;
显示字符串
INT21H;
DOS调用
ENDM
DISPAYMSG1
HJ:
DISPAYMSG4
MOVBX,0
MOVCX,4
XORAX,AX
XORBX,BX
DATA01:
MOVAH,1;
键盘输入并回显
CMPAL,30H;
输入字符检测
JAEJ1;
如果不是,则转移至J1
JMPD2;
是,转移到D2执行
J1:
CMPAL,39H;
JBEJ2;
J2:
SUBAL,30H
CBW;
XCHGAX,BX
MOVDI,10
MULDI
ADDBX,AX
LOOPDATA01
MOVDATA1,BX
MOVBX,0
MOVCX,4
DISPAYMSG5;
显示提示输入数据二的信息
DATA02:
MOVAH,1;
键盘输入并回显
JAEJ3;
与0比较
JMPD2
J3:
与9比较
JBEJ4;
J4:
SUBAL,30H;
将AL符号扩展到AH
LOOPDATA02
MOVDATA2,BX
MOVAX,DATA1
MOVBX,DATA2
PUSHAX
PUSHBX
DISPAYMSG2;
运算符检测
ZIFU:
MOVAH,1
INT21H
CMPAL,'
+'
JZADD0;
若运算符为“+”,则跳转到ADD0
-'
JZSUB0;
若运算符为“-”,则跳转到SUB0
*'
JZMUL0;
若运算符为“*”,则跳转到MUL0
/'
JZDIV0;
若运算符为“/”,则跳转到DIV0
DISPAYMSG4;
若输入不合法,则显示提示信息
JMPD1;
若输入不合法,则重新输入
----------------------------------------
ADDTHETWODATAS加子程序
ADD0:
DISPAYMSG6;
显示结果的信息
POPBX
POPAX
ADDAX,BX
CALLCHANGE
MOVDX,AX
CALLDONE
RET
SUBTRACTTHETWODATAS减子程序
SUB0:
POPAX
CMPAX,BX;
比较两数大小
JAESUB1;
如果AX>
=BX则跳转
XCHGAX,BX
PUSHAX
PUSHBX
DISPAYMSG7;
显示一个负号
SUB1:
SUBAX,BX
MOVDX,AX
RET
---------------------------------------
MULTIPLYTHETWODATAS乘子程序
MUL0:
MULBX
DIVIDETHETWODATAS除子程序
DIV0:
DISPAYMSG6
POPBX除子程序
POPAX
CMPBX,0;
判断除数是否为0
JEERROR_DATA;
如果是0则跳转
CWD
DIVBX;
计算两数之商
PUSHDX
CALLCHANGE;
POPDX
CMPDX,0
JNELOP
JMPD1
LOP:
MOVCX,4;
DISPAYMSG10;
输出小数点
CON:
MOVAX,DX
MOVBX,10
MULBX
POPBX
CWD;
计算小数点后的数
PUSHCX
CALLCHANGE
POPCX
JED1;
如果是,则跳转
LOOPCON
---------------------------------------------
以下为提示输入不合法数据的模块
ERROR_DATAPROCNEAR;
:
DISPAYMSG8
DISPAYMSG5
JMPDATA02
ERROR_DATAENDP
-----------------------------------------------
DEC_DIVPROCNEAR
将字转换为双字
DIVCX
MOVDL,AL
ADDDL,30H;
MOVAH,2;
显示输出
RET
DEC_DIVENDP
------------------------------------------
AX中16进制数转换为10进制
CHANGEPROCNEAR;
十六/十
CMPAX,1000
JAEC1;
AX≥1000则转移
CMPAX,100
JAEC2;
AX≥100则转移
CMPAX,10
JAEC3;
AX≥10则转移
JMPC4;
AX<10
C1:
MOVCX,1000D
CALLDEC_DIV
C2:
MOVCX,100D
C3:
MOVCX,10D
C4:
MOVCX,1D
CHANGEENDP
DONEPROCNEAR;
判断下一步操作是结束还是继续
DISPAYMSG9
MOVAH,7
INT21H
Q'
JZEXIT
q'
JMPHJ
DONEENDP
------------------------------------------------
D1:
D2:
JMPHJ
EXIT:
MOVAX,4C00H
CODEENDS
ENDSTART
5.程序运行与调试
5.1界面初始化
说明:
由程序输出界面代码段编辑,界面初始化如图5-1,提示用户输入数据1.
图5-1
5.2数据输入输出错误
输入数据DATA1、DATA2会弹出四则运算符号”choose+,-,*,/”提示,当选定运算符号后自动在RESULT弹出运算结果,当输入为非数字或为非四则运算符号(例如:
字母、数字)时,则会提示重新输入或输入错误。
如图5-2,为输入错误字符弹出的提示。
图5-2
5.3加法运算
加法运算中可得到最大值为9999的和,结果输出后同时输出提示'
继续或结束。
如图5-3为1111与2222相加的结果。
图5-3
5.4减法运算
减法运算中可得到最大值为9999,最小值为-9999的差,这就有输出正负之分。
如图5-4为被减数大于减数的结果,图5-5为减数大于被减数的结果。
图5-4
图5-5
5.5乘法运算
乘法运算中可得到最大值也为9999的积,若超过范围则只取后四位,如图5-6为1111*4的运行结果。
图5-6
5.6除法运算
除法运算有除数为零不为零两种结果,如果除数为零则输出错误提示,重新输入,若除数不为零则输出正常,其中结果若为小数则保留四位。
图5-7为除数为零的结果,图5-8为输出为整数的运行结果,图5-9为输出为小数的运行结果。
图5-7为5555/0,提示输出错误,重新输入数据2。
图5-7
图5-8为5555/1111,结果为5.
图5-8
图5-9为8883/1120,结果为7.9357.
图5-9
7、小结与体会
本次的课程设计是一个相对而言比较难的设计,因为这次设计不仅仅是课本上知识的整合,而且还有很多是课外的扩展。
这次课程设计可以说是一个挑战。
我们做的题目是简易计算器的设计。
才开始思路很清晰。
或许是因为我们司空见惯了这种小机器,可是等做起来发现真的好难。
首先8255A的初始化和8086的接线也是十分简单,但是等到编成的时候发现有很多不懂得地方,觉得很容易的算法在编程中很难实现。
于是我开始查看课本和有关的资料,知道了一些编程常用的方法。
受益匪浅。
而后我用心编写这程序。
经过自己的努力和同学的帮助终于完成了相应的要求。
程序的主要功能是实现四则运算,整个程序中主要分为,输入算式,加法,减法,乘法,除法和以十进制显示结果这几个部分
。
本程序基本实现了四则运算的功能,还有在除法运算中不能运算较大的数,会产生溢出现象
一开始的时候自己编出来的程序有很多问题,尤其是在循环程序上,因此查阅了不少资料,也请教了好几个同学帮着修改,调试了好久才能正常运行。
由于能力有限,程序还是有不完美的地方。
这次的综合实验让我对汇编有了更深刻的认识,对各种指令有了进一步的理解当然我还有很多不足之处,比如知识掌握的不够全面,研究的深度不够,有问题畏畏缩缩不敢问,程序编写不会查漏补缺。
课后没有及时解决课上的问题留到第二天上课程设计在想办法,这说明我的惰性也很强。
这些都是我需要去改进的地方。
我会在以后的学习中多加注意。
通过这次汇编语言程序课程设计,我学到了许多东西,同时也发现了一些不足之处,在以后的学习中我会逐步弥补这些不足。
总而言之,此次课程设计使我受益匪浅
8.参考文献
[1]《微机原理与接口技术(第三版)》彭虎周佩玲傅忠谦编著电子工业出版社.2011.11
[2]《8086/8088汇编程序设计》李敬兆.中国科学技术大学出版社.2003.5
[3]《宏汇编语言MASM6实用大全》东阳生等编著.科学出版社,1993.6
[4]《80386/80486编程指南》田学峰,周豫滨译.电子工业出版社,1994.8
[5]《汇编语言程序设计学习指导》宋彩莉西安交通大学出版社,1999.3
[6]《Intel汇编语言程序设计(第五版)》电子工业出版社温玉杰梅广宇译著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算器 微机 原理 武汉理工