汇编语言简单计算器程序毕业课程设计报告1.docx
- 文档编号:27202361
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:17
- 大小:78.60KB
汇编语言简单计算器程序毕业课程设计报告1.docx
《汇编语言简单计算器程序毕业课程设计报告1.docx》由会员分享,可在线阅读,更多相关《汇编语言简单计算器程序毕业课程设计报告1.docx(17页珍藏版)》请在冰豆网上搜索。
汇编语言简单计算器程序毕业课程设计报告1
课程设计说明书
题目:
简单计算器
院系:
专业班级:
学号:
学生姓名:
指导教师:
2010年12月31日
安徽理工大学课程设计(论文)任务书
计算机科学与工程学院硬件教研室
学号
学生姓名
专业(班级)
设
计
题
目
题目一:
判断闰年
题目二:
简单计算器√
题目三:
代码转换程序
题目四:
字符图形程序
题目五:
学生成绩管理
题目六:
打字练习(注:
请在自己选做的题目后打√)
设
计
技
术
参
数
1.熟悉汇编指令、宏汇编语言的编程方法
2.BIOS中断调用、系统功能中断调用方法
3.磁盘文件、及文件内容操作
设
计
要
求
题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理而设计的,是对所学课程知识较为系统的应用。
由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。
不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善程序。
另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。
工
作
量
1.完成所选题目的软件设计;
2.课程设计说明书1000字(不包括程序源代码)左右。
工
作
计
划
第1次熟悉软件环境。
第2次绘制程序流程图。
第3次用编写程序。
第4次用调试运行程序。
第5次编写课程设计说明书
参
考
资
料
[1]李敬兆等编.《汇编语言程序设计》.合肥:
中国科学技术大学出版社,2008.9
[2]李敬兆等编.《汇编语言程序设计实验教程及习题解答》.合肥:
中国科学技术大学出版社,2008.9
[3]王爽等编.《汇编语言》.北京:
清华大学出版社,2003.5
[4]曹加恒等编.《新一代汇编语言课程设计》.北京:
高等教育出版社,2003.6
[5]杨路明等编.《汇编语言程序设计》.长沙:
中南大学出版社,2005.8
[6]詹仕华等编.《汇编语言程序设计》.北京:
中国电力出版社,2008.2
[7]詹仕华等编.《汇编语言程序设计习题解答及课程设计、设计辅导》.北京:
中国电力出版社,2008.2
[8]宋彩莉等编.《汇编语言程序设计学习指导》.西安:
西安交通大学出版社,2008.2
指导教师签字
教研室主任签字
2010年12月17日
安徽理工大学课程设计(论文)成绩评定表
指导教师评语:
成绩:
指导教师:
年月日
摘要
汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。
高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。
在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。
现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。
汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
本次设计的简单计算器支持简单的四则运算。
关键词:
汇编语言,简单计算器,高效,硬件
Abstract
Assemblylanguageisapowerfulprogramminglanguagefeatures,butalsoallthehardwarefeaturesofcomputerandcandirectlycontrolthehardwareofthelanguage.Assemblylanguage,asalanguage,correspondingtohigh-levellanguagecompiler,youneeda"assembler"totheassemblylanguagesourcefilecompiledintomachineexecutablecode.AdvancedassemblersuchasMASM,TASMassembler,andsoforustowritehigh-levellanguageoffersmanysimilarfeatures,suchasstructured,abstractandsoon.Insuchanenvironmentpreparedbytheassembler,alargepartofthedirectivefortheassemblerhasbeensimilarinthehigh-levellanguage.Nowthecompilationenvironmenthassuchahigh,evenifallwindowsinassemblylanguagetowriteapplicationsthatarefeasible,butthisisnotassemblylanguagestrengths.Thestrengthliesinassemblylanguagetowriteefficienthardwareandrequiresprecisecontrolofthemachineprocess.Thissimplecalculatordesignedtosupportsimplearithmetic.
Keywords:
assemblylanguage,simple calculator,efficient, hardware
目录
1设计目的1
2概要设计2
2.1系统总体分析2
2.2主模块框图及说明2
3详细设计4
3.1主模块及子模块说明4
3.2各模块详细设计4
4.程序调试12
4.1运行界面分析12
4.2算法的分析12
4.3调试过程及分析12
5心得体会13
5.1设计体会13
5.2系统改进13
参考文献14
1设计目的
通过本次的课程设计,使自己加深对汇编语言的了解,应用《汇编语言程序设计》等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能里的目的。
通过本次课程设计的训练,可以使我在基本思路和基本方法上对基于8086/8088和基于ARM核的汇编语言程序设计有一个比较感性的认识,并具备一定程度的设计能力,从而能够熟练掌握编写汇编语言源程序的基本方法和基本构架,学会编写顺序结构、分支结构、循环结构和子程序的汇编程序,掌握程序中数据的产生与输入输出的方法以及一些关于汇编语言更深层次方面有初步的认识。
2概要设计
2.1系统总体分析
本次设计的简单计算器,主要是为了解决数学中的加、减、乘、除四则运算的问题。
由于在设计过程中考虑到了可能会多次计算数据,为此本次课程设计我设计的这个简单计算器可以一次运行,多次使用。
本程序使用了函数和宏混用的方式实现了代码的较好的可读性,使程序看起来结构严谨。
2.2主模块框图及说明
本程序的功能结构图如图2-1:
图2-1功能结构图
程序流程图如图2-2:
图2-2流程图
3详细设计
3.1主模块及子模块说明
主模块:
主要完成程序的主体框架结构,提供人-程序的交互。
子模块:
主要完成对数据的加工,处理。
3.2各模块详细设计
主模块:
首先提供一个主界面,提示用户按要求输入具体的数据和所要进行的操作,输入完毕后给出结果。
如果输入过程中发现非法输入,则立即给与提示,程序自动刷新界面,提示继续输入。
整个过程按“ESC”结束。
流程图如下图3-1:
N
Y
图3-1主模块流程图
代码如下:
CURSMACROA,B
MOVAH,2;置光标位置
MOVBH,0;页号为0
MOVDH,A;设置光标的坐标为(A.B)
MOVDL,B
INT10H;BIOS调用
ENDM
;
DISPMSGMACROMESSAGE
LEADX,MESSAGE;传递MESSAGE的偏移地址
MOVAH,9;显示字符串
INT21H;DOS调用
ENDM
;
CLEARMACROCOLOR;清屏
MOVAH,6;屏幕初始化
MOVAL,0;页号
MOVCH,0;设置左上角的坐标为(0,0)
MOVCL,0
MOVDL,100;设置右上角的坐标为(100,100)
MOVDH,100
MOVBH,COLOR;卷入行属性
INT10H;BIOS调用
ENDM
.MODELSMALL
.STACK
.DATA;数据段定义
MSG0DB'********************',0DH,0AH;,0dh,0ah,0dh,0ah
DB'**',0DH,0AH
;db'**',0dh,0ah
;db'**',0dh,0ah
DB'*caculater*',0DH,0AH;,0dh,0ah,0dh,0ah
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'*NUM1:
'
DB'*',0DH,0AH;,0dh,0ah,0dh,0ah,0dh
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'**',0DH
DB'*NUM2:
'
DB'*',0DH,0AH;,0dh,0ah,0dh,0ah,0dh
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'**',0DH
DB'*RESULT:
'
DB'*',0DH,0AH,0DH;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'**',0DH,0AH
DB'********************','$'
MSG1DB'choose+,-,*,/','$'
MSG2DB'youchoosewrong','$',0AH,0DH
MSG3DB'PressESCtoExit!
',0DH,0AH,'$'
MSG4DB'Pressanykeytocontinue!
',0DH,0AH,'$'
MSG5DB'-','$'
MSG6DB'.','$'
MSG7DB'errorinput!
','$'
MSG8DB'data2iswrong!
','$'
NUM1DW?
NUM2DW?
子模块:
完成对数据的进一步加工处理,转换格式并得出结果。
首先根据输入调用对应的“+”、“-”、“*”、“/”四大函数模块,这是本程序的核心模块,其他部分的一些小模块都是为这几大模块服务的,大致的流程图如下图3-2:
N
Y
图3-2子模块流程图
代码如下:
BEGINPROCNEAR
BACK:
CLEAR1EH
CURS2,20;设置光标为(2.20)
DISPMSGMSG0;显示用户界面
CURS8,41;设置光标为(8,41),第一行
MOVBX,0
MOVCX,2
NEWCHAR1:
MOVAH,1;键盘输入并回显
INT21H;DOS调用
CMPAL,30H;检查输入的字符是不是数字
JAEJ1;如果不是,则转移至J1
JMPD2;是,转移到D2执行
J1:
CMPAL,39H;与9的ASCII比较
JBEJ2;如果输入的字符是0-9,则转移至J2
JMPD2;如果不是数字,则转移至D2
J2:
SUBAL,30H
CBW;AL的内容符号扩展到AH
XCHGAX,BX
MOVDI,10
MULDI
XCHGAX,BX
ADDBX,AX
LOOPNEWCHAR1
MOVNUM1,BX
CURS11,41;设置光标位为(11,40),第二行
MOVBX,0
MOVCX,2
NEWCHAR2:
MOVAH,1;键盘输入并回显
INT21H;DOS调用
CMPAL,30H;与0的ASCII码比较
JAEJ3;如果输入数字大于等于0则跳转至J3
JMPD2
J3:
CMPAL,39H;与9比较
JBEJ4;如果小于或等于9则跳转
JMPD2;如果输入不是数字则跳转
J4:
SUBAL,30H;如果输入不是0-9,则转化成相应的字符
CBW;将AL符号扩展到AH
XCHGAX,BX
MOVDI,10
MULDI
XCHGAX,BX
ADDBX,AX
LOOPNEWCHAR2
MOVNUM2,BX
MOVAX,NUM1
MOVBX,NUM2
PUSHAX
PUSHBX
CURS15,33;设置光标的位置为(15.33),第三行
DISPMSGMSG1;显示提示信息
MOVAH,1;接受键盘输入并回显
INT21H;DOS调用
CMPAL,'+'
JEADDI;如果运算符为+,则计算两数之和
CMPAL,'-'
JESUBT;如果运算符为-,则计算两数之差
CMPAL,'*'
JEMULT;如果运算符为*,则计算两数之积
CMPAL,'/'
JEDIVI;如果运算符为/,则计算两数之商
CURS16,25;设置光标为(16,25)
DISPMSGMSG2;在屏幕上输出提示信息
JMPD1
;----
;ADDTHETWODATAS
ADDI:
POPBX
POPAX
ADDAX,BX;计算两数字之和
PUSHAX
CURS14,41;设置光标位置为(14,41)
POPAX
CALLCHANGE;将结果转换为十进制数
JMPD1
SUBT:
POPBX
POPAX
CMPAX,BX;比较两数大小
JAED0;如果AX>=BX则跳转
XCHGAX,BX
PUSHAX
PUSHBX
CURS14,40;设置光标位置为(14,40)
DISPMSGMSG5;在屏幕上显示负号
POPBX
POPAX
D0:
SUBAX,BX;计算两数之差
PUSHAX
CURS14,41;设置光标位置为(14,41)
POPAX
CALLCHANGE;将结果转换为十进制数
JMPD1
MULT:
POPBX
POPAX
MULBX;计算两数之积
PUSHAX
CURS14,41;设置光标位置为(14,41)
POPAX
CALLCHANGE;将结果转换为十进制数
JMPD1
DIVI:
POPBX
POPAX
CMPBX,0;判断除数是否为0
JEERROR;如果是0则跳转
CWD
DIVBX;计算两数之商
PUSHDX
PUSHAX
CURS14,41;设置光标位置为(14,41)
POPAX
CALLCHANGE;将十六进制数转换为十进制数
POPDX
CMPDX,0
JNELOP;如果DX不等于0则跳转
JMPD1
LOP:
MOVCX,4;设置精确度为小数点后4位
PUSHDX
DISPMSGMSG6;输出小数点
POPDX
CON:
PUSHBX
MOVAX,DX
MOVBX,10
MULBX
POPBX
CWD;将AX的内容符号扩展到双字
DIVBX;计算小数点后每一位的数字
PUSHDX
PUSHCX
CALLCHANGE;将十六进制数转化为十进制数
POPCX
POPDX
CMPDX,0;判断是否已经计算到小数点后第六位
JED1;如果是,则跳转
LOOPCON;如果不是,就继续计算
ERROR:
CURS15,33;设置光标位置为(15,33)
DISPMSGMSG8;提示出错
D1:
RET
D2:
PUSHAX
PUSHBX
CURS15,33;设置光标位置为(15,33)
DISPMSGMSG7;提示输入出错
POPBX
POPAX
RET
BEGINENDP
4.程序调试
4.1运行界面分析
运行界面如图4-1
图4-1运行界面
在NUM1这一行会提示输入第一个数据,NUM2这一行提示输入第二个数据,输入完成两个数据后程序会提示允许输入运算符,输入无误后在RESULT行显示结果。
4.2算法的分析
本程序使用了宏和函数调用的方法,这样做使得整个程序体看上去严谨,舒服。
整个程序中的CHANGE子程序,将十六进制数转换为十进制数。
BEGIN子程序开始运算。
DISPMSG子程序,显示用户界面。
通过这几个及程序的协助,使得这个系统可以正常的运行。
4.3调试过程及分析
编写完代码后分别点击按钮“C”,”L”,”R”,依次完成编译、连接和运行过程,也可以进入DOS环境下用DEBUG命令完成类似的功能,整个程序按“ESC”退出。
5心得体会
5.1设计体会
本次课程设计我有不少收获:
在选好了题目之后我查阅了不少资料,加深的对汇编语言的认识;在往后的几周上机实践中,对汇编语言源程序的编辑、汇编、连接和调试的全过程更加熟练;在不断地求解过程中,了解到了汇编语言的一些特点,感觉到汇编语言的执行效率非常高,由于汇编是对底层的操作,这一点决定了它在代码的产量方面不如一些高级语言。
本次课程设计的成功完成,我首先感谢我的指导老师刘向举,他自始至终都给予了我莫大的帮助,正是在刘向举老师的悉心指导下我才能顺利完成本次课程设计中的每一个计划。
在这次课程设计中,无论从课题选择,方案论证上,还是到具体的设计和调试,每一项安排他都提出了至关重要的建议,使我少走了许多弯路,节省了大量时间,可以说,我的课程设计的顺利完成凝聚着老师的大量心血,在此向刘向举老师表示深深的感谢。
当然,我也要感谢我的同学和那些互联网上的朋友,他们毫不吝啬的将自己所掌握的知识拿出来资源共享,才能使我的部分功能模块得以实现,谢谢他们
5.2系统改进
本程序有一些问题:
1)不能进行混合的四则运算
2)能计算的数值范围有限,容易产生益处
3)不能进行有关小数的四则运算
4)在进行除法运算时的精确度不高
在以后的时间里,我会改进一些问题,力争使该程序完美。
参考文献
[1]李敬兆等编.《汇编语言程序设计》.合肥:
中国科学技术大学出版社,2008.9
[2]李敬兆等编.《汇编语言程序设计实验教程及习题解答》.合肥:
中国科学技术大学出版社,2008.9
[3]王爽等编.《汇编语言》.北京:
清华大学出版社,2003.5
[4]曹加恒等编.《新一代汇编语言课程设计》.北京:
高等教育出版社,2003.6
[5]杨路明等编.《汇编语言程序设计》.长沙:
中南大学出版社,2005.8
[6]詹仕华等编.《汇编语言程序设计》.北京:
中国电力出版社,2008.2
[7]詹仕华等编.《汇编语言程序设计习题解答及课程设计、设计辅导》.北京:
中国电力出版社,2008.2
[8]宋彩莉等编.《汇编语言程序设计学习指导》.西安:
西安交通大学出版社,2008.2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 简单 计算器 程序 毕业 课程设计 报告