表达式求值程序设计 说明书.doc_第1页
表达式求值程序设计 说明书.doc_第2页
表达式求值程序设计 说明书.doc_第3页
表达式求值程序设计 说明书.doc_第4页
表达式求值程序设计 说明书.doc_第5页
免费预览已结束,剩余32页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言实训 课程设计任务书题 目: 表达式求值程序 班 级: 计算机科学与技术一班 学生姓名: 赵旭尧 学 号: 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 美Kip R.Irvine著,温玉洁,等译.Intel汇编语言程序设计(第五版).电子工业出版社, 2007。4 钱晓捷.汇编语言程序设计(第二版). 电子工业出版社, 2003。5 罗云彬.Windows环境下32位汇编语言程序设计(第二版).电子工业出版社, 2006。6 Windows API函数参考手册.人民邮电出版社, 2002。六 各阶段时间安排(共1周):日期内容地点星期一教师讲解设计要求,准备参考资料机房星期二分析系统,方案设计机房星期三方案设计,编程机房星期四编程机房星期五编程,答辩机房摘要随着时代的进步,人们不再使用古代的计算器。取而代之的是现今利用计算机编程技术的产品计算器,这节省了人们大量的计算时间。通过电流在晶体管等上面的存储信息,将人们想要计算的数字,通过重复的加减乘除运算从而计算实现出来。本程序是利用汇编语言的编译环境masmplus来实现的。程序通过将读入的中缀表达式转换为后缀表达式,然后读取后缀表达式,输出结果。关键字:汇编语言;Masmplus;中缀表达式;后缀表达式目录1 概述11.1课程了解11.2 课程设计目的11.3 课程设计内容11.4系统功能模块的划分12 系统需求分析22.1 系统目标22.2 主体功能22.3 开发环境22.4系统功能模块的分析23系统分析33.1系统总体分析33.2优先级的判断43.3表达式的四则运算44系统详细设计54.1在汇编环境下输入并保存操作数54.2保存运算符和比较运算符的优先级54.3表达式的四则运算84.4算法的清零和回车换行84.5输出计算结果104.6括号和负号的细节问题125系统测试145.1加法运算145.2减法运算145.3乘法运算145.4除法运算155.5混合运算156软件使用说明16设计总结17参考文献18致谢19附录201 概述 1.1课程了解表达式计算是实现程序设计语言的基本问题之一。设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。在运算之后输出正确运算结果。1.2 课程设计目的 1要求学生达到熟练掌握汇编语言的基本知识和技能。 2了解并掌握汇编语言的设计方法,具备初步的独立分析和设计能力。 3提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。 4培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。5初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。 1.3 课程设计内容 程序功能:对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。设计一个表达式求值的程序。该程序必须可以接受包含(,),+,-,*,/,%,和(求幂运算符,ab=ab)的中缀表达式,并求出结果。如果表达式正确,则输出表达式的结果;如果表达式非法,则输出错误信息。算法运行:将输入的中缀表达式改为后缀表达式,并进行运算。算法输出:输出后缀表达式和表达式运算结果。1.4系统功能模块的划分“表达式求值”包括四个模块:保存输入的操作数和运算符;比较各个元素的优先级高低;对算术表达式进行四则运算;输出所得的结果。2 系统需求分析 2.1 系统目标 设计一个程序,演示用算符优先法对算术表达式求值的过程。利用算符优先关系,实现对算术四则混合运算表达式的求值。其中涉及到对输入数据和运算符号的保存,比较各个元素之间优先级高低,算法完成清零和按回车换行按等号出结果等问题。2.2 主体功能 能够处理以字符序列的形式输入的不含变量的实数表达式,正确处理负数与小数,判断表达式是否语法正确(包含分母不能为零的情况),正确实现对算术四则混合运算表达式的求值,能够将计算中遇到的问题和结果以文件的形式予以存储。 2.3 开发环境 Masmplus2.4系统功能模块的分析保存输入的操作数和运算符:只要功能就是把输入的操作数字和运算符号保存在程序中,再经过子程序的调用,从而来完成算法的计算;比较各个元素的优先级高低:在输入操作数和运算符号以后,应该先比较元素运算符号的优先级高低从而来决定算法的先后;对算术表达式进行四则运算:这是计算模块的功能,对已经保存好的操作数和运算符号根据优先级的高低来进行运算;输出结果:将最后运算所得的结果输出。3系统分析3.1系统总体分析 保存输入的运算符保存输入的数据计算表达式是否合法输出表达是值输出错误提示结束图3.1系统总体分析流程图图3.1讲述在算法的开始,先保存输入到程序的操作数和运算符并且比较各个运算符之间的优先级先后,然后才能进行计算。最后,若是输入的表达式错误则会输出错误指令,若是正确将会输出此表达式的计算结果。返回“”图3.2判断优先级模块流程图图3.2是子程序判断元素优先级的流程图。若是取得的元素优先级低则返回“”。3.3表达式的四则运算输出结果为x+y输出结果x*y 符号为*符号为+四则运算(x,y)输出结果为x/y 符号为/符号为-输出结果为x-y 图3.3 四则运算模块流程图图3.3是子程序运算模板流程图。先输入操作数和运算符,最后得到结果。4系统详细设计 我们在编写整体程序代码的时候应该先行编写各个子程序模块,在确定输入操作数和运算符的存储和确定优先级的高低才能进行一个算法表达式的运算。4.1在汇编环境下输入并保存操作数DSEG SEGMENTSTR1 DB 0AH,0DH, please input the expression:(Njump out)$SIGN1 DW 0SIGN2 DW 0SIGN3 DW 0NUMB DW 20H DUP(0)在汇编语言的程序编码坏境下判断数字是否输入完毕,判断括号是否是配对的并且保存已经输入的数值。4.2保存运算符和比较运算符的优先级NUMB DW 20H DUP(0) MARK DB A DB 10H DUP(0) ;ERROR DB YOUR INPUT ARE WRONG$DSEG ENDSDISP MACRO MLEA DX,MMOV AH,9INT 21HENDMCHOICE MACRO ASC1,HAO1,HH CMP AL,ASC1 ;JNE OTHER&HAO1 ;MOV CH,HH ;JMP OTHER7 ;ENDMCSEG SEGMENTSTART:ASSUME CS:CSEG,DS:DSEGCALL CLEARMOV AX,DSEG ;MOV DS,AX ;LEA DI,NUMB ;LEA SI,MARK ;DISP STR1CALL CRdisp errorMOV AX,0MOV DX,0MOV BX,0MOV CX,0STA1 : CALL CRINPUT:MOV AH,01 ;INT 21H ;CMP AL,NJE J_SHUCMP AL,= JE PD CMP AL,28H ;JB INPUT ;CMP AL,39H ;JA INPUT ;CMP AL,2FH JBE JUD INC WORD PTR SIGN1 SUB AL,30H MOV AH,0 ;XCHG AX,DI ;MOV BX,10 ;MUL BX ;XCHG AX,DI ;ADD DI,AX ;JMP INPUT ;PD:CMP WORD PTR SIGN2,0 JE JUD ;JMP BC ;JUD:CMP WORD PTR SIGN1,0 JNE FUH ;CMP AL,-JNE FUH1MOV DX,0MOV DI,DXFUH:ADD DI,2 ;MOV WORD PTR SIGN1,0;FUH1:CALL ADVANCECMP CH,5 JNE PY INC WORD PTR SIGN2MOV WORD PTR SIGN3,1;PY:CMP CH,1 JNE AGAIN ;DEC WORD PTR SIGN2在保存输入的数值以后,继续保存输入的运算符并且给运算符赋权值,进而判断各个运算符的优先级。将asc码转换成16进制数并判断数值指针。4.3表达式的四则运算JNE NEXT1SUB DI,2 XCHG BX,DISUB DI,2XCHG AX,DIIMUL BXMOV DI,AXADD DI,2JMP FINISHNEXT1:CMP CL,2FH在判断好优先级以后,在子程序中判断是什么运算符便进行相应的计算,以此来完成对一个表达式进行重复的加减乘除运算。4.4算法的清零和回车换行JNE FINISHSUB DI,2XCHG BX,DISUB DI,2SUB DI,BXADD DI,2FINISH:POP AXRETMATCH ENDPADVANCE PROCCHOICE 28H,1,5 ;(OTHER1: CHOICE 29H,2,1 ;)OTHER2: CHOICE 2AH,3,4 ;*OTHER3: CHOICE 2FH,4,4 ;/OTHER4: CHOICE 2BH,5,3 ;+OTHER5: CHOICE 2DH,6,3 ;-OTHER6: CHOICE 3DH,7,0 ;=OTHER7: RETADVANCE ENDP在程序下运算产生结果之后,要进行另外一个运算,需要输入全新的操作数和运算符,这样就会再次对优先级高低进行判断。这个时候我们需要进行清零操作。clear proc nearpush axpush bxpush cxpush dxmov ah,06hmov al,01hmov ch,0mov cl,0mov bh,0fHmov dh,18Hmov dl,4FHint 10hmov bh,0mov dx,0MOV AH,02HMOV DL,0INT 10Hpop dxpop cxpop bxpop axretclear endp在此程序中设定的等号是得出运算结果。而回车不是得到结果,回车的功能是换行。4.5输出计算结果CR PROCPUSH AXPUSH DXMOV ah,2MOV dl,0dhINT 21Hmov ah,2MOV dl,0ahINT 21HPOP DXPOP AXRETCR ENDPOVER:SUB DI,2CMP WORD PTRDI,0JGE W1NEG WORD PTRDI MOV DL,-MOV AH,2INT 21HW1:MOV BX,10000MOV CX,5MOV SI,0W2:MOV AX,DIMOV DX,0DIV BXMOV DI,DXCMP AL,0JNE W3CMP SI,0JNE W3CMP CX,1JE W3JMP W4W3:MOV DL,ALADD DL,30HMOV AH,2INT 21HMOV SI,1W4:MOV AX,BXMOV DX,0MOV BX,10DIV BXMOV BX,AXLOOP W2CALL CRJ_SHU1:MOV WORD PTRDI+2,0CALL CRLEA DI,NUMB ;LEA SI,MARKJMP STA1J_SHU:MOV AH,4CHINT 21HCSEG ENDSEND START这段程序来说明当操作数和运算符在优先级高低确定的情况下计算出结果之后,输出。4.6括号和负号的细节问题CMP CH,5 JNE PY INC WORD PTR SIGN2 MOV WORD PTR SIGN3,1PY:CMP CH,1 JNE AGAIN DEC WORD PTR SIGN2 在输入运算符-括号的时候,我们应该现行判断是左括号还是右括号,如果判断得是左括号则是括号标志位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 美Kip R.Irvine著,温玉洁,等译.Intel汇编语言程序设计(第五版).电子工业出版社, 2007。4 钱晓捷.汇编语言程序设计(第二版). 电子工业出版社, 2003。5 罗云彬.Windows环境下32位汇编语言程序设计(第二版).电子工业出版社, 2006。6 Windows API函数参考手册.人民邮电出版社, 2002。致谢首先,我们要感谢学校给我们提供了此次课程设计的机会,能让同学们在一起学习与研究,让我们有机会对所学的理论知识进行实践。这次机会让我们熟练的掌握了课堂上所学的理论知识,并且深度理解了某些代码所代表的意思。加强了我们的动手能力和理解能力。其次,我们还要特别感谢我们的汇编语言老师以及课程设计辅导老师刘树群,在他的精心辅导和帮助下,我们的设计才能得以顺利完成。对他为我们的设计所提出的宝贵意见表示衷心的感谢!再者,我还要感谢我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的细节错误。最后,由衷希望学校多多开展此次类型的课程设计。附录DSEG SEGMENT STR1 DB 0AH,0DH, please input the expression:(Njump out)$ SIGN1 DW 0 ;判断数字是否输入完毕 SIGN2 DW 0 ;判断括号是否配对 SIGN3 DW 0 ; NUMB DW 20H DUP(0) ;保存输入的数值 MARK DB A ;保存输入的运算符 DB 10H DUP(0) ; ERROR DB YOUR INPUT ARE WRONG$DSEG ENDS DISP MACRO M LEA DX,M MOV AH,9 INT 21HENDMCHOICE MACRO ASC1,HAO1,HH ;宏定义,给运算符赋权值 CMP AL,ASC1 ; JNE OTHER&HAO1 ; MOV CH,HH ; JMP OTHER7 ;ENDMCSEG SEGMENTSTART: ASSUME CS:CSEG,DS:DSEG CALL CLEAR MOV AX,DSEG ; MOV DS,AX ; LEA DI,NUMB ; LEA SI,MARK ; DISP STR1 CALL CR disp error MOV AX,0 MOV DX,0 MOV BX,0 MOV CX,0STA1 : CALL CR INPUT: MOV AH,01 ; INT 21H ; CMP AL,N JE J_SHU CMP AL,= ; JE PD ;是等号,进一步判断输入括号是否配对 CMP AL,28H ; JB INPUT ; CMP AL,39H ; JA INPUT ; CMP AL,2FH ;判断是数字还是符号 JBE JUD ;是符号转入响应操作 INC WORD PTR SIGN1 ;将数字标志位加一 SUB AL,30H ;将asc码转16进制 MOV AH,0 ; XCHG AX,DI ; MOV BX,10 ; MUL BX ; XCHG AX,DI ; ADD DI,AX ; JMP INPUT ;PD: CMP WORD PTR SIGN2,0 ;判断配对标志位 JE JUD ; JMP BC ;JUD: CMP WORD PTR SIGN1,0 ;判断数值指针是否已经下移一位 JNE FUH ; CMP AL,- JNE FUH1 MOV DX,0 MOV DI,DXFUH: ADD DI,2 ; MOV WORD PTR SIGN1,0;FUH1: CALL ADVANCE ;判定优先级, CMP CH,5 ;判断输入的是否是左括号 JNE PY ;不是则判断输入的是否是右括号 INC WORD PTR SIGN2 ;是左括号,括号标志位1 MOV WORD PTR SIGN3,1;PY: CMP CH,1 ;判断输入的是否是右括号 JNE AGAIN ; DEC WORD PTR SIGN2 ;是右括号,括号标志位减1AGAIN: CMP BYTE PTRSI,A;判断运算符存储区是否为空 JE SAVE ; CMP CH,SI ; JA SAVE ; CMP BYTE PTRSI-1,( JNE YIDO SUB SI,2 JMP INPUTYIDO: DEC SI ; MOV CL,SI ; CALL MATCH ;判断是什么运算符并进行相应的计算 DEC SI ; JMP AGAIN ;Z_Z: JMP INPUT J_SHU0: JMP J_SHU ;SAVE: CMP CH,0 ; JE OVER ; CMP CH,1 ; JE Z_Z ;“)”不保存,输入下一个数 INC SI ; MOV SI,AL ; INC SI ; CMP CH,5 ; JNE GO_ON ; MOV CH,2 ;改变(的权值GO_ON: MOV SI,CH ; JMP INPUT ;BC: LEA DX,ERROR ; MOV AH,9 ; INT 21H ; JMP J_SHU ;OVER1: JMP OVER ; MATCH PROC ;子程序,进行相应的运算 PUSH AX ; XOR AX,AX XOR BX,BX CMP CL,2AH ;乘法运算 JNE NEXT1 SUB DI,2 XCHG BX,DI SUB DI,2 XCHG AX,DI IMUL BX MOV DI,AX ADD DI,2 JMP FINISHNEXT1: CMP CL,2FH ;除法运算 JNE NEXT2 SUB DI,2 XCHG BX,DI SUB DI,2 XCHG AX,DICWD IDIV BX MOV DI,AX ADD DI,2 JMP FINISHNEXT2: CMP CL,2BH ;加法运算 JNE NEXT3 SUB DI,2 XCHG BX,DI SUB DI,2 ADD DI,BX ADD DI,2 JMP FINISHNEXT3: CMP CL,2DH ;减法运算 JNE FINIS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论