欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:27118516       资源大小:458.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date汇编语言课程设计四则运算计算器.永磁同步电机( permanent magnet syn2汇编语言课程设计报告( 2012 - 2013 年度第 1 学期)实验名称:实现加减乘除四则运算的计算器专业生物医学工程学生姓名周炳威班级B100904学号B10090406指导教师乐洋-实现加减乘除四则运算的计算器1 实验目的 深化学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。通过使用汇编语言设计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用2 实验内容课题名称:实现加减乘除四则运算的计算器主要功能:实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。3 实现方法本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。第一步,用INT 21H的1号功能调用来进行输入。利用1号功能调用来输入,即把单个字符一个个的输入并存储到一个数据区里。我们要做的是两个数的运算,先认定输入的格式为1234+5678=或者1111*2222=,当然如果输入不是这样的格式计算出来的结果就不一定是我们想要的结果了。在存储的时候也是有选择的存储,当输入的并非格式里所要求的字符时则报错。第二步,设计程序进行判断所输入的算式是做加法运算、减法运算、乘法运算还是除法运算,即判断输入的运算符是+号、-号、*号、/号中的哪一个,因为输入的格式固定了,所以只需要把存进数据区的第三个字符拿来与加减乘除四个运算符号进行比较,和哪一个运算符号一样就调用相对应的运算模块进行计算。第三步,根据计算器程序所要实现的功能完成各个功能模块。设计程序主体部分,根据主体部分所需的功能模块对各个子模块一一进行设计编写。子模块中包含有:do_add加法运算模块,do_sub减法运算模块,do_mul乘法运算模块,do_div除法运算模块,input输入模块等。最后还要对这个简易计算器进行功能完善。为了使程序符合我们使用者的操作习惯,设计当用户根据提示信息输入一个算式后,按下enter键或是=符号键时,程序依据输入的算式进行计算,并将结果显示在屏幕上。如果用户输入错误,则返回,提示信息让用户重新输入算式,当用户按下Q或q键时退出程序。在各个子功能模块设计好的情况下,通过主题模块的合理调用,最终实现一个具有简单运算功能的计算器。3.2程序流程图及说明此程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。程序流程图说明:通过流程图,可以看出程序开始运行时,首先输出提示语句,当用户输入后,程序根据所输入的内容进行判断,通过判断的结果来决定调用哪个功能模块,首先要判断输入的字符是否为Q或q,若是,则退出程序,不是则继续输入。还要判断输入的是否为0-9,+,-,*,/这些字符,若不是会报错,是则将根据运算符号调用相应的功能模块完成运算。最后将运算的结果显示在屏幕上,并返回主题程序,使用户可以重新输入。程序开始输入一个算式Q/q?0f'+-*/?存储数据判断运算符号调用运算功能模块输入出错NYY 输出提示语句退出YNY按下Enter或=键显示结果 源程序清单B_P     EQU BYTE PTRW_P     EQU WORD PTRD_P     EQU DWORD PTRCODE    SEGMENTASSUME  CS:CODE,DS:CODE        ORG 100H;主程序开始NEWSTAR:        JMP STAR        EVENNUM1    DW 0,0NUM2    DW 0,0NUM3    DW 0,0JGV4    DW 0,0YSF     LABEL WORDYSF1    DB 0YSF2    DB 0JUV     DB 0UV      DB 0;使DS:SI指向第一有效字符OVERS   LABEL NEAR        CLD        PUSH AXOVERS1:        LODSB        CMP AL,' '        JZ OVERS1        CMP AL,9        JZ OVERS1        DEC SI        CMP AL,13        POP AX        RET;输出一个制表符TAB     LABEL NEAR        MOV AL,9        JMP SHORT DISP;输出一个回车换行符CRLF    LABEL NEAR        MOV AL,13        CALL DISP        MOV AL,10;显示一个字符DISP    LABEL NEAR        PUSH AX        PUSH DX        MOV AH,2        MOV DL,AL        INT 21H        POP DX        POP AX        RET;检查是否为运算符ISYSF   LABEL NEAR        CLD        LODSB        CALL ISJJ        JZ ISYSF1        CALL ISII        JZ ISYSF1        DEC SIISYSF1:        RET;检查是否是加减运算ISJJ    LABEL NEAR        CMP AL,'+'        JZ ISYSF1        CMP AL,'-'        RET;检查是否为乘除运算ISII    LABEL NEAR        CMP AL,'*'        JZ ISYSF1        CMP AL,'/'        JZ ISYSF1        CMP AL,''        RET;数据输出;CX=10 十进制;CX=16 十六进制DOUT    LABEL NEAR        PUSH AX        PUSH BX        PUSH DX        PUSH BP        XOR BP,BPDOUT1:        INC BP        PUSH AX        MOV AX,DX        XOR DX,DX        DIV CX        MOV BX,AX        POP AX        DIV CX        PUSH DX        MOV DX,BX        OR BX,AX        JNZ DOUT1DOUT2:        POP AX        ADD AL,'0'        CMP AL,'9'        JBE DOUT3        ADD AL,'A'-'9'-1DOUT3:        CALL DISP        DEC BP        JNZ DOUT2        POP BP        POP DX        POP BX        POP AX        RET;输入数据在DX:AX中返回;CX=0 数据为10进制;CX#0 数据为16进制DATE    LABEL NEAR        PUSH BX        PUSH BP        PUSH DI        XOR AX,AX        XOR DX,DXDATE1:        MOV DI,AX        LODSB        CMP AL,'0'        JB DATE7        CMP AL,'9'        JA DATE6DATE2:        AND AX,0FH        SHL DI,1        RCL DX,1        MOV BX,DI        MOV BP,DX        SHL DI,1        RCL DX,1        SHL DI,1        RCL DX,1        JCXZ DATE3        SHL DI,1        RCL DX,1        Jmp short DATE4DATE3:        ADD DI,BX        ADC DX,BPDATE4:        ADD AX,DI        ADC DX,0        JMP DATE1DATE5:        ADD AL,9        JMP DATE2DATE6:        JCXZ DATE7        CMP AL,'A'        JB DATE7        CMP AL,'F'        JBE DATE5        CMP AL,'a'        JB DATE7        CMP AL,'f'        JBE DATE5DATE7:        MOV AX,DI        DEC SI        OR DI,DX        POP DI        POP BP        POP BX        RET;数据1与数据2根据YSF1进行加减运算JSJJ    LABEL NEAR        MOV AX,NUM2        MOV DX,NUM2+2        CMP YSF1,'+'        JZ JSJJ1        SUB NUM1,AX        SBB NUM1+2,DX        JMP SHORT JSJJ2JSJJ1:        ADD NUM1,AX        ADC NUM1+2,DXJSJJ2:        RET;数据1与数据2根据YSF1进行乘除运算JSII1   LABEL NEAR        MOV BX,OFFSET NUM1        JMP SHORT JSII2_1;数据2与数据3根据YSF2进行乘除运算JSII2   LABEL NEAR        MOV BX,OFFSET NUM2JSII2_1:        DB 66H        MOV AX,BX        DB 66H        MOV CX,BX+4        CMP YSF2,'*'        JNZ JSII2_2        DB 66H        IMUL CX        JMP SHORT JSII2_3JSII2_2:        DB 66H        CWD        DB 66H        IDIV CX        CMP YSF2,'/'        JZ JSII2_3        DB 66H        XCHG DX,AXJSII2_3:        DB 66H        MOV BX,AX        RET;显示结果XUJG    LABEL NEAR        MOV AX,JGV4        MOV DX,JGV4+2        MOV CX,10        CMP UV,10        JZ XUJG0        MOV CX,16XUJG0:        TEST DX,8000H        JZ XUJG1        CMP UV,10        JZ XUJG2        CALL DOUTXUJG2:        NOT AX        NOT DX        ADD AX,1        ADC DX,0        PUSH AX        CMP UV,10        JZ XUJG3        MOV AL,' '        CALL DISP        MOV AL,'('        CALL DISPXUJG3:        MOV AL,'-'        CALL DISP        POP AX        CMP UV,10        JZ XUJG1        CALL DOUT        MOV AL,')'        CALL DISP        RETXUJG1:        CALL DOUT        RET;计算结果放入DX:AX中JSJG    LABEL NEAR        CALL JSJJ        MOV AX,NUM1        MOV DX,NUM1+2        RET;从DS:SI处取一个数据LOADATE LABEL NEAR        LODSB        CMP AL,'('        JZ LOADATE1        DEC SI        PUSH CX        XOR CX,CX        CMP UV,10        JZ LOADATE0        INC CX          取16进制数LOADATE0:        CALL DATE       取数据放入DX:AX中        POP CX        RETLOADATE1:        PUSH NUM1       保存数据1数据2及运算符        PUSH NUM1+2        PUSH NUM2        PUSH NUM2+2        PUSH YSF        INC JUV        MOV JGV4,0      结果值清零        MOV JGV4+2,0;进行四则运算SZYS    LABEL NEAR        CALL ISYSF      首字符是运算符?        JZ SZYS2        CALL LOADATE    不是,取数并保存        MOV NUM1,AX        MOV NUM1+2,DXSZYS1:        XOR AX,AX       数据2清零        MOV NUM2,AX        MOV NUM2+2,AX        CALL ISYSF      下个是运算符?        JZ SZYS3        JNZ SZYS6SZYS2:        PUSH AX        MOV AX,JGV4     将结果作为数据1        MOV NUM1,AX        MOV AX,JGV4+2        MOV NUM1+2,AX        POP AXSZYS3:        MOV YSF1,AL        MOV YSF2,AL        CALL ISJJ       是加减运算转        JZ SZYS4        CALL LOADATE    取数据2        MOV NUM2,AX        MOV NUM2+2,DX        CALL JSII1      数据1与数据2根据YSF1进行乘除运算        JMP SZYS1           结果保存在数据1中SZYS4:        CALL LOADATE    取数据2并保存        MOV NUM2,AX        MOV NUM2+2,DXSZYS4_1:        CALL ISYSF        JNZ SZYS6        CALL ISJJ       运算符2是加减运算?        JNZ SZYS5       不是转        PUSH AX        CALL JSJJ       数据1与数据2根据YSF1进行加减运算        POP AX              结果保存在数据1中        MOV YSF1,AL     保存新的运算符        JMP SZYS4SZYS5:        MOV YSF2,AL     保存运算符2        CALL LOADATE    取数据3        MOV NUM3,AX        MOV NUM3+2,DX        CALL JSII2      数据2与数据3根据YSF2进行乘除运算        JMP SZYS4_1         结果保存在数据2中SZYS6:        MOV CL,AL        CMP AL,13        JNZ SZYS9SZYS7:        CALL JSJG        CMP JUV,0        JZ SZYS8        DEC JUV        POP YSF        POP NUM2+2        POP NUM2        POP NUM1+2        POP NUM1        RETSZYS8:        CMP CL,')'        JZ SZYS10        MOV JGV4,AX        MOV JGV4+2,DX        JNZ SZYS12SZYS9:        CMP AL,')'        JNZ SZYS11        INC SI        JMP SZYS7SZYS10:        MOV NUM1,AX        MOV NUM1+2,DX        JMP SZYS1SZYS11:        STC        RETSZYS12:        CLC        RET;数制处理UVIL    LABEL NEAR        PUSH SIUVIL1:        LODSB        CMP AL,' '        JZ UVIL2        CMP AL,9        JZ UVIL2        CMP AL,13        JZ UVIL4        JNZ UVIL1UVIL2:        MOV BX,SI        CALL OVERS        JZ UVIL3        LODSW        CALL OVERS        POP SI        JNZ SZYS11        CMP AX,'01'        JNZ SZYS11        PUSH SI        MOV UV,10UVIL3:        MOV AL,13        MOV BX-1,ALUVIL4:        POP SI        CLC        RET;预置结果YVJG    LABEL NEAR        MOV AH,52H        INT 21H        MOV AX,ES:BX-2        MOV DS,AX        MOV AX,DS:0CH        MOV CS:JGV4,AX        MOV AX,DS:0EH        MOV CS:JGV4+2,AX        PUSH CS        POP DS        PUSH CS        POP ES        RET;保存结果BCJG    LABEL NEAR        MOV AH,52H        INT 21H        MOV AX,ES:BX-2        MOV DS,AX        MOV AX,CS:JGV4        MOV DS:0CH,AX        MOV AX,CS:JGV4+2        MOV DS:0EH,AX        PUSH CS        POP DS        PUSH CS        POP ES        RETSTAR:        MOV SI,81H        CLD        CALL OVERS        JNZ STAR1STAR0:        MOV DX,OFFSET MESS1        JMP STAR4STAR1:        CALL YVJG        CALL UVIL        JB STAR0        MOV SAVESP,SP        CALL SZYS        MOV SP,SAVESP        MOV DX,OFFSET MESS2        JB STAR4        CALL CRLF        CALL XUJG        CALL BCJG        MOV DX,OFFSET MESS3STAR4:        MOV AH,9        INT 21H        INT 20HSAVESP  DW 0MESS1   DB 13,10,'  Syntax:',13,10        DB '     JS  <Expression>  10',13,10,'$'MESS2   DB 'Error in expression !$'MESS3   DB 13,10,'$'CODE    ENDS        END NEWSTAR

    注意事项

    本文(汇编语言课程设计四则运算计算器...doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开