汇编语言课程设计四则运算计算器.._第1页
汇编语言课程设计四则运算计算器.._第2页
汇编语言课程设计四则运算计算器.._第3页
汇编语言课程设计四则运算计算器.._第4页
汇编语言课程设计四则运算计算器.._第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、微机原理实验报告汇编语言课程设计报告(2012 - 2013年度第1学期)实验名称:实现加减乘除四则运算的计算器专 业生物医学工程学生姓名周炳威班级 B100904学号 B10090406指导教师乐洋实现加减乘除四则运算的计算器1实验目的深化学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高 分析问题、解决问题的综合应用能力。通过使用汇编语言设计实现简单计算器,以 此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调 用等汇编语言知识的有效运用2实验内容课题名称:实现加减乘除四则运算的计算器主要功能:实现一个简单的计算器,要求:编写一个程序,每运行一次可执行

2、程序,可以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有 加、减、乘、除四项运算功能。3实现方法本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程 序,每运行一次可执行程序,可以实现数的加减乘除四则运算。由自己调用中断输 入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是 加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输 入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用 什么样的方式进行输出,如何实现清屏等也是要解决的问题。第一步,用INT 21H的1号功能调用来进行输入。利用1号功能调用来

3、输入, 即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个数的运算, 先认定输入的格式为1234+5678=或者1111*2222=,当然如果输入不是这样的格式 计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储, 当输入的并非格式里所要求的字符时则报错。第二步,设计程序进行判断所输入的算式是做加法运算、减法运算、乘法运算 还是除法运算,即判断输入的运算符是 +号、-号、* 号、/号中的哪 一个,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来与加减 乘除四个运算符号进行比较,和哪一个运算符号一样就调用相对应的运算模块进行 计算。第三步,根据计算器程

4、序所要实现的功能完成各个功能模块。设计程序主体部 分,根据主体部分所需的功能模块对各个子模块一一进行设计编写。子模块中包含 有:do_add加法运算模块,do_sub减法运算模块,do_mul乘法运算模块,do_div 除法运算模块,in put输入模块等。最后还要对这个简易计算器进行功能完善。为了使程序符合我们使用者的操作 习惯,设计当用户根据提示信息输入一个算式后,按下enter键或是=符号键时,程序依据输入的算式进行计算,并将结果显示在屏幕上。如果用户输入错误, 则返回,提示信息让用户重新输入算式,当用户按下Q或q键时退出程序。在各个子功能模块设计好的情况下,通过主题模块的合理调用,最终

5、实现一个具有简单运 算功能的计算器。3.2程序流程图及说明此程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时 也是我编写的程序的一个总体的框架。程序流程图说明:通过流程图,可以看出程序开始运行时,首先输出提示语句, 当用户输入后,程序根据所输入的内容进行判断,通过判断的结果来决定调用哪个 功能模块,首先要判断输入的字符是否为 Q或q,若是,则退出程序,不是则继续 输入。还要判断输入的是否为 0-9, + , -*/这些字符,若不是会报错,是则将根据运算符号调用相应的功能模块完成运算。最后将运算的结果显示在 屏幕上,并返回主题程序,使用户可以重新输入。21源程序清单B_PEQU

6、 BYTE PTRW_PEQU WORDPTRD_PEQU DWORDPTRCODESEGMENTASSUME CS:CODE,DS:CODEORG 100H;主程序开始NEWSTAR:JMP STAREVENNUM1DW 0,0NUM2DW 0,0NUM3DW 0,0JGV4DW 0,0YSFLABEL WORDYSF1DB 0YSF2DB 0JUVDB 0UVDB 0;使DS:SI指向第一有效字符OVERS LABEL NEARCLDPUSH AXOVERS1:LODSBCMP AL,JZ OVERS1CMP AL,9JZ OVERS1DEC SICMP AL,13POP AXRET;输出

