汇编课程设计报告四则运算.docx
《汇编课程设计报告四则运算.docx》由会员分享,可在线阅读,更多相关《汇编课程设计报告四则运算.docx(14页珍藏版)》请在冰豆网上搜索。
汇编课程设计报告四则运算
课程设计报告
一.课程设计的性质和目的
性质:
《汇编语言》是计算机科学与技术专业及网络工程本科学生必修的专业课程。
目的要求:
进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二.课程设计的要求
1.遵循模块化、结构化的程序设计方法。
2.要求程序必须正确。
3.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
4.要求程序结构合理,语句使用得当。
5.适当追求编程技巧和程序运行效率。
三.主要仪器设备及软件
计算机、MASM汇编软件。
四.设计题目
四则运算:
从键盘输入一个十进制两位数的四则运算表达式,如23*56-(8*19)/6+67-8=,编程计算表达式的值,输出十进制结果(有可能是三位或四位十进制),+-*/位置任意。
并要求程序能反复执行直道对“还要继续吗?
(y/n)”之类的提示回答“n”或“N”为止。
五.题目分析
根据题目的要求,可以把整个源程序大致划分为几个基本结构,程序加法、减法、乘法、除法、显示结果五个部分,首先用1号功能以输入字符的形式接收输入的算式,再判断输入字符ASCII码,如果是+、-、*、/、=或数字,则跳转到相应功能模块,并把输入的字符转为数值传入BX寄存器,在各功能模块中继续用1号功能输入字符,执行以上操作,将输入号符转为数据存入DX中,由于*、/优先级要高,加、减模块的实现中要根据输入运算符号进行将BX入栈操作,如果是相同优先级运算符,则直接将BX,DX中的数据进行相应运算,输入=则输出运算结果,这时输出字符串Continue?
,用户输入y/n执行继续计算和退出操作
六.运行结果
输入要计算的式子,按等号输出结果,计算机提示是否继续输入,输入字符y,继续输入,键入n退出程序,如果键入字符为其他,则反回提示输入
如图:
七.程序流程
主程序流程
八.代码
根据题目的要求,可以把整个源程序大致划分为几个基本结构,程序加法、减法、乘法、除法、显示结果五个部分
1、源程序:
DATASSEGMENT;定义数据段
STRINGDB"Continue?
$"
DATASENDS
STACKSEGMENTSTACK;定义堆栈段
DB100DUP(?
)
STACKENDS
CODESSEGMENT;定义代码段
ASSUMECS:
CODES,DS:
DATAS,SS:
STACK
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
MULDX
MOVBX,AX
JMPSUBTRATION
L45:
MOVAX,BX
MULDX
MOVBX,AX
JMPMULTIPLICATION
L46:
MOVAX,BX
MULDX
MOVBX,AX
JMPDIVISION
L47:
MOVAX,BX
MULDX
MOVBX,AX
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
S1:
MOVAH,1
INT21H
CMPAL,'y';输入y则跳转到S1
JES1
CMPAL,'n';输入n则跳转到S3,即结束程序
JES3
JNES2
S3:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
九.心得体会
程序的主要功能是实现四则运算,整个程序中主要分为,输入算式,加法,减法,乘法,除法和以十进制显示结果这几个部分
本程序基本实现了四则运算的功能,但还没能实现带有括号的四则运算以及带负数的四则运算,还有在运算中不能运算较大的数,不然会产生溢出现象
一开始的时候我们编出来的程序有很多问题,尤其是在循环程序上,因此查阅了不少资料,也请教了好几个同学帮着修改,调试了好久才能正常运行。
由于动手水平能力有限,程序还是有不完美的地方。
这次的综合实验让我们对汇编有了更深刻的认识,对各种指令有了进一步的理解。