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

上传人:e****s 文档编号:61852218 上传时间:2022-11-21 格式:DOC 页数:16 大小:102.50KB
返回 下载 相关 举报
汇编语言课程设计四则运算器.doc_第1页
第1页 / 共16页
汇编语言课程设计四则运算器.doc_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《汇编语言课程设计四则运算器.doc》由会员分享,可在线阅读,更多相关《汇编语言课程设计四则运算器.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、信息科学与工程学院汇编语言课程设计题 目: 四则运算器 姓 名: 学 号: 班 级: 课 程: 汇编语言 任课教师: 2011年6月20日课程设计任务书及成绩评定题 目设计一个四则运算器课程设计的任务及要求1、 设计任务: 设计一个能实现加减乘除取余计算的程序2、设计要求:要求该程序接受从键盘输入的十六进制数,执行相应的进算后,计算结果以十六进制数输出。 课程设计所需的软件、硬件等计算机、masm5课程设计进度计划2011年5月 5月中旬,进行可行性研究,完成选题. 2011年5月中旬 5月底,根据选题查阅资料、进行概要设计,确定设计方案. 详细设计,实施设计方案,调试作品.2011年6月初,

2、完成课程设计(任务书)的撰写。任课教师评语 成绩: 教师签名: 日期: 选题背景及意义 运用汇编语言,实现简单计算器的一般功能。通过该程序设计,让我们熟悉并掌握DOS系统功能调用方法及BIOS系统功能调用方法,同时在程序设计过程中熟悉并掌握各种指令的应用,知道编程的具体流程,以及掌握DEBUG的一系列的功能指令命令,及用它进行调试,运行功能。主要设计内容及预期目标设计一个能实现加减乘除取余计算的程序。将键盘输入的表达式预放入一缓存区中,然后从该缓冲区的第一个字符开始读取判断,当读到一个有效的表达式时对表达式进行相应的运算后,输出用十六进制数表示的运算结果。目标:要求该程序接受从键盘输入的十六进

3、制数,执行相应的进算后,计算结果以十六进制数输出。概要设计(1)界面设置主要实现确定界面样式的功能,以菜单形式显示。(2)选择算法设置用于选择加减乘除进行运算。(3) 十进制转换设置应用十进制的转换算法来处理加减乘除四则运算。详细设计1、页面设置通过定义数据段,利用09H显示出功能列表。通过定义数据段,以字符串的形式输入每个提示信息,利用09h键盘输入并回显命令显示每一个功能提示,是计算器的功能列表有序清晰的显示在屏幕上。2、选择算法设置首先选择要进行的四则运算,若选择1,则进行加法;若选择2,则进行减法;若选择3则进行乘法;若选择4则进行除法。加法:先输入第一个小于4位十六进制数存入SI中,

4、在输入第二个小于4位十六进制数存入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作

5、除数,得到的商存在AX中,余数放在DX中,然后依次赋给BX,将依次显示即为商。3、十进制转换设置要完成十进制转换成十六,一般采用除十六取余法来完成,其大致过程如下:将待装换的数除以16得到第一个商和余数,此第一个余数就是所求的十六进制数的各位,再用第一个商除以16,得到第二个商和余数,此第二个余数就是所求十六进制数的十位,重复这一过程直至商为0,此时的余数就是所求十六进制数的最高位。在内存中分配一缓冲区,用来存放以上分离出来的十六进制数的每一位,然后再逐个转换成ASCII码的过程很简单,就是给每个十六进制位加上30H即可,最后送显示器输出。使用说明(1) 按照提示选择数字1,2,3,4。(2)

6、 1:加法ADD。(3) 2:减法SUB。(4) 3:乘法MUL。(5) 4:除法DIV。(6) 输入一个小于四位的任意进制的数,回车。(7) 再输入一个小于四位的任意进制的数,回车。(8) 显示结果。(9) 退出按Q,选择Y或N。程序清单IN16MACRO ;完成从键盘接受两个数并转换为十六进制数,第一个数由SI指向,第二个数存放在BX中LEA DX,PR ;DX指向PR换行CALL OUTPUTLEA DX,INPUT1 ;DX指向INPUT1,提示输入第一数CALL OUTPUT ;把输入的数存放在BX中LEA SI,RESULT ;SI指向RESULTMOV SI,BX ;把第一个十六

