汇编语言简单计算器程序实验报告_第1页
汇编语言简单计算器程序实验报告_第2页
汇编语言简单计算器程序实验报告_第3页
汇编语言简单计算器程序实验报告_第4页
汇编语言简单计算器程序实验报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课程设计说明书题目: 简单计算器 院 系: 专业班级: 学 号: 学生姓名: 指导教师: 2010年12月31日安徽理工大学课程设计(论文)任务书 计算机科学与工程学院 硬件 教研室学 号 学生姓名 专业(班级) 设计题目题目一:判断闰年题目二: 简单计算器题目三: 代码转换程序题目四:字符图形程序题目五: 学生成绩管理题目六: 打字练习设计技术参数1 熟悉汇编指令、宏汇编语言的编程方法 2 bios中断调用、系统功能中断调用方法 3 磁盘文件、及文件内容操作设计要求题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理而设计的,是对所学课程知

2、识较为系统的应用。 由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善的程序。 另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。 工作量1. 完成所选题目的软件设计;2. 课程设计说明书1000字(不包括程序源代码)左右。工作计划第1次熟悉软件环境。第2次绘制程序流程图。第3次用编写程序。第4次用调试运行程序。第5次编写课程设计说明书参考资料1 李敬兆.8086/8088和基于arm核汇编语言程序设计.合肥:中国科技

3、大学出版社,20082 洪志全,罗省贤.汇编语言程序设计教程.北京:电子工业出版社,2004指导教师签字教研室主任签字 2010年 12月 17 日安徽理工大学课程设计(论文)成绩评定表指导教师评语:成绩: 指导教师: 年 月 日摘 要本次课程设计的题目是用汇编语言实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器

4、。用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,设计各个功能模块。当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。关键词:计算器,汇编语言,四则运算,功能模块,调用目录1设计目的12概要设计22.1 系统总体分析22.2 程序流程图及说明33详细设计53.1 主模块及子模块说明53.2 各模块详细设计74程序调试114.1 运行界面分析114.2 调试过程及分析115心得体会135.1 设计体会135.2 系统改进13参考文献15151设计目的汇编语言是计算机能够提供给用户使用的最快而又最有效的语言。同时

5、,汇编语言也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。因而,对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的。至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可。由于汇编语言如此地接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。用汇编语言编写的程序速度通常要比高级语言快几倍、几十倍、甚至成百上千倍,解释语言其程序速度更无法与汇编语言程序同日而语。本次课程设计的题目是用汇编语言实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。通过使用汇编语言设

6、计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用。本次课程设计以实现一个基本功能完善,界面友好,操作简便易行的计算器为最终目的。通过对具有加减乘除基本功能的计算器的设计实现,学会使用汇编语言实现输入输出模块的设计,模块合理调用的设计,加减乘除运算的判断以及退出程序的判断的设计。通过对各种指令的合理使用,熟悉并加深对各种指令的用法。学会使用汇编语言设计各个功能模块。当实现各个程序模块后,学会通过程序的调用最终实现一个具有基本计算功能的简单计算器。2概要设计2.1 系统总体分析本次汇编语言课程设计的最终目的是要实现一个简单计算器

7、,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。比如,十进制数的加减乘除四则运算。我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。第一步,我要解决的是输入时是用int 21h的10号功能调用还是用int 21h的1号功能调用来

8、进行输入。若是用10号功能调用则我们进行多字符输入,可以将输入的字符都存储到一个数据区里面,并调用9号功能调用输出存进去的字符,这种输入和输出的方案是可行的。我选择的是利用1号功能调用来输入,即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个数的运算,先认定输入的格式为1234+5678=或者1111*2222=,当然如果输入不是这样的格式计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储,当输入的并非格式里所要求的字符时则报错。第二步,设计程序进行判断所输入的算式是做加法运算、减法运算、乘法运算还是除法运算,即判断输入的运算符是+号、-号、*号、/号中的哪一个

9、,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来与加减乘除四个运算符号进行比较,和哪一个运算符号一样就调用相对应的运算模块进行计算。第三步,根据计算器程序所要实现的功能完成各个功能模块。设计程序主体部分,根据主体部分所需的功能模块对各个子模块一一进行设计编写。子模块中包含有:do_add加法运算模块,do_sub减法运算模块,do_mul乘法运算模块,do_div除法运算模块,input输入模块等。最后还要对这个简易计算器进行功能完善。为了使程序符合我们使用者的操作习惯,设计当用户根据提示信息输入一个算式后,按下enter键或是=符号键时,程序依据输入的算式进行计算,并将结果显示

