汇编语言程序设计报告.doc
汇编语言课 程 设 计报 告专 业 计算机科学与技术学 生 姓 名 张竹青班 级 Z计算机151学 号 1560704132任 课 老 师 王志宏完 成 日 期 2017年12月29日实现加减乘除四则运算的计算器目录1 概 述 .11.1 设计目的 .11.2 设计内容 .12 系统需求分析 .12.1 系统目标 .12.2 主体功能 .12.3 开发环境 .23 系统概要设计 .23.1 系统的功能模块划分 .23.2 系统流程图 .34 系统详细设计 .44.1 界面设置 .44.2 选择算法设置 .44.3 十进制转换设置 .45 测试 .55.1 测试方案 .55.2 测试结果 .56 小结 .6参考文献 .7实现加减乘除四则运算的计算器1实现加减乘除四则运算的计算器1 概 述 1.1 设计目的使用汇编语言,通过实现简单计算器的一般功能,如加、减、乘、除的计算来了解并掌握 DOS系统功能的调试方法,学会画出编程的具体流程图,同时在程序设计过程中熟悉各种指令的应用和意义,以及如何进行上机编辑、汇编、连接和调试。本课程设计也是对课堂上所学的基本理论知识和程序设计方法的巩固和深化,提高我们的编程思想、分析问题和解决问题的综合应用能力,能够编写较复杂的应用程序,最终达到熟练地掌握结构化程序设计技术和编写汇编源程序的基本方法的目的。1.2 设计内容设计一个能实现加、减、乘、除计算的程序,要求该程序接受从键盘输入的十六进制数,当程序执行时需在文件名后直接跟上计算表达式,每当读到一个有效的表达式时对表达式进行相应的运算后,输出用十进制数或十六进制数表示的运算结果,如在命令提示符下执行结果如下:c:tasm>js 3+252 系统需求分析2.1 系统目标本次汇编语言课程设计的最终目的是要实现一个简单的加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。具体功能如下:(1)调用中断把要做运算的两个数输入到屏幕上并用程序将他们存储起来(2)判断用户所输入的运算是四则运算中的哪一种运算(3)判断运算过程中是进位还是借位(4)选择用何种输出方式(5)实现清屏2.2 主体功能要求该程序接受的是十六进制数,执行相应的计算后,计算结果以十六进制数或十进制数输出。本设计的使用说明如下:(1)按照提示选择数字 1,2,3,4(2)1:ADD 加法(3)2:SUB 减法实现加减乘除四则运算的计算器2(4)3:MUL 乘法(5)4:DIV 除法(6)输入一个小于四位的数字,回车(7)再输入一个小于四位的数字,回车(8)显示结果(9)退出按 0,选择 Y或 N2.3 开发环境TASM5.0 集成环境3 系统概要设计3.1 系统的功能模块划分本设计实现的模块图如图 3-1所示图 3-1 概要模块(1)界面设置主要实现确定界面样式的功能,以菜单形式显示。(2)选择算法设置用于选择加、减、乘、除法来进行运算。(3)十进制转换设置应用十进制的转换算法来处理加、减、乘、除法四则运算。四则运算计算器程序设计界面设置 选择算法设置 十进制转换设置实现加减乘除四则运算的计算器33.2 系统流程图图 3-2四则运算计算器执行过程流程图开始输入选择键 XX=1? 十六进制加法否是X=2? 十六进制减法十六进制除法十六进制乘法是否否否NX=3?Exit?X=4?X=0?是是Y结束退出程序是否实现加减乘除四则运算的计算器44 系统详细设计4.1 界面设置通过定义数据段,利用 09H显示出功能列表。通过定义数据段,以字符串的形式输入每个提示信息,利用 09H键盘输入并回显命令显示每一个功能提示,是计算器的功能列表有序清晰的显示在屏幕上。4.2 选择算法设置首先选择要进行的四则运算,若选择 1,则进行加法;若选择 2,则进行减法;若选择 3,则进行乘法;若选择 4,则进行除法。加法:先输入第一个小于 4位十六进制数存入 SI中,在输入第二个小于 4位十六进制数存入 BX中,然后显示 BX 和SI中的内容相加存在 BX中。减法:先输入第一个小于 4位十六进制数存入 SI中,在输入第二个小于 4位十六进制数存入 BX中,然后显示 BX 和SI中的内容相减存在 BX中,然后用 NEG来求反,即为第一个数减去第二个数的差,显示 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得到第一个商和余数,此第一个余数就是所求的十六进制数的各位,再用第一个商除以 16,得到第二个商和余数,此第二个余数就是所求十六进制数的十位,重复这一过程直至商为 0,此时的余数就是所求十六进制数的最高位。在内存中分配一缓冲区,用来存放以上分离出来的使十进制数的每一位,然后再逐个转换成 ASCII码,转换成 ASCII码的过程很简单,就是给每个十六进制位加上 30H即可,最后送显示器输出。实现加减乘除四则运算的计算器55 测试5.1 测试方案对程序源代码进行功能调试和功能验证。程序代码运行成功后,分别检验测试其加、减、乘、除功能,并对结果进行分析。当用户选择 0时,输入 Y或 N决定是否退出程序。5.2 测试结果正确输出:加、减、乘、除的运算结果分别如图 5-1、图 5-2、图 5-3、图 5-4所示图 5-1 加法的运算的结果截图图 5-2 减法的运算的结果截图实现加减乘除四则运算的计算器6图 5-3 乘法的运算的结果截图图 5-4 除法的运算的结果截图测试结束后,退出程序,如图 5-5所示:图 5-5 退出程序6 小结本次课程设计是运用汇编语言设计一个计算器,其主要功能是实现加减乘除四则基本运算,整个程序中主要分为:输入表达式,加法,减法,乘法,除法和以十六进制输出结果这几个部分。本程序基本实现了四则运算的功能,但是只能单独进行某一种运算,没有实现混合运算的效果,由于程序会产生溢出现象,所以在除法运算中不能运算较大的数。在编写过程中用到了很多基础知识,但是在程序运行时总会出现一些问题,由于汇编基础比较薄弱,所以有时会打错了程序代码,误解了知识点,不了解程序结构等,但是通过查阅资料,请教老师并和同学讨论,最终解决了所有问题,也成功的运行出了结果。通过本次课程设计,不仅加深了我对汇编程序设计的认识,也提高了改写程序代码和动手操作的能力,还有编程的基本习惯和开发系统时应注意的流程,同时也对各种指令有了进一步的理解。并且我发现一个好的汇编程序不仅要正确可行,还要有健壮性,当用户输入非法的数据,使运行环境改变时,程序能恰当地作出反应或进行处理,不会产生莫名奇怪的输出结果。因为完成设计的时间较短,并且对汇编语言知识比较生疏,设计之中难免有一些错误和不妥之处,同时也需要改进,所以真诚的希望尊敬的老师批评指正。实现加减乘除四则运算的计算器7参考文献1曹加恒.新一代汇编语言课程设计M.北京:高等教育出版社,20132杨路明.汇编语言程序设计M.长沙:中南大学出版社,20153王爽.汇编语言M.北京:清华大学出版社,2016实现加减乘除四则运算的计算器8附 录附录 源程序清单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,提示输入第一个数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:','$'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 ;数据段落定义结束