版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言课程设计报告( 2011 - 2012 年度第 2 学期)实现加减乘除四则运算的计算器专业计算机科学与技术学生姓名班级学号指导教师 完成日期目 录目 录21 概 述11.1 设计目的11.2 设计内容12 系统需求分析12.1 系统目标12.2 主体功能12.3 开发环境13 系统概要设计23.1 系统的功能模块划分23.2 系统流程图34系统详细设计35 测试45.1 测试方案45.2 测试结果46 小结5参考文献6附 录7附录 源程序清单7实现加减乘除四则运算的计算器1 概 述 1.1 设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇
2、编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。1.2 设计内容能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:c:tasmjs 3+25 2 系统需求分析2.1 系统目标本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到
3、屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。2.2 主体功能系统分析主要包括设计的功能分析和系统的流程,功能分析放在首位,每一个软件都要能满足一定的功能才有使用价值。根据功能需求来创建应用程序。本设计的功能如下: 1、输入2个数,先判断是加减运算还是乘除运算,再进行计算 2、判断符号是否为运算符 3、回车为换行符 4、用十进制或十六进制输出运算结果2.3 开发环境tasm5.
4、0集成环境3 系统概要设计3.1 系统的功能模块划分本题目实现的模块图如图3-1所示四则运算计算器程序设计界面设置选择算法设置十进制转换设置图3-1 概要模块(1) 界面设置 主要实现确定界面样式的功能,以菜单形式显示。(2) 选择算法设置 用于选择加、减、乘、除法来进行运算。(3) 十进制转换设置 应用十进制的转换算法来处理加、减、乘、除法四则运算。3.2 系统流程图输入选择键xx=1?x=2?x=3?x=4?十六进制加法十六进制减法十六进制乘法十六进制除法提示出错!x=0??是是是否是否否否否x=y/y ??否是是开 始结 束图3.2.1四则运算计算器执行过程流程图4系统详细设计4.1 界
5、面设置 通过定义数据段,利用09h显示出功能列表。通过定义数据段,以字符串的形式输入每个提示信息,利用09h键盘输入并回显命令显示每一个功能提示,是计算器的功能列表有序清晰的显示在屏幕上。4.2 选择算法设置首先选择要进行的四则运算,若选择1,则进行加法;若选择2,则进行减法;若选择3,则进行乘法;若选择4,则进行除法。加法:先输入第一个小于4位十六进制数存入si中,在输入第二个小于4位十六进制数存入bx中,然后显示bx 和si中的内容相加存在bx中。减法:先输入第一个小于4位十六进制数存入si中,在输入第二个小于4位十六进制数存入bx中,然后显示bx 和si中的内容相减存在bx中,然后用ne
6、g来求反,即为第一个数减去第二个数的差,显示bx的内容即为差。乘法:先输入第一个小于4位十六进制数存入si中,在输入第二个小于4位十六进制数存入bx中,把bx的值给ax,然后让ax乘以si,然后再分别将dx,ax中的内容赋给bx,接着依次显示dx,ax的内容,即为积。除法:先输入第一个小于4位十六进制数存入si中,在输入第二个小于4位十六进制数存入bx中,将si赋给ax作被除数,让bx作除数,得到的商存放在ax中,余数放在dx中,然后依次赋给bx,将其依次显示即为商。4.3 十进制转换设置 要完成十进制转换成十六,一般采用除十六取余法来完成,其大致过程如下:将待转换的数除以16得到第一个商和余
7、数,此第一个余数就是所求的十六进制数的各位,再用第一个商除以16,得到第二个商和余数,此第二个余数就是所求十六进制数的十位,重复这一过程直至商为0,此时的余数就是所求十六进制数的最高位。在内存中分配一缓冲区,用来存放以上分离出来的使十进制数的每一位,然后再逐个转换成ascii码,转换成ascii码的过程很简单,就是给每个十六进制位加上30h即可,最后送显示器输出。5 测试5.1 测试方案对程序源代码进行功能调试和功能验证。程序代码运行成功后,分别检验测试其加、减、乘、除功能,并对结果进行分析。当用户选择0时,输入y或n决定是否退出程序。5.2 测试结果输入数字进行加减乘除运算,计算结果如下图所
8、示:图5.2.1 计算结果测试结束后,退出程序,如下图所示:图5.2.2 退出程序6 小结程序的主要功能是实现四则运算,整个程序中主要分为,输入算式,加法,减法,乘法,除法和以十进制显示结果这几个部分。本程序基本实现了四则运算的功能,但还没能实现带有括号的四则运算,还有在除法运算中不能运算较大的数,会产生溢出现象。一开始的时候自己编出来的程序有很多问题,尤其是在循环程序上,因此查阅了不少资料,也请教了好几个同学帮着修改,调试了好久才能正常运行。由于能力有限,程序还是有不完美的地方。这次的综合实验让我对汇编有了更深刻的认识,对各种指令有了进一步的理解。参考文献1刘其明.汇编语言程序设计教程. 徐
9、州:中国矿业大学出版社, 2010.11附 录附录 源程序清单in16 macro ;完成从键盘接受二个数并转换为十六制数,第一个数由si指向,第二个数存放在bx中 lea dx,pr ;dx指向pr换行call output ;lea dx,input1 ;dx指向input1,提示输入第一个数call output call input ;把输入的数存放在bx中lea si,result ;si指向resultmov si,bx ;把第一个十六制数存入result的第一个位置lea dx,pr ;dx指向pr,换行call output lea dx,input2 ;dx指向input2,
10、提示输入第一个数call output call input ;把输入的数存放在bx中endm ;宏结束data segment ;数据段buf db ,0dh,0ahdb *- welcome to calculator system -*,0dh,0ahdb *-1:add-2:sub-3:mul-4:div-0:quit-*,0dh,0ahdb *- 2011*6*21-*,0dh,0ahdb 0dh,0ah,please input the choose number:,$ input1 db please input the first number xiao yu 4 wei:,$
11、input2 db please input the second number xiao yu 4 wei:,$result dw ?,? ;存放键盘输入的两个十六制数wro db you input the number is wrong,please input again:,0dh,0ah,$; pr db 0dh,0ah,$ ;将光标移到下一行起始位置pr1 db a + b=$pr2 db a - b=$pr3 db a * b=$pr4 db a / b=$pr5 db .$pr6 db are you sure exit?(y/n)$ data ends ;数据段落定义结束co
12、de segmentmain proc far ;主函数assume cs:code ,ds:datastart:mov ax,datamov ds,axlea dx,buf ;dx指向buf换行call output ;调用显示字符串函数换行sub ax,ax ;ax清零call choose ;调用选择函数jmp start ;跳转到startret main endpinput proc near ;定义input函数,就是将从键盘输入的数按原十六进制数存放在bx中mov bx,0 ;bx清零newchar:mov ah,1 int 21h ;接受键盘输入一个字符cmp al,0dh ;
13、输入的字符与回车比较je exit ;是回车就结束 cmp al,a ;与a比较jae h0 ;大于等于就跳转到h0 cmp al,0 ;与0比较jae h1 ;大于等于就跳转到h1 h0:sub al,37h ;由于41-a=37,完成把字母字符转换成对应的十六进制数jmp addto ;跳转到addtoh1:sub al,30h ;把0到9的字符转换成对应的十六进制数jmp addto ;跳转到addto addto: mov cl,4 ;相当于让bx乘以16shl bx,cl ;将bx逻辑左移mov ah,0 ;将ax清零add bx,ax ;ax+bx送到bxjmp newchar ;
14、跳转到newchar,把第二个输入的字符存放到bx的第二位exit: retinput endpoutput proc near ;显示字符串函数mov ah,09hint 21hretoutput endpchoose proc near ;选择函数mov ah,1 ;从键盘接受一个数int 21hcmp al,1 ;与1比较je yes1 ;等于1就跳转到yes1,进行加法cmp al,2 ;与1比较je yes2 ;等于2就跳转到yes2,进行减法cmp al,3 ;与1比较 je yes3 ;等于3就跳转到yes2,进行乘法cmp al,4 ;与1比较je yes4 ;等于4就跳转到y
15、es2,进行除法cmp al,0 ;与0比较je exit1 ;等于4就跳转到exit1,结束程序call wrong ;如果不是0到4之间的数就提示出错exit1: lea dx,pr ;dx指向pr换行call output lea dx,pr6 ;dx指向pr6,确认是否退出call output mov ah,1 ;从键盘接受一个数int 21hcmp al,y ;与y比较je exit0 ;不是y就看是否为ycmp al,y ;与y比较jne start ;不是y就跳转到startexit0:mov ah,4ch ;结束本程序int 21hyes1:call jia ;调用jia函数
16、jmp start ;调用完之后跳转到startyes2:call jian ;调用jian函数jmp start ;调用完之后跳转到startyes3:call cheng ;调用cheng函数jmp start ;调用完之后跳转到startyes4:call chu ;调用chu函数ret choose endp ;选择函数结束wrong proc near ;报错函数lea dx,pr ;dx指向pr换行lea dx,wro ;dx指向wro,提示输入有错,请重新输入jmp start ;跳转到startret wrong endp ;报错函数结束jia proc near ;加法函数i
17、n16 ;调用宏,接受键盘输入的两个十六进制数,第一个数由si指向,第二个数存放在bx中 add bx,si ;把第一个数加第二个数存放到bx中lea dx,pr ;dx指向pr,换行call output lea dx,pr1 ;dx指向pr1,显示a + b=call output call outbx ;调用显示bx寄存器的内容函数retjia endp ;加法结束jian proc near ;减法函数in16 ;调用宏,接受键盘输入的两个十六进制数,第一个数由si指向,第二个数存放在bx中 sub bx,si ;第二个数减第一个数,结果存放到bx中neg bx ;对结果取反后才是a-
18、b的值,才是第一个数减去第二个数lea dx,pr ;dx指向pr,换行call output lea dx,pr2 ;dx指向pr2,显示a - b=call output call outbx ;调用显示bx寄存器的内容retjian endp ;加法函数结束cheng proc near ;乘法函数in16 ;调用宏,接受键盘输入的两个十六进制数,第一个数由si指向,第二个数存放在bx中 mov dx,0 ;把dx清零mov ax,bx ;把第二个数赋给ax mul word ptrsi ;ax乘si并把结果存放到dx,ax中,是字的操作mov bx,ax ;将ax赋给bxpush bx
19、 ;将bx压栈,显示下面dx的内容时要将dx的值赋给bxpush dx ;将dx压栈,因为下面要换行输出,会改变dx的值lea dx,pr ;dx指向pr,换行输出call output lea dx,pr3 ;dx指向pr3,显示a * b=call output pop dx ;将dx出栈,要将做乘法后dx的内容显示出来mov bx,dx ;把dx给bxcall outbx ;显示dx的内容pop bx ;将bx出栈call outbx ;显示ax的内容retcheng endp ;乘法函数结束chu proc near ;除法函数in16 ;调用宏,接受键盘输入的两个十六进制数,第一个数si指向,第二个数存放在bx中mov ax,si ;将第一个数赋给axmov dx,0 ;将dx清零div bx ;ax除bx,结果存放到dx,ax,dx存放余数,ax存放商push dx ;压栈
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 以考促学题目与答案
- 统计概率常见大题及标准答案解析
- 工业仓储考卷题目与答案详情
- 关于痔疮的多项选择题及答案解析
- 2026年起重指挥作业人员考试练习题【含答案】
- 《圆的认识(一)》课件
- ISO 12614-132021 道路车辆.液化天然气燃料系统部件.第13部分油箱压力控制调节器标准立项发展报告
- ISO 7299-22021 柴油发动机泵的端部安装法兰第2部分共轨燃油喷射系统用高压供油泵标准立项发展报告
- 鱼我所欲也考题及答案
- 物理透镜知识检测测试题及答案
- 2026年泌尿外科出科试卷及答案
- 2026小学数学北师大版新教材培训:四至六年级教材解析
- AI原生数据平台研究报告(2026年)(2026.6)
- 2026年成都玉林紫荆初一入学数学分班考试真题含答案
- 工程预应力张拉与灌浆质量控制措施
- 一氧化二氮的理化性质与危险特性培训
- 2026年江苏省安全员C2证(土建安全员)考试题库及答案
- DB11-T 1610-2026 民用建筑信息模型深化设计建模细度标准
- 2026年巨量本地推初级题库
- 保安员监控岗工作制度
- (正式版)DB36∕T 1297-2020 《城市消防物联网大数据应用平台物联设施设备接口规范》
评论
0/150
提交评论