7、进制数存入RESULT的第一个位置LEA DX,PR ;把第一个十六进制数存入RESULT的第一个位置LEA DX,PR ;DX指向PR,换行CALL OUTPUTLEA DX,INPUT2 ;DX指向INPUT2,提示输入第一个数CALL OUTPUTCALL INPUT ;把输入的数存放在BX中ENDM ;宏结束DATA SEGMENT ;数据段BUF DB ,0DH,0AHDB *- WELCOME TO CALCULATOR SYSTEM -*,0DH,0AHDB *-1:ADD-2:SUB-3:UL-4:IY-0:QUIT-*,0DH,0AHDB *- MADE BY ZHOUZHI

8、HAO -*,0DH,0AHDB *- 2009*6*26 -*,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

9、,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 ;数据段定义结束CODE SEGMENTMAIN PROC FAR ;主函数ASSUME CS:CODE, DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUF ;DX指向BUF换行CALL OUTPUT ;调用显示字符串函数换行SUB AX,AX ;AX清零CALL CHOOSE ;调用选择函数JMP START ;跳转到S

10、TARTRETMAIN ENDPINPUT PROC NEAR ;定义INPUT函数,就是将从键盘输入的数按原十六进制数存放在BX中MOV BX,0 ;BX清零NEWCHAR:MOV AH,1INT 21H ;接受键盘输入一个字符CMP AL,0DH ;输入的字符与回车比较JE EXIT ;是回车就结束CMP AL,A ;与A比较JAE H0 ;大于等于就跳转到H0CMP AL,0 ;与0比较JAE H1 ;大于等于就跳转到H1H0:SUB AL,37H ;由于41-A=37,完成把字母字符转换成对应的十六进制数JMP ADDTO ;跳转到ADDTOH1:SUB AL,30H ;把0到9的字符

11、转换成对应的十六进制数JMP ADDTO ;跳转到ADDTOADDTO:MOV CL,4 ;相当于让BX乘以16SHL BX,CL ;将BX逻辑左移MOV AH,0 ;将AX清零ADD BX,AX ;AX+BX送到BXJMP NEWCHAR ;跳转到NEWCHAR,把第二个输入的字符存放到BX的第二位EXIT:RETINPUT ENDPOUTPUT PROC NEAR ;显示字符串函数MOV AH,9HINT 21HRETOUTPUT ENDPCHOOSE PROC NEAR ;选择函数MOV AH,1 ;从键盘接受一个数INT 21HCMP AL,1 ;与1比较JE YES1 ;等于1就跳转

12、到YES1,进行加法CMP AL,2 ;与2比较JE YES2 ;等于2就跳转到YES2,进行减法CMP AL,3 ;与3比较JE YES3 ;等于3就跳转到YES3,进行乘法CMP AL,4 ;与4比较JE YES4 ;等于4就跳转到YES4,进行除法CMP AL,0 ;与0比较JE EXIT1 ;等于0就跳转到EXIT1,结束程序CALL WRONG ;如果不是0到4之间的数就提示出错EXIT1:LEA DX,PR ;DX指向PR换行CALL OUTPUTLEA DX,PR6 ;DX指向PR6,确认是否退出CALL OUTPUTMOV AH,1 ;从键盘接受一个数INT 21HCMP AL

13、,Y ;与Y比较JE EXIT0 ;不是Y就看是否为yCMP AL,y ;与y比较JNE START ;不是y就跳转到STARTEXITO:MOV AH,4CH ;结束本程序INT 21HYES1:CALL JIA ;调用JIA函数JMP START ;调用完之后跳转到STARTYES2:CALL JIAN ;调用JIAN函数JMP START ;调用完之后跳转到STARTYES3:CALL CHENG ; 调用CHENG函数JMP START ;调用完之后跳转到STARTYES4:CALL CHU ; 调用CHU函数RETCHOOSE ENDP ;选择函数结束WRONG PROC NEAR

14、;报错函数LEA DX,PR ;DX指向PR换行LEA DX,WRO ;DX指向WRO,提示输入有错误,请重新输入JMP START ;跳转到SYARTRETWRONG ENDP ;报错函数结束JIA PROC NEA ;加法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个由SI指向,第二个数存放到BX中ADD BX,SI ;把第一个数加第二个数存放在BX中LEA DX,PR ;DX指向PR,换行CALL OUTPUT LEA DX,PR1 ;DX指向PR1,显示A+B=CALL OUTPUT CALL OUTBX ;调用显示BX寄存器的内容函数RETJIA ENDP ;加法结束J