7、一个制表符TABLABEL NEARMOV AL,9JMP SHORT DISP;输出一个回车换行符CRLFLABEL NEARMOV AL,13CALL DISPMOV AL,10;显示一个字符DISPLABEL NEARPUSH AXPUSH DXMOV AH,2MOV DL,ALINT 21HPOP DXPOP AXRET;检查是否为运算符ISYSFLABEL NEARCLDLODSBCALL ISJJJZ ISYSF1CALL ISIIJZ ISYSF1 DEC SIISYSF1:RET;检查是否是加减运算ISJJLABEL NEARCMP AL,+JZ ISYSF1CMP AL,-R

8、ET;检查是否为乘除运算ISIILABEL NEARCMP AL,*JZ ISYSF1CMP AL,/JZ ISYSF1CMP AL,RET;数据输出;CX=10十进制;CX=16 十六进制DOUTLABEL NEARPUSH AXPUSH BXPUSH DXPUSH BPXOR BP,BPD0UT1:INC BPPUSH AXMOV AX,DX XOR DX,DX DIV CXMOV BX,AXPOP AXDIV CXPUSH DXMOV DX,BX OR BX,AX JNZ DOUT1DOUT2:POP AXADD AL,0CMP AL,9JBE DOUT3ADD AL,A-9-1DOUT

9、3:CALL DISPDEC BPJNZ DOUT2POP BPPOP DXPOP BXPOP AXRET;输入数据在DX:A)中返回;CX=0数据为10进制;CX#0数据为16进制DATELABEL NEARPUSH BXPUSH BPPUSH DIXOR AX,AXXOR DX,DXDATE1:MOV DI,AX LODSBCMP AL,0JB DATE7CMP AL,9JA DATE6DATE2:AND AX,0FHSHL DI,1RCL DX,1MOV BX,DIMOV BP,DXSHL DI,1RCL DX,1SHL DI,1RCL DX,1JCXZ DATE3SHL DI,1RCL

10、 DX,1Jmp short DATE4DATE3:ADD DI,BXADC DX,BPDATE4:ADD AX,DIADC DX,0JMP DATE1DATE5:ADD AL,9JMP DATE2DATE6:JCXZ DATE7CMP AL,AJB DATE7CMP AL,FJBE DATE5CMP AL,aJB DATE7CMP AL,fJBE DATE5DATE7:MOV AX,DIDEC SIOR DI,DXPOP DIPOP BPPOP BXRET;数据1与数据2根据YSF进行加减运算JSJJLABEL NEARMOV AX,NUM2MOV DX,NUM2+2CMP YSF1,+JZ

11、 JSJJ1SUB NUM1,AXSBB NUM1+2,DXJMP SHORT JSJJ2JSJJ1:ADD NUM1,AXADC NUM1+2,DXJSJJ2:RET;数据1与数据2根据YSF进行乘除运算JSII1LABEL NEARMOV BX,OFFSET NUM1JMP SHORT JSII2 1;数据2与数据3根据YSF2进行乘除运算JSII2LABEL NEARMOV BX,OFFSET NUM2JSII2_1:DB 66HMOV AX,BXDB 66HMOV CX,BX+4CMP YSF2,*JNZ JSII2_2DB 66HIMUL CXJMP SHORT JSII2_3JSI

12、I2_2:DB 66HCWDDB 66HIDIV CXCMP YSF2,/JZ JSII2_3DB 66HXCHG DX,AXJSII2_3:DB 66HMOV BX,AXRET;显示结果XUJGLABEL NEARMOV AX,JGV4MOV DX,JGV4+2MOV CX,10CMP UV,10JZ XUJG0MOV CX,16XUJGO:TEST DX,8000HJZ XUJG1CMP UV,10JZ XUJG2CALL DOUTXUJG2:NOT AXNOT DXADD AX,1ADC DX,0PUSH AXCMP UV,10JZ XUJG3MOV AL,CALL DISPMOV AL

