微机原理与接口技术课设报告
- 格式:doc
- 大小:262.34 KB
- 文档页数:21
课设报告福建工程学院软件学院题目:计算器班级: 1102姓名:王*华学号: 3112113251 指导老师:郑旭丹日期: 2013年 1 月 3 日目录1、设计目的 (1)2、概要设计 (1)2.1 系统总体分析 (1)2.2 主模块框图及说明 (1)3、详细设计 (3)3.1 主模块及子模块概述 (3)3.2 各模块详细设计 (5)4、程序调试 (9)4.1 运行界面分析 (9)4.2 算法分析 (9)4.2 调试过程与分析 (9)5、心得体会 (12)5.1 设计体会 (12)5.2 系统改进 (12)附录: (13)1、设计目的通过课程设计,加深对“微机原理与接口技术”、“汇编语言”、等知识的掌握与综合运用,和提高了对汇编编程的认识,怎样去用汇编编程软件。
本次实验是编写数的四则运算,培养分析解决实际问题的能力,提高自身的创新意识及动手能力,为后续相关课程的学习,以及毕业后从事微机硬件及软件开发打下基础,积累初步的经验。
提高了就业机会的概率。
2、概要设计2.1 系统总体分析本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算比如,十进制数的加减乘除四则运算。
我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。
此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。
2.2 主模块框图及说明此程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。
程序流程图说明:通过流程图,可以看出程序开始运行时,首先输出提示语句,当用户输入第一个数时并按下回车键,屏幕会弹出提示语句请输入你要进行的运算是‘+’,‘-’,‘*’,‘/’这些字符,若不是会报错,而后会提示请输入第二个数并按下回车键。
最后将运算的结果显示在屏幕上,并返回主题程序,使用户可以重新输入。
程序流程图如图2-1所示:(主模块框图、程序流程图)否3、详细设计3.1 主模块及子模块概述主题模块实现变量的定义,提示输入信息的显示,调用各个功能子模块,判断输入的内容是否符合要求,如果符合要求,则按照用户所输入的运算符即‘+’‘-’‘*’‘/’来调用加减乘除等子模块完成运算。
当用户键入‘enter’键或者‘=’键时将结果显示在屏幕上。
在此,对变量的定义类型进行说明,因为本次课程设计所要求设计的计算器要能够对四位数进行加减乘除运算。
子模块说明:主要的子模块是input子模块,功能是输入;nest1子模块,功能是完成加法运算;nest2子模块,功能是完成减法运算;nest3子模块,功能是完成乘法运算;nest4子模块,功能是完成除法运算。
其它模块将在模块详细设计部分中进行说明。
程序主题部分源代码如下:DISP MACRO V ARMOV AH,2MOV DL,V ARINT 21HENDMDATAS SEGMENTDATA0 DB'PLEASE INPUT A NUMBER(0-999):','$'DATA1 DB' over flow input again:','$'DATA2 DB'PLEASE INPUT ANOTHER NUMBER(EXP:123)','$'DATA3 DB'PLEASE INPUT AN OPREATOR:','$'DATA4 DB'THE OPERATOR IS WRONG,INPUT AGAIN:','$'OPER DB?FLAG DB 0FLAG1 DB 0DATA DW 3 DUP(?)DATAS ENDSSTACKS SEGMENTDW 256 DUP(?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV DI,OFFSET DATA0 ;提示信息CALL DISPLMOV SI,0 ;SI作为数组下标CALL INPUTCALL NEWLINEMOV DI,OFFSET DATA3 ;提示信息CALL DISPLAGAIN:MOV AH,1 ;1号功能输入四则运算符INT 21HCMP AL,'+';判断输入的是不是+,-,*,/ JE NEXT0CMP AL,'-'JE NEXT0CMP AL,'*'JE NEXT0CMP AL,'/'JE NEXT0CALL NEWLINE ;输入的运算符不合法,重新输入MOV DI, OFFSET DATA4CALL DISPLJMP AGAINNEXT0:MOV OPER,AL ;保存运算符CALL NEWLINEMOV DI,OFFSET DATA2 ;输入第二个操作数CALL DISPLMOV SI,2CALL INPUTMOV AX,DATA[0]MOV BX,DATA[2]CMP OPER,'+';判断是那种操作,进行运算JE NEXT1 ;调用加法运算模块CMP OPER,'-'JE NEXT2 ;调用减法运算模块CMP OPER,'*'JE NEXT3 ;调用乘法运算模块CMP OPER,'/'JE NEXT4 ;调用除法运算模块3.2 各模块详细设计完成输入功能的模块input模块。
Int 21H的01号功能调用可以直接接收键入的字符,当有键按下时,首先检查是否是ctrl+break,若是,则执行退出命令;否则将键值送入AL寄存器并回显。
Input模块源代码如下:流程图、必要说明及核心代码输入函数INPUT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV BX,0 ;BX存放十进制数CLCMOV DX,0L0:;----------输入数字----------MOV AH,1 ;判断数字是否合法INT 21HCMP AL,0DHJE L2SUB AL,30HJL L1CMP AL,9JG L1;---------转换成十进制数-------MOV AH,0 ;转换成10进制数放入内存XCHG AX,BXMOV CX,10MUL CXADD AX,BXJC L1XCHG AX,BXJMP L0L1:MOV DX,0MOV BX,0CALL NEWLINECALL ERRORJMP L0L2:CMP DX,0JNZ L1MOV DATA[SI],BXMOV DX,0POP DXPOP CXPOP BXPOP AXRETINPUT ENDP流程图符号输入函数AGAIN:MOV AH,1 ;1号功能输入四则运算符INT 21HCMP AL,'+';判断输入的是不是+,-,*,/ JE NEXT0CMP AL,'-'JE NEXT0CMP AL,'*'JE NEXT0CMP AL,'/'JE NEXT0CALL NEWLINE ;输入的运算符不合法,重新输入MOV DI, OFFSET DATA4CALL DISPLJMP AGAIN显示函数PRINT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV CX,0MOV BX,10MOV AX,DATA[DI]LAST:MOV DX,0 ;除10压栈DIV BXPUSH DXINC CXCMP AX,0JNZ LASTAGE:POP DX ;出栈输出OR DX,30HMOV AH,2INT 21HLOOP AGEPOP DXPOP CXPOP BXPOP AXRETPRINT ENDPCODES ENDSEND START4、程序调试4.1 运行界面分析将源程序输入编辑程序中,检查无误后经汇编、连接后装入系统运行界面如图程序的运行界面显示成功,屏幕上显示“please input number:”4.2 算法分析在程序运行成功时界面显示“please input number”输入一个数后按下回车键,界面会显示出”please input an operator”输入一个运算符,界面会自动跳出”please input another number”输入另一个数后按下回车键,运算公式以及运算结果会显示在屏幕上。
4.2 调试过程与分析对程序源代码进行功能调试和功能验证。
程序代码运行成功后,分别检验测试其加、减、乘、除功能,并对结果进行分析。
加法运算:计算1+88=89 如图显示减法运算:计算100—50=50 如图显示乘法运算:计算2*44=88 如图显示除法运算:计算99/3=33 如图显示5心得体会5.1 设计体会经过这次课程设计,我学到了很多东西,其中包括知识方面的,还有其他方面的。
首先让我认识到,做好一件事,做成功一件事是不容易的,但是你只要坚持不懈的努力,不断的发挥自己的智慧去思索去探究,你会欣慰的发现自己正向着成功一步步迈进。
这次课程设计使我对汇编语言程序设计这门课程有了进一步的理解和认识,使我学到了许多编程语言以及算法设计方面的知识,同时也锻炼了我的耐心和意志,增长了我的实践能力。
这次课程设计我所选的题目是使用汇编语言设计一个具有加减乘除基本运算功能的简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。
通过使用汇编语言设计实现简单计算器,我进一步了解和掌握了对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用。
通过这次汇编语言程序课程设计,我学到了许多东西,同时也发现了一些不足之处,在以后的学习中我会逐步弥补这些不足。
总而言之,此次课程设计使我受益匪浅。
5.2 系统改进本次课程设计我虽然完成了题目的要求,但是其中也还存在一些不足之处,这些不足的地方有待与改进与完善。
系统需要改进的地方有以下三点:一,最主要的就是程序的健壮性不是很完善;二,对大数的加减乘除运算功能不足;三,程序代码算法的优化不足。
本次课程设计我认为最需要改进的就是程序的健壮性。
通过这次课程设计,我发现一个好的汇编程序不仅要正确可行,还要有健壮性,当用户输入数据非法,使运行环境改变时,程序能恰当地作出反应或进行处理,不会产生莫名其妙的输出结果。