10、在屏幕上。如果用户输入错误,则返回,提示信息让用户重新输入算式,当用户按下q或q键时退出程序。在各个子功能模块设计好的情况下,通过主题模块的合理调用,最终实现一个具有简单运算功能的计算器。2.2 程序流程图及说明此程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。程序流程图说明:通过流程图,可以看出程序开始运行时,首先输出提示语句,当用户输入后,程序根据所输入的内容进行判断,通过判断的结果来决定调用哪个功能模块,首先要判断输入的字符是否为q或q,若是,则退出程序,不是则继续输入。还要判断输入的是否为0-9,+,-,*,/这些字符,若不是会报错,

11、是则将根据运算符号调用相应的功能模块完成运算。最后将运算的结果显示在屏幕上,并返回主题程序,使用户可以重新输入。程序流程图如图2-1所示:程序开始输入一个算式q/q?09+-*/?存储数据判断运算符号调用运算功能模块输入出错nyy 输出提示语句退出yny按下enter或=键显示结果图2-1 程序流程图3详细设计3.1 主模块及子模块说明主题模块实现变量的定义,提示输入信息的显示,调用各个功能子模块,判断输入的内容是否符合要求,如果符合要求,则按照用户所输入的运算符即+-*/来调用加减乘除等子模块完成运算。当用户键入enter键或者=键时将结果显示在屏幕上。在此,对变量的定义类型进行说明,因为本

12、次课程设计所要求设计的计算器要能够对四位数进行加减乘除运算,所以我使用dd伪指令将x、y、z三个变量定义为双字变量。子模块说明:主要的子模块是input子模块,功能是输入;do_add子模块,功能是完成加法运算;do_sub子模块,功能是完成减法运算;do_mul子模块,功能是完成乘法运算;do_div子模块,功能是完成除法运算。其它模块将在模块详细设计部分中进行说明。程序主题部分源代码如下:data segmentx dd 0y dd 0z dd 0tmp dw 0ten dw 10op db 0message db input a suanshi(input q exit):,13,10,

13、$ ;提示用户输入算式。data endsassume cs:code, ds:datacode segmentstart:mov ax, datamov ds, axnx0:mov ah, 9lea dx, message ;dx指向message,提示输入算式。 int 21h ;dos系统功能调用。call do_cal ;调用do_cal。call show ;调用show。jmp nx0 ;转移到nx0。done:mov ax, 4c00h ;将4c00h送给ax,即返回dos。int 21h ;dos系统功能调用。do_cal:call input ;调用input。fistp x

14、 ;将输入的数以十进制的形式存入x中。cmp al, q ;将al和q进行比较,即判断al是否为q。jz done ;如果输入的是q则退出程序,返回dos。cmp al, q ;将al和q进行比较,即判断al是否为q。jz done ;如果输入的是q则退出程序,返回dos。mov op, al ;将al送给op。call input ;调用input子程序段。fistp y ;将输入的数以十进制的形式存入y中。cmp op, + ;判断op是否为“+”。jnz nx1 ;如果不是“+”且不为零,则跳转到nx1。call do_add ;调用do_add。jmp nx4 ;转移到nx4。nx1:

15、 ;nx1子程序段定义cmp op, - ;判断op是否为“-”。jnz nx2 ;如果不是“-”,则跳转到nx2。call do_sub ;调用do_sub。jmp nx4 ;转移到nx4。nx2: ;nx2的定义。cmp op, * ;判断op是否为“*”。jnz nx3call do_mul ;调用do_mul。jmp nx4nx3:cmp op, / ;判断op是否为“/”。jnz nx4call do_div ;调用do_div。nx4:ret ;子程序返回。3.2 各模块详细设计完成输入功能的模块input模块。int 21h的01号功能调用可以直接接收键入的字符,当有键按下时,首