13、,(CALL DISPXUJG3:MOV AL,-CALL DISPPOP AXCMP UV,10JZ XUJG1CALL DOUTMOV AL,)CALL DISPRETXUJG1:CALL DOUTRET;计算结果放入DX:AX中JSJGLABEL NEARCALL JSJJMOV AX,NUM1MOV DX,NUM1+2RET;从DS:SI处取一个数据LOADATE LABEL NEARLODSBCMP AL,(JZ LOADATE1DEC SIPUSH CXXOR CX,CXCMP UV,10JZ LOADATE0INC CXLOADATE0:CALL DATEPOP CXRETLOA

14、DATE1:PUSH NUM1PUSH NUM1+2PUSH NUM2PUSH NUM2+2PUSH YSFINC JUVMOV JGV4,0MOV JGV4+2,0;进行四则运算SZYSLABEL NEARCALL ISYSFJZ SZYS2CALL LOADATEMOV NUM1,AXMOV NUM1+2QXSZYS1:XOR AX,AXMOV NUM2,AXMOV NUM2+2,AXCALL ISYSFJZ SZYS3JNZ SZYS6SZYS2:PUSH AX;取16进制数;取数据放入DX:AX中;保存数据1数据2及运算符;结果值清零;首字符是运算符?;不是,取数并保存;数据2清零;下

15、个是运算符?;将结果作为数据1MOV AX,JGV4MOV NUM1,AXSZYS3:MOV AXJGV4+2MOV NUM1+2,AXPOP AXMOV YSF1,ALMOV YSF2,ALCALL ISJJJZ SZYS4;是加减运算转CALL LOADATEMOV NUM2,AXMOV NUM2+2QX;取数据2算 算CALL JSII1;数据1与数据2根据YSF进行乘除运SZYS4:JMP SZYS1;结果保存在数据1中SZYS4_1:CALL LOADATEMOV NUM2,AXMOV NUM2+2QXCALL ISYSFJNZ SZYS6;取数据2并保存CALL ISJJ;运算符2

16、是加减运算?JNZ SZYS5PUSH AX;不是转算 算CALL JSJJ;数据1与数据2根据YSF14行加减运POP AX;结果保存在数据1中SZYS5:MOV YSF1,ALJMP SZYS4;保存新的运算符MOV YSF2,AL;保存运算符2CALL LOADATEMOV NUM3,AXMOV NUM3+2QX;取数据3算算CALL JSII2;数据2与数据3根据YSF2t行乘除运JMP SZYS4 1结果保存在数据2中SZYS6:MOV CL,ALCMP AL,13JNZ SZYS9SZYS7:CALL JSJGCMP JUV,0JZ SZYS8DEC JUVPOP YSFPOP N

17、UM2+2POP NUM2POP NUM1+2POP NUM1RETSZYS8:CMP CL,)JZ SZYS10MOV JGV4,AXMOV JGV4+2QXJNZ SZYS12SZYS9:CMP AL,)JNZ SZYS11INC SIJMP SZYS7SZYS10:MOV NUM1,AXMOV NUM1+2QXJMP SZYS1SZYS11:STCRETSZYS12:CLCRET;数制处理UVILLABEL NEARPUSH SIUVIL1:LODSBCMP AL,JZ UVIL2CMP AL,9JZ UVIL2CMP AL,13JZ UVIL4JNZ UVIL1UVIL2:MOV BX

18、,SI CALL OVERS JZ UVIL3LODSWCALL OVERSPOP SIJNZ SZYS11CMP AX,O1JNZ SZYS11PUSH SIMOV UV,10UVIL3:MOV AL,13MOV BX-1,ALUVIL4:POP SICLCRET;预置结果YVJGLABEL NEARMOV AH,52HINT 21HMOV AX,ES:BX-2MOV DS,AXMOV AX,DS:0CHMOV CS:JGV4,AXMOV AX,DS:0EHMOV CS:JGV4+2,AXPUSH CSPOP DSPUSH CSPOP ESRET;保存结果BCJGLABEL NEARMOV AH,52HINT 21HMOV AX,ES:BX-2MOV DS,AXMOV AX,CS:JGV4MOV DS:0CH,AXMOV AX,CS:JGV4+2MOV DS:0EH,AXPUSH CSPOP DSPUSH CSPOP ESRETSTAR:MOV SI,81HCLDCALL OVERSJNZ STAR1STARO:MOV DX,OFFSET MESS1JMP STAR

温馨提示

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

评论

0/150

提交评论