表达式求值程序设计说明书.docx
- 文档编号:30693673
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:30
- 大小:160.90KB
表达式求值程序设计说明书.docx
《表达式求值程序设计说明书.docx》由会员分享,可在线阅读,更多相关《表达式求值程序设计说明书.docx(30页珍藏版)》请在冰豆网上搜索。
表达式求值程序设计说明书
汇编语言实训课程设计任务书
题目:
表达式求值程序班级:
计算机科学与技术一班
学生姓名:
赵旭尧学号:
14730141
题目类型:
软件工程(R)指导教师:
刘树群
一.题目简介
该设计要求学生使用汇编语言,设计并开发出针对四则运算表达式进行求值的命令行或窗口程序。
通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对汇编语言基本语言要素和流程结构的理解,针对汇编语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
得到软件工程的综合训练,提高解决实际问题的能力。
二.设计任务
1、查阅文献资料,一般在5篇以上;
2、通过键盘输入表达式,进行针对整数的“加减乘除”四则运算表达式进行求值,有良好的界面;
3、完成软件结构设计和算法设计;
4、完成系统的软件开发和测试工作;
5、撰写设计说明书;
6、做好答辩工作。
三.主要内容、功能及技术指标
1、实现功能及指标:
①使用Win32的窗口程序模式,实现表达式求值程序及测试界面程序的设计与开发;②支持整数的四则运算、位运算和小括号等;③使用文本框对表达式进行交互式编辑和输出。
2、问题分析及解决方案框架确定:
充分地分析和理解问题本身,弄清要求做什么。
在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。
最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系,并画出函数之间的调用关系图。
3、详细设计和编码:
定义相应的存储结构,确定各个函数的算法,并画出流程图,在此基础上进行代码设计,每个明确的功能模块程序一般不超过200行,否则要进一步划分。
4、完成课程设计报告
①需求和规格说明:
设计题目和问题描述:
题目要解决的问题是什么;
②设计思路:
主要算法思想,程序功能图,函数之间的调用关系图;
设计表示:
每个函数或过程的功能,列出每个过程或函数所调用的过程或函数,并画出各函数的流程图;
详细设计:
主要算法的伪代码;
③调试报告:
调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等;
④程序实现注释;
⑤附录:
源程序清单和结果。
如果题目规定了测试数据,则结果要求包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。
四.提交的成果
1.设计说明书一份,内容包括:
1)中文摘要100字;关键词3-5个;
2)前言;
3)系统分析(包含需要的系统流程图);
4)系统总体设计(包含总体软件结构图、总体数据结构);
5)详细设计;
6)系统测试(包含测试方案、测试用例、测试结果及软件可靠性分析);
7)软件使用说明书(核心界面说明);
8)设计总结、参考文献、致谢等。
2.刻制光盘一张。
五.主要参考文献
1王爽.汇编语言(第二版).清华大学出版社,2008。
2沈美明,温冬婵.IBM-PC汇编语言程序设计(第二版).清华大学出版社,2001。
3[美]KipR.Irvine著,温玉洁,等译.Intel汇编语言程序设计(第五版).电子工业出版社,2007。
4钱晓捷.汇编语言程序设计(第二版).电子工业出版社,2003。
5罗云彬.Windows环境下32位汇编语言程序设计(第二版).电子工业出版社,2006。
6WindowsAPI函数参考手册.人民邮电出版社,2002。
六.各阶段时间安排(共1周):
日期
内容
地点
星期一
教师讲解设计要求,准备参考资料
机房
星期二
分析系统,方案设计
机房
星期三
方案设计,编程
机房
星期四
编程
机房
星期五
编程,答辩
机房
摘要
随着时代的进步,人们不再使用古代的计算器。
取而代之的是现今利用计算机编程技术的产品——计算器,这节省了人们大量的计算时间。
通过电流在晶体管等上面的存储信息,将人们想要计算的数字,通过重复的加减乘除运算从而计算实现出来。
本程序是利用汇编语言的编译环境masmplus来实现的。
程序通过将读入的中缀表达式转换为后缀表达式,然后读取后缀表达式,输出结果。
关键字:
汇编语言;Masmplus;中缀表达式;后缀表达式
1概述
1.1课程了解
表达式计算是实现程序设计语言的基本问题之一。
设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。
在计算机中,算术表达式由常量、变量、运算符和括号组成。
由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。
在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。
在运算之后输出正确运算结果。
1.2课程设计目的
1.要求学生达到熟练掌握汇编语言的基本知识和技能。
2.了解并掌握汇编语言的设计方法,具备初步的独立分析和设计能力。
3.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
4.培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
5.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
1.3课程设计内容
程序功能:
对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。
设计一个表达式求值的程序。
该程序必须可以接受包含(,),+,-,*,/,%,和^(求幂运算符,a^b=ab)的中缀表达式,并求出结果。
如果表达式正确,则输出表达式的结果;如果表达式非法,则输出错误信息。
算法运行:
将输入的中缀表达式改为后缀表达式,并进行运算。
算法输出:
输出后缀表达式和表达式运算结果。
1.4系统功能模块的划分
“表达式求值”包括四个模块:
保存输入的操作数和运算符;比较各个元素的优先级高低;对算术表达式进行四则运算;输出所得的结果。
2系统需求分析
2.1系统目标
设计一个程序,演示用算符优先法对算术表达式求值的过程。
利用算符优先关系,实现对算术四则混合运算表达式的求值。
其中涉及到对输入数据和运算符号的保存,比较各个元素之间优先级高低,算法完成清零和按回车换行按等号出结果等问题。
2.2主体功能
能够处理以字符序列的形式输入的不含变量的实数表达式,正确处理负数与小数,判断表达式是否语法正确(包含分母不能为零的情况),正确实现对算术四则混合运算表达式的求值,能够将计算中遇到的问题和结果以文件的形式予以存储。
2.3开发环境
Masmplus
2.4系统功能模块的分析
保存输入的操作数和运算符:
只要功能就是把输入的操作数字和运算符号保存在程序中,再经过子程序的调用,从而来完成算法的计算;比较各个元素的优先级高低:
在输入操作数和运算符号以后,应该先比较元素运算符号的优先级高低从而来决定算法的先后;对算术表达式进行四则运算:
这是计算模块的功能,对已经保存好的操作数和运算符号根据优先级的高低来进行运算;输出结果:
将最后运算所得的结果输出。
3系统分析
3.1系统总体分析
图3.1系统总体分析流程图
图3.1讲述在算法的开始,先保存输入到程序的操作数和运算符并且比较各个运算符之间的优先级先后,然后才能进行计算。
最后,若是输入的表达式错误则会输出错误指令,若是正确将会输出此表达式的计算结果。
3.2优先级的判断
取得元素优先级低
取得元素优先级高
图3.2判断优先级模块流程图
图3.2是子程序判断元素优先级的流程图。
若是取得的元素优先级低则返回“<”,若是取得的优先级高,则输出“>”。
3.3表达式的四则运算
符号为*符号为+
符号为/符号为-
图3.3四则运算模块流程图
图3.3是子程序运算模板流程图。
先输入操作数和运算符,最后得到结果。
4系统详细设计
我们在编写整体程序代码的时候应该先行编写各个子程序模块,在确定输入操作数和运算符的存储和确定优先级的高低才能进行一个算法表达式的运算。
4.1在汇编环境下输入并保存操作数
DSEGSEGMENT
STR1DB0AH,0DH,'pleaseinputtheexpression:
("N"jumpout)$'
SIGN1DW0
SIGN2DW0
SIGN3DW0
NUMBDW20HDUP(0)
在汇编语言的程序编码坏境下判断数字是否输入完毕,判断括号是否是配对的并且保存已经输入的数值。
4.2保存运算符和比较运算符的优先级
NUMBDW20HDUP(0)
MARKDB'A'
DB10HDUP(0);
ERRORDB'YOURINPUTAREWRONG$'
DSEGENDS
DISPMACROM
LEADX,M
MOVAH,9
INT21H
ENDM
CHOICEMACROASC1,HAO1,HH
CMPAL,ASC1;
JNEOTHER&HAO1;
MOVCH,HH;
JMPOTHER7;
ENDM
CSEGSEGMENT
START:
ASSUMECS:
CSEG,DS:
DSEG
CALLCLEAR
MOVAX,DSEG;
MOVDS,AX;
LEADI,NUMB;
LEASI,MARK;
DISPSTR1
CALLCR
disperror
MOVAX,0
MOVDX,0
MOVBX,0
MOVCX,0
STA1:
CALLCR
INPUT:
MOVAH,01;
INT21H;
CMPAL,'N'
JEJ_SHU
CMPAL,'='
JEPD
CMPAL,28H;
JBINPUT;
CMPAL,39H;
JAINPUT;
CMPAL,2FH
JBEJUD
INCWORDPTRSIGN1
SUBAL,30HMOVAH,0;
XCHGAX,[DI];
MOVBX,10;
MULBX;
XCHGAX,[DI];
ADD[DI],AX;
JMPINPUT;
PD:
CMPWORDPTRSIGN2,0JEJUD;
JMPBC;
JUD:
CMPWORDPTRSIGN1,0
JNEFUH;
CMPAL,'-'
JNEFUH1
MOVDX,0
MOV[DI],DX
FUH:
ADDDI,2;
MOVWORDPTRSIGN1,0;
FUH1:
CALLADVANCE
CMPCH,5
JNEPY
INCWORDPTRSIGN2
MOVWORDPTRSIGN3,1;
PY:
CMPCH,1
JNEAGAIN;
DECWORDPTRSIGN2
在保存输入的数值以后,继续保存输入的运算符并且给运算符赋权值,进而判断各个运算符的优先级。
将asc码转换成16进制数并判断数值指针。
4.3表达式的四则运算
JNENEXT1
SUBDI,2
XCHGBX,[DI]
SUBDI,2
XCHGAX,[DI]
IMULBX
MOV[DI],AX
ADDDI,2
JMPFINISH
NEXT1:
CMPCL,2FH
在判断好优先级以后,在子程序中判断是什么运算符便进行相应的计算,以此来完成对一个表达式进行重复的加减乘除运算。
4.4算法的清零和回车换行
JNEFINISH
SUBDI,2
XCHGBX,[DI]
SUBDI,2
SUB[DI],BX
ADDDI,2
FINISH:
POPAX
RET
MATCHENDP
ADVANCEPROC
CHOICE28H,1,5;(
OTHER1:
CHOICE29H,2,1;)
OTHER2:
CHOICE2AH,3,4;*
OTHER3:
CHOICE2FH,4,4;/
OTHER4:
CHOICE2BH,5,3;+
OTHER5:
CHOICE2DH,6,3;-
OTHER6:
CHOICE3DH,7,0;=
OTHER7:
RET
ADVANCEENDP
在程序下运算产生结果之后,要进行另外一个运算,需要输入全新的操作数和运算符,这样就会再次对优先级高低进行判断。
这个时候我们需要进行清零操作。
clearprocnear
pushax
pushbx
pushcx
pushdx
movah,06h
moval,01h
movch,0
movcl,0
movbh,0fH
movdh,18H
movdl,4FH
int10h
movbh,0
movdx,0
MOVAH,02H
MOVDL,0
INT10H
popdx
popcx
popbx
popax
ret
clearendp
在此程序中设定的等号是得出运算结果。
而回车不是得到结果,回车的功能是换行。
4.5输出计算结果
CRPROC
PUSHAX
PUSHDX
MOVah,2
MOVdl,0dh
INT21H
movah,2
MOVdl,0ah
INT21H
POPDX
POPAX
RET
CRENDP
OVER:
SUBDI,2
CMPWORDPTR[DI],0
JGEW1
NEGWORDPTR[DI]
MOVDL,'-'
MOVAH,2
INT21H
W1:
MOVBX,10000
MOVCX,5
MOVSI,0
W2:
MOVAX,[DI]
MOVDX,0
DIVBX
MOV[DI],DX
CMPAL,0
JNEW3
CMPSI,0
JNEW3
CMPCX,1
JEW3
JMPW4
W3:
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
MOVSI,1
W4:
MOVAX,BX
MOVDX,0
MOVBX,10
DIVBX
MOVBX,AX
LOOPW2
CALLCR
J_SHU1:
MOVWORDPTR[DI+2],0
CALLCR
LEADI,NUMB;
LEASI,MARK
JMPSTA1
J_SHU:
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
这段程序来说明当操作数和运算符在优先级高低确定的情况下计算出结果之后,输出。
4.6括号和负号的细节问题
CMPCH,5
JNEPY
INCWORDPTRSIGN2
MOVWORDPTRSIGN3,1
PY:
CMPCH,1
JNEAGAIN
DECWORDPTRSIGN2
在输入运算符-括号的时候,我们应该现行判断是左括号还是右括号,如果判断得是左括号则是括号标志位1。
若是右括号则括号标志位减1。
5系统测试
5.1加法运算
图5.1加法运算
5.2减法运算
图5.2减法运算
5.3乘法运算
图5.3乘法运算
5.4除法运算
图5.4除法运算
5.5混合运算
图5.5混合运算
6软件使用说明
运行程序,弹出运行结果。
输入一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。
规定操作数可以为正整数也可以为负整数,操作符为“+、-、*、/”,按等号结束并输出结果。
程序运行输出输出后缀表达式和表达式运算结果。
设计总结
汇编语言是一项实用性很强的技术,只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。
通过做这次课程设计,我受益匪浅,让我对汇编的知识有了更深的了解。
在这几天的时间里,我遇到了很多的问题,可以说是一个接一个的来,这个解决了,可是又来了一个。
有时候我觉得自己是没法再写下去了,但是,有时候我就是不会放弃的,有了不明白的地方,就和同学讨论,这让我更深切的体会到人与人之间的那种相互协调合作的机制。
本次的汇编语言课程设计是通过大量的查阅资料和搜索信息资料来完成的,在设计的过程使我掌握了许多的电脑基本技能及理解查阅资料的基本方法,同时经过我的不断查阅,理解资料,加深了对汇编语言的理解与认识。
在设计的整个过程中,我体会到了设计的快乐,和小小的成就感。
我的课设利用了很多win32和DOS的调用,有01H号的单字符输入,09H号的多字符输出,4CH的过程终止等,还有其他安逸些相关指令,在平时的学习中叶学到过,但是经过此次课设,我对汇编语言的了解会更加深刻。
当然,在短时间里不可能掌握汇编语言的全部,还需要在以后的学习中不断地实践和积累。
参考文献
[1]王爽.汇编语言(第二版).清华大学出版社,2008。
[2]沈美明,温冬婵.IBM-PC汇编语言程序设计(第二版).清华大学出版社,2001。
[3][美]KipR.Irvine著,温玉洁,等译.Intel汇编语言程序设计(第五版).电子工业出版社,2007。
[4]钱晓捷.汇编语言程序设计(第二版).电子工业出版社,2003。
[5]罗云彬.Windows环境下32位汇编语言程序设计(第二版).电子工业出版社,2006。
[6]WindowsAPI函数参考手册.人民邮电出版社,2002。
致谢
首先,我们要感谢学校给我们提供了此次课程设计的机会,能让同学们在一起学习与研究,让我们有机会对所学的理论知识进行实践。
这次机会让我们熟练的掌握了课堂上所学的理论知识,并且深度理解了某些代码所代表的意思。
加强了我们的动手能力和理解能力。
其次,我们还要特别感谢我们的汇编语言老师以及课程设计辅导老师刘树群,在他的精心辅导和帮助下,我们的设计才能得以顺利完成。
对他为我们的设计所提出的宝贵意见表示衷心的感谢!
再者,我还要感谢我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的细节错误。
最后,由衷希望学校多多开展此次类型的课程设计。
附录
DSEGSEGMENT
STR1DB0AH,0DH,'pleaseinputtheexpression:
("N"jumpout)$'
SIGN1DW0;判断数字是否输入完毕
SIGN2DW0;判断括号是否配对
SIGN3DW0;
NUMBDW20HDUP(0);保存输入的数值
MARKDB'A';保存输入的运算符
DB10HDUP(0);
ERRORDB'YOURINPUTAREWRONG$'
DSEGENDS
DISPMACROM
LEADX,M
MOVAH,9
INT21H
ENDM
CHOICEMACROASC1,HAO1,HH;宏定义,给运算符赋权值
CMPAL,ASC1;
JNEOTHER&HAO1;
MOVCH,HH;
JMPOTHER7;
ENDM
CSEGSEGMENT
START:
ASSUMECS:
CSEG,DS:
DSEG
CALLCLEAR
MOVAX,DSEG;
MOVDS,AX;
LEADI,NUMB;
LEASI,MARK;
DISPSTR1
CALLCR
disperror
MOVAX,0
MOVDX,0
MOVBX,0
MOVCX,0
STA1:
CALLCR
INPUT:
MOVAH,01;
INT21H;
CMPAL,'N'
JEJ_SHU
CMPAL,'=';
JEPD;是等号,进一步判断输入括号是否配对
CMPAL,28H;
JBINPUT;
CMPAL,39H;
JAINPUT;
CMPAL,2FH;判断是数字还是符号
JBEJUD;是符号转入响应操作
INCWORDPTRSIGN1;将数字标志位加一
SUBAL,30H;将asc码转16进制
MOVAH,0;
XCHGAX,[DI];
MOVBX,10;
MULBX;
XCHGAX,[DI];
ADD[DI],AX;
JMPINPUT;
PD:
CMPWORDPTRSIGN2,0;判断配对标志位
JEJUD;
JMPBC;
JUD:
CMPWORDPTRSIGN1,0;判断数值指针是否已经下移一位
JNEFUH;
CMPAL,'-'
JNEFUH1
MOVDX,0
MOV[DI],DX
FUH:
ADDDI,2;
MOVWORDPTRSIGN1,0;
FUH1:
CALLADVANCE;判定优先级,
CMPCH,5;判断输入的是否是左括号
JNEPY;不是则判断输入的是否是右括号
INCWORDPTRSIGN2;是左括号,括号标志位1
MOVWORDPTRSIGN3,1;
PY:
CMPCH,1;判断输入的是否是右括号
JNEAGAIN;
DECWORDPTRSIGN2;是右括号,括号标志位减1
AGAIN:
CMPBYTEPTR[SI],'A';判断运算符存储区是否为空
JESAVE;
CMPCH,[SI];
JASAVE;
CMPBYTEPTR[SI-1],'('
JNEYIDO
SUBSI,2
JMPINPUT
YIDO:
DECSI;
MOVCL,[SI];
CALLMATCH;判断是什么运算符并进行相应的计算
DECSI;
JMPAGAIN;
Z_Z:
JMPINPUT
J_SHU0:
JMPJ_SHU;
SAVE:
CMPCH,0;
JEOVER;
CMPCH,1;
JEZ_Z;“)”不保存,输入下一个数
INCSI;
MOV[SI],AL;
INCSI;
CMPCH,5;
JNEGO_ON;
MOVCH,2;改变(的权值
GO_ON:
MOV[SI],CH;
JMPINPUT;
BC:
LEADX,ERROR;
MOVAH,9;
INT21H;
JMPJ_SHU;
OVER1:
JMPOVER;
MATCHPROC;子程序,进行相应的运算
PUSHAX;
XORAX,AX
XORBX,BX
CMPCL,2AH;乘法运算
JNENEXT1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 表达式 求值 程序设计 说明书