1、汇编语言加减混合运算省学院计算机与信息工程学院课程设计报告课程名称 微型计算机系统原理及应用 课题名称 实现加减混合运算 专业班级 11计本(3)班 学 号 1 1 0 1 1 2 1 4 姓 名 王能 联系方式 指导教师 叶海燕 完成日期: 2014年1月 2日微机原理课程设计:实现加减混合运算1、设计任务描述1.1课程设计目的进行程序设计的方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,打到独立编制和调试一定滚魔的汇编语言程序水平。1.2课程设计题目四则混合运算设计程序,实现从键盘上输入一个加减混合运算式
2、,输入等号后,在下一行上显示十进制计算结果。显示示例:Input:3+5+7+8=23二、概要设计2.1设计主要容根据题目的要求,该程序设计的关键是要根据四则运算中()、*、/、+、-、=的优先设置符号的权值,其中/、*、+、-、=的权值分别设置为4、4、3、3、1,然后根据权值大小进行运算。程序使用数字标志SIGN1、括号标志SIGN2分别来判断数字是否输入完毕和括号是否配对,另外程序定义两个数据存储区域 NUMB和MARK,其中NUMB用来保存输入的或运算的数值,MARK用来保存输入的符号及其对应的权值。可以把整个源程序大致划分为几个基本结构:程序加法、减法、乘法、除法、显示结果五个部分。
3、首先用1号功能以输入字符的形式接收输入的算式,再判断输入字符ASCII码,如果是+、-、*、/、=或数字,则跳转到相应功能模块,并把输入的字符转为数值传入BX寄存器,在各功能模块中继续用1号功能输入字符,执行以上操作,将输入号符转为数据存入DX中,由于*、/优先级要高,加、减模块的实现中要根据输入运算符号进行将BX入栈操作,如果是相同优先级运算符,则直接将BX,DX中的数据进行相应运算,输入=则输出运算结果,这时输出字符串Continue?,用户输入y/n执行继续计算和退出操作。2.2 设计思路流程图2.3 程序运行结果输入要计算的式子,按等号输出结果,计算机提示是否继续输入,输入字符y,继续
4、输入,键入n退出程序,如果键入字符为其他,则反回提示输入。三、程序代码CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSNEXTLINE MACRO ;显示换行宏 MOV AH,2 MOV DL,10 INT 21H MOV AH,2 MOV DL,13 INT 21H ENDMSTART: MOV AX,DATAS MOV DS,AX MOV BX,0INPUT1: MOV AH,1 ;从键盘输入一个字符 INT 21H CMP AL,+ ;判断是否为+ JZ ADDITION CMP AL,- ;判断是否为- JZ SUBTRATION CMP
5、AL,* ;判断是否为* JZ MULTIPLICATION CMP AL,/ 判断是否为/ JZ DIVISION CMP AL,= 判断是否为= JZ RESULT CMP AL,58 判断输入是否为数字 JS L1 JMP INPUT1L1: CMP AL,47节 JNS L2 JMP INPUT1L2: SUB AL,48 如果输入为数字,将数值计入BX MOV CL,AL MOV AX,BX MOV CH,10 MUL CH ADD AL,CL MOV BX,AX JMP INPUT1 ADDITION: 输入+后,进入加法运算 MOV DX,0INPUT2: MOV AH,1 从键
6、盘输入字符 INT 21HCMP AL,+ 判断是否为+ JZ L23 CMP AL,- 判断是否为- JZ L24 CMP AL,* 判断是否为* JZ L25 CMP AL,/ 判断是否为/ JZ L26 CMP AL,= 判断是否为= JZ L27 CMP AL,58 判断是否为数字 JS L21 JMP INPUT2L21: CMP AL,47 JNS L22 JMP INPUT2 如果不是数字,则跳转到INPUT2L22: SUB AL,48 将输入字符转换为数值 MOV CL,AL MOV AX,DX MOV CH,10 MUL CH ADD AL,CL MOV DX,AX JMP
7、 INPUT2L23: ADD BX,DX 执行加运算 JMP ADDITIONL24: ADD BX,DX JMP SUBTRATIONL25: ADD BX,DX JMP MULTIPLICATIONL26: ADD BX,DX JMP DIVISIONL27: ADD BX,DX JMP RESULT SUBTRATION: 如果输入-,则执行减法 MOV DX,0INPUT3: MOV AH,1 INT 21H CMP AL,+ 判断是否为+ JZ L33 CMP AL,- 判断是否为- JZ L34 CMP AL,* 判断是否为* JZ L35 CMP AL,/ 判断是否为/ JZ
8、L36 CMP AL,= 判断是否为= JZ L37 CMP AL,58 判断是否为数字 JS L31 JMP INPUT3L31: CMP AL,47 JNS L32 JMP INPUT3L32: SUB AL,48 将字符转换为数值 MOV CL,AL MOV AX,DX MOV CH,10 MUL CH ADD AL,CL MOV DX,AX JMP INPUT3L33: SUB BX,DX 执行减法操作 JMP ADDITIONL34: SUB BX,DX JMP SUBTRATIONL35: SUB BX,DX JMP MULTIPLICATIONL36: SUB BX,DX JMP
9、 DIVISIONL37: SUB BX,DXJMP RESULTMULTIPLICATION: MOV DX,0INPUT4: MOV AH,1 INT 21H判断是否为+判断是否为- CMP AL,+ JZ L43 CMP AL,- JZ L44 CMP AL,* 判断是否为* JZ L45 CMP AL,/ 判断是否为/ JZ L46 CMP AL,= 判断是否为= JZ L47 CMP AL,58 判断是否为数字 JS L41 JMP INPUT4L41: CMP AL,47 JNS L42 JMP INPUT4L42: SUB AL,48 将字符转换为数值 MOV CL,AL MOV
10、 AX,DX 将字输入数字加入数值 MOV CH,10 MUL CH ADD AL,CL MOV DX,AX JMP INPUT4L43: MOV AX,BX 将BX移入AX MUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP ADDITIONL44: MOV AX,BX 将BX移入AX MUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP SUBTRATIONL45: MOV AX,BX 将BX移入AX MUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BXJMP MULTIPLICATION
11、L46: MOV AX,BX 将BX移入AX MUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP DIVISIONL47: MOV AX,BX 将BX移入AX MUL DX 与DX中的数进行乘运算 MOV BX,AX 将AX中的数值返回BX JMP RESULT DIVISION: MOV DX,0INPUT5: MOV AH,1 INT 21H 判断是否为+判断是否为-判断是否为*判断是否为/判断是否为=判断是否为数字 CMP AL,+ JZ L53 CMP AL,- JZ L54 CMP AL,* JZ L55 CMP AL,/ JZ L56 CMP
12、AL,= JZ L57 CMP AL,58 JS L51 JMP INPUT5L51: CMP AL,47 JNS L52 JMP INPUT5L52: SUB AL,48 MOV CL,AL MOV AX,DX MOV CH,10 MUL CH ADD AL,CL MOV DX,AX JMP INPUT5L53: MOV AX,BXDIV DX MOV AH,0 MOV BX,AX JMP ADDITIONL54: MOV AX,BX DIV DL MOV AH,0 MOV BX,AX JMP SUBTRATIONL55: MOV AX,BX DIV DL MOV AH,0 MOV BX,A
13、X JMP MULTIPLICATIONL56: MOV AX,BX DIV DL MOV AH,0 MOV BX,AX JMP DIVISIONL57: MOV AX,BX DIV DL MOV AH,0 MOV BX,AX JMP RESULTRESULT: 显示结果 MOV CH,10 MOV CL,100R1: 将BX中的计算结果以十进制输出 MOV AX,BX DIV CL MOV DL,AL MOV DH,AH MOV AL,AH MOV AH,0 MOV BX,AX ADD DL,48 MOV AH,2 INT 21H MOV AH,0 MOV AL,CL DIV CH MOV
14、CL,ALCMP CL,1 JZ R2 JMP R1R2: MOV DL,DH ADD DL,48 MOV AH,2 INT 21HS2: NEXTLINE LEA DX,STRING 询问是否继续输入 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,y 输入y则跳转到S1 JE S1 CMP AL,n 输入n则跳转到S3,即结束程序 JE S3 JNE S2 S3: MOV AH,4CH INT 21HCODES ENDS四、总结体会通过这次的课程设计,让我们对汇编语言有了更进一步的认识,加强了我们用汇编语言的能力。并经过修改,完成了简单的设计。 汇编语言程
15、序设计是一门很抽象的科学,学起来也比较难,但随着学习的推进,以及上机编程,逐渐感到轻松,在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制;熟练的利用子程序和宏进行编程。 在设计过程中,不断对程序进行修改,改进,增强了自己分析问题解决问题的能力:在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器,存储器等工作原理以及一些指令执行后对它们的改变,例如,int指令会改变al的值,在编程时应注意这方面的问题。在编写过程中,让我深刻的体会到了科学的
16、严谨性。有时一个逗号或者写错一个字母这样一点点小错误,就会产生很大的错误,导致调试的失败。 当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。五、致在这个课程设计的过程中得到了叶海燕老师的悉心指导。叶老师多次询问课程设计的进程,并为我们指点迷津,帮助我开拓解决问题思路,精心点拨、热忱鼓励。老师一丝不苟的作风,严谨的态度,踏踏实实的精神,不仅授我以文,而且教我如何付诸于实践,虽然只有短短一周的时间,却给以终生受益无穷之道。对叶老师的感激之情是无法用言语表达的。感学校对我们此次课程设计的大力支持,为我们安排了充分的时间使用学校的机房。为我们安排了出色并且负责的老师来解答我们的疑虑。最后我要感我们组的其他成员,也你们的支持,让我充分的体会到团队意识的重要性。