汇编语言 加减混合运算.docx

上传人:b****7 文档编号:11144292 上传时间:2023-02-25 格式:DOCX 页数:17 大小:113.28KB
下载 相关 举报
汇编语言 加减混合运算.docx_第1页
第1页 / 共17页
汇编语言 加减混合运算.docx_第2页
第2页 / 共17页
汇编语言 加减混合运算.docx_第3页
第3页 / 共17页
汇编语言 加减混合运算.docx_第4页
第4页 / 共17页
汇编语言 加减混合运算.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

汇编语言 加减混合运算.docx

《汇编语言 加减混合运算.docx》由会员分享,可在线阅读,更多相关《汇编语言 加减混合运算.docx(17页珍藏版)》请在冰豆网上搜索。

汇编语言 加减混合运算.docx

汇编语言加减混合运算

安徽省巢湖学院计算机与信息工程学院

课程设计报告

 

课程名称微型计算机系统原理及应用

课题名称实现加减混合运算

专业班级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的值,在编程时应注意这方面的问题。

在编写过程中,让我深刻的体会到了科学的严谨性。

有时一个逗号或者写错一个字母这样一点点小错误,就会产生很大的错误,导致调试的失败。

当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。

 

五、致谢

在这个课程设计的过程中得到了叶海燕老师的悉心指导。

叶老师多次询问课程设计的进程,并为我们指点迷津,帮助我开拓解决问题思路,精心点拨、热忱鼓励。

老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,不仅授我以文,而且教我如何付诸于实践,虽然只有短短一周的时间,却给以终生受益无穷之道。

对叶老师的感激之情是无法用言语表达的。

感谢学校对我们此次课程设计的大力支持,为我们安排了充分的时间使用学校的机房。

为我们安排了出色并且负责的老师来解答我们的疑虑。

最后我要感谢我们组的其他成员,也谢谢你们的支持,让我充分的体会到团队意识的重要性。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1