广东技术师范学院天河学院
汇编语言
课程设计报告
实训题目 简易计算器
系 别 计 算 机 系 专业班级 软件设计 111 班
姓 名 沈学发 孟欣、陈法威、陈建维、李斯恺、曾炳忠、李智超 学 号 (20110411431)29、28、33、30、36、31、32
指导教师 胡安明 所属系部 计算机科学与技术系
目录
一、 程序功能设计论证 ................................ 2
二、程序流程图及其说明 ............................... 3
1 程序流程图 ...................................... 3
2 流程图说明 ...................................... 4
三、程序调试 ......................................... 4
1.初始界面 ........................................ 4
2.加法运算实现界面 ................................ 4
3.除法运算实现 .................................... 5
4.减法运算 ........................................ 5
5. 乘法运算实现 ................................... 6
6.清屏后的界面 .................................... 6
四、心得体会 ......................................... 7
五、参考文献 ......................................... 7
六、附录(代码) ....................................... 8
1
一、程序功能设计论证
该课程设计的任务是做一个简易计算器,可以实现加减乘除四则运算。我们要解决的问题有:以什么方式输入数字、判断是进行什么运算、运算过程中的进位和借位问题以及如何实现清屏等问题。
首先我们要解决的是输入问题,这里我们用INT 21H的一号功能调用来进行输入;然后我们要进行的是判断是进行何种运算,当输入的运算符号不是“+、-、*、/”中的一种时,则报错,提示重新输入。当输入的是 c或C时,则清屏;当输入的是q或Q时,则退出程序。
由于运算过程中出现的进借位问题,会导致输出的结果为一位数,二位数,三位数或者是负数,所以在选择输出的方式时若是选9号功能调用会很不方便,因为9号功能调用要求有一个输出字符的缓冲区,由于输出的结果形式太多,缓冲区太难确定,而且若结果为负数,负号也得事先进行设置,所以单字符输出是一个合理的选择。
最后还要对这个简易计算器进行功能完善,例如为了使程序符合我们使用者的操作习惯,我们可以添加按回车键换行输入,即当键入回车键后,可以换行重新输入;可以设置按C或c键清屏,当键入C或c键时,清除整个屏幕上的输入和输出的字符并可以重新输入并运算;当按下Q或q键退出程。
2
二、程序流程图及其说明
1 程序流程图
3
2 流程图说明
该程序流程图简要地表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的程序的一个总体的框架。
通过流程图,可以看出程序开始运行时,首先输出提示语句,再输入字符,并判断输入的字符是否为Q或q,若是,则退出,不是则继续输入;判断输入的字符是否为C或c,若是,则清屏重新输入,否则继续输入;判断输入的是不是回车键,若是就回车换行输入,不是则继续输入;判断输入的是否为数字以及+,-,=这些字符,若不是会报错,是则将其存储到定义的数据区里面,再判断输入的是进行什么运算符,进行相应的运算,输出结果。继续上面的步骤
三、程序调试
1.初始界面
运行程序后,进入程序运行初始界面,如图:
2.加法运算实现界面
不是0~9,+,-,=号或输入不正确时,程序会有报错提示,并提示重新输入,运行界面如图:
4
3.除法运算实现 如图:
4.减法运算 如图:
5
5. 乘法运算实现
如图:
6.清屏后的界面
当输入C或c时则清屏,程序运行后清除整个窗口内输入和输出的字符并可以继续输入并计算。如图:
6
四、心得体会
经调试,基本上任务要求设计的所有功能都实现,调试出的计算结果均正确。一周的课程设计结束了,给我的总体感觉就是忙碌但充实,而且真正学到了东西。
以前做课程课计的时候总是前几天时间玩,后面几天才开始做,不过这次却是一直都在做这个课程设计,因为在网上我根本搜不到别人写的简易计算机的资料,所以从构思到设计流程图到编写源程序都是我一个人独立完成的,虽然这个过程比较痛苦,但是我真正的去体验了,当我编写的程序一遍一遍地报错,出的结果一次次和正确结果有出入的时候我真的好想放弃,但是我选择了坚持,通过调试程序,一步步地看寄存器和数据区的变化,最终发现了错误并改正了错误,当运行的结果全都正确的时候我真的好激动,好有成就感,因为这是我第一次自己独立地编写的长达两百多条的程序,虽然结构看上去有点乱,语句不够精练,但是不管怎样,我终于能够实现要求的功能了。
另外,这次无论是设计个这程序还是写课程设计报告都让我学到了好多东西,有对课本知识更加深入的了解和掌握,也有对于流程图的设计以及绘制还有word的一些用法和排版等,都让我受益匪浅,
总之,非常感谢学校和老师给我们安排了这次课程设计,不仅让我掌握了更多的知识,还让我领会到要把一件事情做好并真正有所收获还得靠自己独立地去完成并坚持不懈!希望在以后的学习中还能多搞几次这种课程设计。
五、参考文献
[1] 周佩玲、彭虎、傅忠谦.微机原理与接口技术(基于16位机). 北京:电子工业出版社.,2005
[2] 马春燕.微机原理与接口技术(基于32位机)实验与学习辅导. 北京:电子工业出版社.,2007
[3] 何小海、严华. 微机原理与接口技术.北京:科学出版社,2006
[4] 钱晓捷. 新版汇编语言程序设计. 北京:电子工业出版社,2007
7
六、附录(代码)
完整的程序代码如下
;简单四则运算
DATAS SEGMENT
DATA0 DB ' WELCOME TO USE OUR SYSTEM ',0DH,0AH,'MADE BY YABUSHAN ',0DH,0AH,'PLEASE INPUT A NUMBER:',0DH,0AH,'$'
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:','$'
TUICHU DB 'Please press any key to continue!','$'
OPER DB ?
FLAG DB 0
FLAG1 DB 0
DATA DW 3 DUP(?)
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?)
STACKS ENDS
DISP MACRO VAR
MOV AH,2
MOV DL,VAR
INT 21H
ENDM
CODES SEGMENT
8
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
MOV DI,OFFSET DATA0 ;提示信息 CALL DISPL
MOV SI,0 ;SI CALL INPUT
CALL NEWLINE
MOV DI,OFFSET DATA3 ;
CALL DISPL
AGAIN:
MOV AH,1 ;1 INT 21H
CMP AL,'Q'
JE EXIT
CMP AL,'q'
JE EXIT
CMP AL,'C'
JE QINGPING
CMP AL ,'c'
JE QINGPING
CMP AL,'+' ;
JE NEXT0
CMP AL,'-'
JE NEXT0
CMP AL,'*'
JE NEXT0
CMP AL,'/'
JE NEXT0
作为数组下标 提示信息 号功能输入四则运算符 判断输入的是不是+,-,*,/ 9
CALL NEWLINE ;输入的运算符不合法,重新输入 MOV DI, OFFSET DATA4
CALL DISPL
JMP AGAIN
NEXT0:
MOV OPER,AL ;保存运算符
CALL NEWLINE
MOV DI,OFFSET DATA2 ;输入第二个操作数
CALL DISPL
MOV SI,2
CALL INPUT
MOV AX,DATA[0]
MOV BX,DATA[2]
CMP OPER,'+' ;判断是那种操作,进行运算 JE NEXT1
CMP OPER,'-'
JE NEXT2
CMP OPER,'*'
JE NEXT3
CMP OPER,'/'
JE NEXT4
NEXT1: ;加法运算
CLC
ADC AX,BX
JNC N1
MOV FLAG,1 ;判断是否进位
N1: MOV DATA[4],AX ;运算结果放入内存
JMP OUTPUT
NEXT2: ;减法运算
10
CLC
SBB AX,BX
JNC N2
MOV FLAG,1 ;判断是否借位 NEG AX
N2: MOV DATA[4],AX ;运算结果放入内存 JMP OUTPUT
NEXT3: ;乘法运算
CLC
MOV DX,0
MUL BX
MOV DATA[4],AX ;运算结果放入内存 JMP OUTPUT
NEXT4: ;除法运算 CLC
MOV DX,0
CMP BX,0
JNZ N4 ;判断除数是否为0 CALL NEWLINE
CALL ERROR
CALL NEWLINE
MOV DI,OFFSET DATA2
CALL DISPL
MOV SI,2
CALL INPUT
JMP NEXT4
N4: DIV BX
MOV DATA[4],AX ;运算结果放入内存
OUTPUT:
11
CALL NEWLINE
MOV DI,0 ;输出第一个操作数 CALL PRINT
DISP OPER ;输出运算符 MOV DI,2
CALL PRINT ;输出第二个操作数 DISP '='
CMP FLAG,1
JNZ NEXT5
DISP '-'
NEXT5:
MOV DI,4
CALL PRINT ;输出结果
MOV AH,4CH
INT 21H
;-----------输入函数------------
INPUT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,0 ;BX存放十进制数
CLC
MOV DX,0
L0:
;----------输入数字----------
12
MOV AH,1 ;判断数字是否合法 INT 21H
CMP AL,0DH
JE L2
SUB AL,30H
JL L1
CMP AL,9
JG L1
;---------转换成十进制数-------
MOV AH,0 ;转换成10进制数放入内存 XCHG AX,BX
MOV CX,10
MUL CX
ADD AX,BX
JC L1
XCHG AX,BX
JMP L0
L1:
MOV DX,0
MOV BX,0
CALL NEWLINE
CALL ERROR
JMP L0
L2:
CMP DX,0
JNZ L1
MOV DATA[SI],BX
MOV DX,0
13
POP DX
POP CX
POP BX
POP AX
RET
INPUT ENDP
;--------------提示信息------------ DISPL PROC NEAR
MOV AH,9
MOV DX,DI
INT 21H
RET
DISPL ENDP
;-------回车换行--------
NEWLINE PROC NEAR
PUSH AX
PUSH DX
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
;----------错误提示---------------- 14
ERROR PROC NEAR
PUSH AX
PUSH DX
MOV DX,OFFSET DATA1 MOV AH,9
INT 21H
POP DX
POP AX
RET
ERROR ENDP
;-----------显示函数-------- PRINT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX,0
MOV BX,10
MOV AX,DATA[DI]
LAST:
MOV DX,0 ;除10压栈 DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ LAST
AGE:
POP DX ;出栈输出
15
OR DX,30H
MOV AH,2
INT 21H
LOOP AGE
POP DX
POP CX
POP BX
POP AX
RET
PRINT ENDP
JMP START
QINGPING: MOV AL,0 ; MOV BH,7
MOV CH,0
MOV CL,0
MOV DH,24H
MOV DL, 79H
MOV AH,6
INT 10H
MOV DX,0
MOV AH,2
INT 10H
JMP START
EXIT: LEA DX,TUICHU ; MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
实现清屏功能退出程序 16
17
东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:…
C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体…
河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名…
C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的…
C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录…
电子课程设计报告基于51单片机的简易计算器设计电子课程设计报告基于51单片机的简易计算器设计姓名朱启超专业电子信息科学与技术班级学…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤44结论与心得体会127附设计中的…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤432界面设计533关键功能的实现…
C语言课程设计报告题目设计一个简单计算器目录1设计目的2内容3总体设计有流程图4源程序编写附上了运行图5执行结果6心得体会一设计目…
武汉工程大学计算机科学与工程学院综合设计报告设计题目学生学号0905090106专业班级学生姓名洪腾学生成绩指导教师职称课题工作时…
实习名称:用汇编语言实现音乐程序设计专业:计算机科学与技术专业班级:200级计算机科学与技术专业班学号:姓名:指导教师:成绩:2x…