ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:30.90KB ,
资源ID:11455525      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11455525.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言课程设计四则运算计算器.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言课程设计四则运算计算器.docx

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

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

3、调用来进行输入。利用1号功能调用来输入, 即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个数的运算, 先认定输入的格式为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, + , - */这些字符,若不是会报错,是则将根据运算符号调用相应的功能模块完成运算。最后将运算的结果显示在 屏幕上,并返回主题程序,使用户

6、可以重新输入。源程序清单B_PEQU 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

7、 AL,13POP AXRET;输出一个制表符TAB LABEL 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,

8、+JZ ISYSF1CMP AL,-RET;检查是否为乘除运算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 DO

9、UT3ADD AL,A-9-1DOUT3: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,1JC

10、XZ DATE3SHL DI,1RCL 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

11、,NUM2+2CMP YSF1,+JZ 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 CXJ

12、MP SHORT JSII2_3JSII2_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

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

14、ALL DATEPOP CXRETLOADATE1:PUSH NUM1PUSH NUM1+2PUSH NUM2PUSH NUM2+2PUSH YSFINC JUVMOV JGV4,0MOV JGV4+2,0;进行四则运算SZYS LABEL 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及运算符;结果值清零;首字符是

15、运算符?;不是,取数并保存;数据2清零;下个是运算符?;将结果作为数据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

16、;取数据2并保存CALL ISJJ;运算符2是加减运算?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 S

17、ZYS8DEC JUVPOP YSFPOP NUM2+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 UVI

18、L4JNZ UVIL1UVIL2:MOV BX,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

19、;保存结果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 STAR4STAR1:CALL YVJGCALL UVILJB STAR0MOV SAVESP,SPCALL SZYSMOV SP,SAVESPMOV DX,OFFSET MESS2JB STAR4CALL CRLFCALL XUJGCALL BCJGMOV DX,OFFSET MESS3STAR4:MOV AH,9INT 21HINT 20HSAVESPDW 0MESS1DB13,10,Syn tax:,13,10DB JS vExpressi onMESS2DBError inexpressi on !$MESS3DB13,10,$CODEENDSEND NEWSTAR10,13,10,$

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1