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

下载本文档

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

文档简介

信息科学与工程学院汇编语言课程设计题 目: 四则运算器 姓 名: 学 号: 班 级: 课 程: 汇编语言 任课教师: 2011年6月20日课程设计任务书及成绩评定题 目设计一个四则运算器课程设计的任务及要求1、 设计任务: 设计一个能实现加减乘除取余计算的程序2、设计要求:要求该程序接受从键盘输入的十六进制数,执行相应的进算后,计算结果以十六进制数输出。 课程设计所需的软件、硬件等计算机、masm5课程设计进度计划2011年5月 5月中旬,进行可行性研究,完成选题. 2011年5月中旬 5月底,根据选题查阅资料、进行概要设计,确定设计方案. 详细设计,实施设计方案,调试作品.2011年6月初,完成课程设计(任务书)的撰写。任课教师评语 成绩: 教师签名: 日期: 选题背景及意义 运用汇编语言,实现简单计算器的一般功能。通过该程序设计,让我们熟悉并掌握dos系统功能调用方法及bios系统功能调用方法,同时在程序设计过程中熟悉并掌握各种指令的应用,知道编程的具体流程,以及掌握debug的一系列的功能指令命令,及用它进行调试,运行功能。主要设计内容及预期目标设计一个能实现加减乘除取余计算的程序。将键盘输入的表达式预放入一缓存区中,然后从该缓冲区的第一个字符开始读取判断,当读到一个有效的表达式时对表达式进行相应的运算后,输出用十六进制数表示的运算结果。目标:要求该程序接受从键盘输入的十六进制数,执行相应的进算后,计算结果以十六进制数输出。概要设计(1)界面设置主要实现确定界面样式的功能,以菜单形式显示。(2)选择算法设置用于选择加减乘除进行运算。(3) 十进制转换设置应用十进制的转换算法来处理加减乘除四则运算。详细设计1、页面设置通过定义数据段,利用09h显示出功能列表。通过定义数据段,以字符串的形式输入每个提示信息,利用09h键盘输入并回显命令显示每一个功能提示,是计算器的功能列表有序清晰的显示在屏幕上。2、选择算法设置首先选择要进行的四则运算,若选择1,则进行加法;若选择2,则进行减法;若选择3则进行乘法;若选择4则进行除法。加法:先输入第一个小于4位十六进制数存入si中,在输入第二个小于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作除数,得到的商存在ax中,余数放在dx中,然后依次赋给bx,将依次显示即为商。3、十进制转换设置要完成十进制转换成十六,一般采用除十六取余法来完成,其大致过程如下:将待装换的数除以16得到第一个商和余数,此第一个余数就是所求的十六进制数的各位,再用第一个商除以16,得到第二个商和余数,此第二个余数就是所求十六进制数的十位,重复这一过程直至商为0,此时的余数就是所求十六进制数的最高位。在内存中分配一缓冲区,用来存放以上分离出来的十六进制数的每一位,然后再逐个转换成ascii码的过程很简单,就是给每个十六进制位加上30h即可,最后送显示器输出。使用说明(1) 按照提示选择数字1,2,3,4。(2) 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 ;把第一个十六进制数存入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 zhouzhihao -*,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,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 ;跳转到startretmain 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的字符转换成对应的十六进制数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就跳转到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,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 ;报错函数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 ;加法结束jian 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指向,第二个数存放到bx中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的内容pop 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 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,30h ;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设计总结汇编语言的课程设计已经结束,这门课程在检验我们成绩的同时,也检验了我

温馨提示

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

最新文档

评论

0/150

提交评论