汇编语言加减混合运算.docx
《汇编语言加减混合运算.docx》由会员分享,可在线阅读,更多相关《汇编语言加减混合运算.docx(17页珍藏版)》请在冰豆网上搜索。
汇编语言加减混合运算
省学院计算机与信息工程学院
课程设计报告
课程名称微型计算机系统原理及应用
课题名称实现加减混合运算
专业班级11计本(3)班
学号11011214
姓名王能
联系方式
指导教师叶海燕
完成日期:
2014年1月2日
微机原理课程设计:
实现加减混合运算
1、设计任务描述
1.1课程设计目的
进行程序设计的方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,打到独立编制和调试一定滚魔的汇编语言程序水平。
1.2课程设计题目
四则混合运算
设计程序,实现从键盘上输入一个加减混合运算式,输入等号后,在下一行上显示十进制计算结果。
显示示例:
Input:
3+5+7+8=
23
二、概要设计
2.1设计主要容
根据题目的要求,该程序设计的关键是要根据四则运算中()、*、/、+、-、=的优先设置符号的权值,其中/、*、+、-、=的权值分别设置为4、4、3、3、1,然后根据权值大小进行运算。
程序使用数字标志SIGN1、括号标志SIGN2分别来判断数字是否输入完毕和括号是否配对,另外程序定义两个数据存储区域NUMB和MARK,其中NUMB用来保存输入的或运算的数值,MARK用来保存输入的符号及其对应的权值。
。
可以把整个源程序大致划分为几个基本结构:
程序加法、减法、乘法、除法、显示结果五个部分。
首先用1号功能以输入字符的形式接收输入的算式,再判断输入字符ASCII码,如果是+、-、*、/、=或数字,则跳转到相应功能模块,并把输入的字符转为数值传入BX寄存器,在各功能模块中继续用1号功能输入字符,执行以上操作,将输入号符转为数据存入DX中,由于*、/优先级要高,加、减模块的实现中要根据输入运算符号进行将BX入栈操作,如果是相同优先级运算符,则直接将BX,DX中的数据进行相应运算,输入=则输出运算结果,这时输出字符串Continue?
,用户输入y/n执行继续计算和退出操作。
2.2设计思路流程图
2.3程序运行结果
输入要计算的式子,按等号输出结果,计算机提示是否继续输入,输入字符y,继续输入,键入n退出程序,如果键入字符为其他,则反回提示输入。
三、程序代码
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
NEXTLINEMACRO;显示换行宏
MOVAH,2
MOVDL,10
INT21H
MOVAH,2
MOVDL,13
INT21H
ENDM
START:
MOVAX,DATAS
MOVDS,AX
MOVBX,0
INPUT1:
MOVAH,1;从键盘输入一个字符
INT21H
CMPAL,'+';判断是否为+
JZADDITION
CMPAL,'-';判断是否为-
JZSUBTRATION
CMPAL,'*';判断是否为*
JZMULTIPLICATION
CMPAL,'/'判断是否为/
JZDIVISION
CMPAL,'='判断是否为=
JZRESULT
CMPAL,58判断输入是否为数字
JSL1
JMPINPUT1
L1:
CMPAL,47节
JNSL2
JMPINPUT1
L2:
SUBAL,48如果输入为数字,将数值计入BX
MOVCL,AL
MOVAX,BX
MOVCH,10
MULCH
ADDAL,CL
MOVBX,AX
JMPINPUT1
ADDITION:
输入+后,进入加法运算
MOVDX,0
INPUT2:
MOVAH,1从键盘输入字符
INT21H
CMPAL,'+'判断是否为+
JZL23
CMPAL,'-'判断是否为-
JZL24
CMPAL,'*'判断是否为*
JZL25
CMPAL,'/'判断是否为/
JZL26
CMPAL,'='判断是否为=
JZL27
CMPAL,58判断是否为数字
JSL21
JMPINPUT2
L21:
CMPAL,47
JNSL22
JMPINPUT2如果不是数字,则跳转到INPUT2
L22:
SUBAL,48将输入字符转换为数值
MOVCL,AL
MOVAX,DX
MOVCH,10
MULCH
ADDAL,CL
MOVDX,AX
JMPINPUT2
L23:
ADDBX,DX执行加运算
JMPADDITION
L24:
ADDBX,DX
JMPSUBTRATION
L25:
ADDBX,DX
JMPMULTIPLICATION
L26:
ADDBX,DX
JMPDIVISION
L27:
ADDBX,DX
JMPRESULT
SUBTRATION:
如果输入-,则执行减法
MOVDX,0
INPUT3:
MOVAH,1
INT21H
CMPAL,'+'判断是否为+
JZL33
CMPAL,'-'判断是否为-
JZL34
CMPAL,'*'判断是否为*
JZL35
CMPAL,'/'判断是否为/
JZL36
CMPAL,'='判断是否为=
JZL37
CMPAL,58判断是否为数字
JSL31
JMPINPUT3
L31:
CMPAL,47
JNSL32
JMPINPUT3
L32:
SUBAL,48将字符转换为数值
MOVCL,AL
MOVAX,DX
MOVCH,10
MULCH
ADDAL,CL
MOVDX,AX
JMPINPUT3
L33:
SUBBX,DX执行减法操作
JMPADDITION
L34:
SUBBX,DX
JMPSUBTRATION
L35:
SUBBX,DX
JMPMULTIPLICATION
L36:
SUBBX,DX
JMPDIVISION
L37:
SUBBX,DX
JMPRESULT
MULTIPLICATION:
MOVDX,0
INPUT4:
MOVAH,1
INT21H
判断是否为+
判断是否为-
CMPAL,'+'
JZL43
CMPAL,'-'
JZL44
CMPAL,'*'判断是否为*
JZL45
CMPAL,'/'判断是否为/
JZL46
CMPAL,'='判断是否为=
JZL47
CMPAL,58判断是否为数字
JSL41
JMPINPUT4
L41:
CMPAL,47
JNSL42
JMPINPUT4
L42:
SUBAL,48将字符转换为数值
MOVCL,AL
MOVAX,DX将字输入数字加入数值
MOVCH,10
MULCH
ADDAL,CL
MOVDX,AX
JMPINPUT4
L43:
MOVAX,BX将BX移入AX
MULDX与DX中的数进行乘运算
MOVBX,AX将AX中的数值返回BX
JMPADDITION
L44:
MOVAX,BX将BX移入AX
MULDX与DX中的数进行乘运算
MOVBX,AX将AX中的数值返回BX
JMPSUBTRATION
L45:
MOVAX,BX将BX移入AX
MULDX与DX中的数进行乘运算
MOVBX,AX将AX中的数值返回BX
JMPMULTIPLICATION
L46:
MOVAX,BX将BX移入AX
MULDX与DX中的数进行乘运算
MOVBX,AX将AX中的数值返回BX
JMPDIVISION
L47:
MOVAX,BX将BX移入AX
MULDX与DX中的数进行乘运算
MOVBX,AX将AX中的数值返回BX
JMPRESULT
DIVISION:
MOVDX,0
INPUT5:
MOVAH,1
INT21H
判断是否为+
判断是否为-
判断是否为*
判断是否为/
判断是否为=
判断是否为数字
CMPAL,'+'
JZL53
CMPAL,'-'
JZL54
CMPAL,'*'
JZL55
CMPAL,'/'
JZL56
CMPAL,'='
JZL57
CMPAL,58
JSL51
JMPINPUT5
L51:
CMPAL,47
JNSL52
JMPINPUT5
L52:
SUBAL,48
MOVCL,AL
MOVAX,DX
MOVCH,10
MULCH
ADDAL,CL
MOVDX,AX
JMPINPUT5
L53:
MOVAX,BX
DIVDX
MOVAH,0
MOVBX,AX
JMPADDITION
L54:
MOVAX,BX
DIVDL
MOVAH,0
MOVBX,AX
JMPSUBTRATION
L55:
MOVAX,BX
DIVDL
MOVAH,0
MOVBX,AX
JMPMULTIPLICATION
L56:
MOVAX,BX
DIVDL
MOVAH,0
MOVBX,AX
JMPDIVISION
L57:
MOVAX,BX
DIVDL
MOVAH,0
MOVBX,AX
JMPRESULT
RESULT:
显示结果
MOVCH,10
MOVCL,100
R1:
将BX中的计算结果以十进制输出
MOVAX,BX
DIVCL
MOVDL,AL
MOVDH,AH
MOVAL,AH
MOVAH,0
MOVBX,AX
ADDDL,48
MOVAH,2
INT21H
MOVAH,0
MOVAL,CL
DIVCH
MOVCL,AL
CMPCL,1
JZR2
JMPR1
R2:
MOVDL,DH
ADDDL,48
MOVAH,2
INT21H
S2:
NEXTLINE
LEADX,STRING询问是否继续输入
MOVAH,9
INT21H
MOVAH,1
INT21H
CMPAL,'y'输入y则跳转到S1
JES1
CMPAL,'n'输入n则跳转到S3,即结束程序
JES3
JNES2
S3:
MOVAH,4CH
INT21H
CODESENDS
四、总结体会
通过这次的课程设计,让我们对汇编语言有了更进一步的认识,加强了我们用汇编语言的能力。
并经过修改,完成了简单的设计。
汇编语言程序设计是一门很抽象的科学,学起来也比较难,但随着学习的推进,以及上机编程,逐渐感到轻松,在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制;熟练的利用子程序和宏进行编程。
在设计过程中,不断对程序进行修改,改进,增强了自己分析问题解决问题的能力:
在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器,存储器等工作原理以及一些指令执行后对它们的改变,例如,int指令会改变al的值,在编程时应注意这方面的问题。
在编写过程中,让我深刻的体会到了科学的严谨性。
有时一个逗号或者写错一个字母这样一点点小错误,就会产生很大的错误,导致调试的失败。
当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。
五、致
在这个课程设计的过程中得到了叶海燕老师的悉心指导。
叶老师多次询问课程设计的进程,并为我们指点迷津,帮助我开拓解决问题思路,精心点拨、热忱鼓励。
老师一丝不苟的作风,严谨的态度,踏踏实实的精神,不仅授我以文,而且教我如何付诸于实践,虽然只有短短一周的时间,却给以终生受益无穷之道。
对叶老师的感激之情是无法用言语表达的。
感学校对我们此次课程设计的大力支持,为我们安排了充分的时间使用学校的机房。
为我们安排了出色并且负责的老师来解答我们的疑虑。
最后我要感我们组的其他成员,也你们的支持,让我充分的体会到团队意识的重要性。