16、先检查是否是ctrl+break,若是,则执行退出命令;否则将键值送入al寄存器并回显。input模块源代码如下:input:finitfldznx10:mov ah, 1 ;01号功能调用。int 21hsub al, 0cmp al, 0jl done1cmp al, 9jg done1fimul tenxor ah, ahmov tmp, axfiadd tmpjmp nx10done1:add al, 0ret ;子程序返回。设计完成加法运算功能的模块do_add模块源代码如下:do_add:fild xfiadd yfimul tenfimul tenfistp zret ;子程序返

17、回。 设计完成减法运算功能的模块do_sub模块源代码如下:do_sub:fild xfisub yfimul tenfimul tenfistp zret ;子程序返回。 设计完成乘法运算功能的模块do_mul模块源代码如下:do_mul:fild xfimul yfimul tenfimul tenfistp zret ;子程序返回。 设计完成除法运算的功能模块源代码如下:do_div:fild xfimul tenfimul tenfidiv yfistp zret ;子程序返回。 设计init模块源代码如下:init:finitfstcw tmpmov ax, tmpor ax, 0c

18、00hmov tmp, axfldcw tmpret ;子程序返回。设计完成show模块为:show:call crlfmov ah, 2mov dl, =int 21hmov dx, word ptr z+2 cmp dx, 0jge posmov dl, -int 21hcall initfldzfld1fsubfild zfmul st(1), st(0)fistp zfistp z设计完成pos模块如下:pos:call initfild tenfimul tenfild zfpremfild zfsub st(0), st(1)fidiv tenfidiv tenfistp zfis

19、tp tmpmov ax, tmppush axcall initfild tenmov ax, word ptr zcmp ax, 0jnz nx8cmp ax, word ptr z+2jnz nx8mov ah, 2mov dl, 0int 21hjmp nx9 设计完成crlf模块如下:crlf:mov ah, 2mov dl, 13int 21hmov dl, 10int 21hret ;子程序返回。code endsend start4程序调试4.1 运行界面分析将源程序输入编辑程序中,检查无误后经汇编、连接后装入系统运行界面如图4-1所示:图4-1 运行界面 程序的运行界面显示成

20、功,屏幕上显示“input a suanshi(input q exit):”提示用户输入一个算式。4.2 调试过程及分析对程序源代码进行功能调试和功能验证。程序代码运行成功后,分别检验测试其加、减、乘、除功能,并对结果进行分析。再者,要对当用户输入q或q时,退出程序的功能进行检测。加法运算,计算1122+1658,如图4-2所示:图4-2 加法运算 减法运算,计算2345-2533,如图4-3所示:图4-3 减法运算乘法运算,计算1233*3000,如图4-4所示:图4-4 乘法运算除法运算,计算98/10,如图4-5所示:图4-5 除法运算当用户输入q或q时,程序退出,如图4-6所示:图4

21、-6 退出程序测试5心得体会5.1 设计体会经过这次课程设计,我学到了很多东西,其中包括知识方面的,还有其他方面的。首先让我认识到,做好一件事,做成功一件事是不容易的,但是你只要坚持不懈的努力,不断的发挥自己的智慧去思索去探究,你会欣慰的发现自己正向着成功一步步迈进。这次课程设计使我对汇编语言程序设计这门课程有了进一步的理解和认识,使我学到了许多编程语言以及算法设计方面的知识,同时也锻炼了我的耐心和意志,增长了我的实践能力。这次课程设计我所选的题目是使用汇编语言设计一个具有加减乘除基本运算功能的简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。通过使用汇编语言设计实

22、现简单计算器,我进一步了解和掌握了对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用。本次课程设计以实现一个基本功能完善,界面友好,操作简便易行的计算器为最终目的,我通过对具有加减乘除基本功能的计算器的设计实现,学会了使用汇编语言实现输入输出模块的设计,模块合理调用的设计,加减乘除运算的判断以及退出程序的判断的设计。在汇编语言程序设计中,我通过对各种指令的合理使用,熟悉并加深了对各种指令的用法,同时也学会使用汇编语言设计各个功能模块。当我实现各个程序模块后,学会了通过程序的调用最终实现一个具有基本计算功能的简单计算器。在本次课程设中,我遇到了很多问题。例如,在计完成具有输入功能的模块input模块时我就遇到了困难。通过一番努力后我发现利用int 21h中的01号功能调用可以较好的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论