15、IAN PROC NEAR ;减法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个由SI指向,第二个数存放到BX中SUB BX,SI ;把第二个数减第一个数存放在BX中NEG BX ;对结果取反后才是A-B的值,才是第一个数减去第二个数LEA DX,PR ;DX指向pr,换行CALL OUTPUT LEA DX,PR2 ;dx指向pr2,显示A-B=CALL OUTPUTCALL OUTBX ;调用显示BX寄存器的内容RETJIAN ENDP ;减法函数结束CHENG PROC NEAR ;乘法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个由SI指向,第二个数存放到B

16、X中MOV DX,0 ;把DX清零MOV AX,BX ;把第二个数赋给axMUL WORD PTRSI ;ax乘【si】并把结果存放在dx,ax中,是字的操作MOV BX,AX ;把ax赋给bxPUSH BX ;将bx压栈,显示下面dx的内容是要将dx的值赋给bxPUSH DX ;将dx压栈,因为下面换行输出,会改变dx的值LEA DX,PR ;dx指向pr,换行输出CALL OUTPUTLEA DX,PR3 ;dx指向pr3,显示A*B=CALL OUTPUTPOP DX ;将dx出栈,将要做乘法后dx的内容显示出来MOV BX, DX ;把BX给DXCALL OUTBX ;显示DX的内容P

17、OP BX ;把BX出栈CALL OUTBX ;显示AX的内容RET CHENG ENDP ;乘法函数结束CHU PROC NEAR ;除法函数IN16 ;调用宏,接受键盘输入的两个十六进制数,第一个数SI指向,第二个数存放在BX中MOV AX,SI ;将第一个数赋给AXMOV DX,0 ;将DX清零DIV BX ;AX除BX,结果存放到DX,AX,DX存放余数,AX存放商PUSH DX ;压栈DXPUSH AX ; 压栈AXLEA DX,PR ;DX指向PR,换行CALL OUTPUT LEA DX,PR4 ;DX指向PR4,显示A/B=CALL OUTPUTPOP AX ;出栈AXMOV

18、BX,AX ;将AX赋给BX,将商给BXCALL OUTBX ;显示AX寄存器的内容,显示余数LEA DX,PR5 ;DX指向PR5,显示省略号CALL OUTPUTPOP DX ;出栈DXMOV BX,DX ;将DX赋给BX,即将余数赋给BXCALL OUTBX ;显示DX寄存器的内容,显示余数RET CHU ENDP ;除法函数结束OUTBX PROC NEAR ;显示BX寄存器的内容MOV CH,4 ;CH等于4ROTATE:MOV CL,4 ;CL等于4ROL BX,CL ;将BX循环左移四位MOV AL,BL ;将BL赋给ALAND AL,0FH ;将AL的高位置零ADD AL,30

19、H ;AL+30H可将AL变为对应的ASCII的值CMP AL,3AH ;判断是否是0-9之间JL PRINTIT ;是则跳转到PRINTITADD AL,7H ;是A-F再加上7HPRINTIT:MOV DL,AL ;将AL赋给DLMOV AH,2 INT 21H ;显示ALDEC CH ;CH -1再赋给CHJNZ ROTATE ;CH!=0则跳转到ROTATERET ;CH=0则结束OUTBX ENDP ;显示寄存器BX内容函数结束CODE ENDPEND MAIN设计总结汇编语言的课程设计已经结束,这门课程在检验我们成绩的同时,也检验了我们的学习效果。我选择的的是设计一种任艺术之间转换的计算器,基本上用到了我所会的全部知识,但是在程序运行的过程中总是出现这样那样的问题,有的是我打错了代码,有的是我理解错了知识点,导致程序错误。但在老师的一一检验下,问题都一一的被解决。通过这次设计,更加深了我对汇编语言的使用技巧,和做事的认真态度。汇编语言作为一种低级语言,编写程序本来就很吃力,很少的几种指令和代码。就增大了设计的难度。所以选择正确的设计方法尤为重要。但在我认真看了参考书并和老师讨论之后。思路变得越来越清晰,最终写出了属于自己的课程设计程序。虽然很简单,但我很快乐,因为作为一名计算机专业的学生,能设计出自己的作品感到很光荣。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 标准材料 > 石化标准

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

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