1、微机综合实验课程设计报告书姓名: 全 永 谱 学号: 200807014348 院系: 电子与信息工程学院 专业: 电子信息工程(自动化) 报告题目: 微机综合实验计算器设计报告 指导老师: 蔡 黎 2011年6月25日微机综合实验课程设计报告书姓名:全永谱 班级:08级电信 3 班 学号: 200807014348 成绩: 设计题目分析:可以进行十六进制数四则运算,要可以显示余数,具有清零和复位功能,并且具有连续运算功能。运行调试好的程序,按步骤依次输入操作数、操作符,回车经运算后便可得到运算结果,并且可以在屏幕上显示出来。设计步骤详细介绍:第一步:对要实现的功能进行大体分析,构思出程序的设
2、计思路图(如下图所示): 输入操作数,操作符判断是哪种运算开始运算后,十六进制转化为十进制输出结果结束 程序设计思路图 第二步:将这些功能的实现分别编写程序来实现。第三步;编写代码,上机调试和运行程序。第四步:编辑源程序:即建立.ASM文件。 第五步:汇编源程序。源文件建立后,要用汇编程序对源文件进行汇编,以便产生二进制的目标文件(.OBJ文件)。第六步:用LINK程序产生.EXE文件。第七步:程序的调试。开始运行,键入CMD,在键盘上键入命令DEBUG L.EXE启动DEBUG,直到屏幕出现提示短杠,等待用户输入如下的命令。 调试A命令,指出汇编之后的机器码存储的起始地址。调试U命令,将内存
3、中的机器码以指令助记符的形式显示出来。可反复执行,直到显示出所有的指令助记符。调试T命令,单步执行指令,并将所有寄存器的内容和下一条要执行的指令显示出来。执行D命令,显示内存,将内存中的数据以十六进制和ASCII码的形式显示出来。执行Q命令,退出返回。关键技术分析:INT 21H 指令01H号功能:等待从标准设备输入一个字符,将该字符的ASCII码送给AL,并在标准输出设备上显示该字符。入口参数:无。出口参数:AL的内容为输入字符的ASCII码。09H号功能:在标准输出设备上显示某个字符串。入口参数:DX的内容为要显示的字符串的首地址。出口参数:无设计中遇到的问题和解决的步骤、方法:针对本设计
4、出现的问题主要是程序难以看懂,虽然有注释,但还是未完全理解;其次就是对程序步骤还是未完全熟练地掌握,运行了好几次,也请教了一些同学,最后才基本完成;最后就是画出程序流程图,由于以前很少联系使用流程图,所以突然画程序流程图就修改了很多次才完成,流程图如下所示: DAT_1开始输入数字是否为回车?MUL E保存在AX和DI跳到DAT_2DIV E保存在A中NY设计结果: 运行调试好的程序,按提示依次输入操作数、操作符,回车经运算后便可得到运算结果,在屏幕上显示出来;在提示下按下“y”,则继续进行运算或是退出程序。其结果如下图(截图)所示:附录1:程序运行截图(3张)附录2:源程序列表(带注释)st
5、ack segment dw 512 dup(0)stack endsDATA SEGMENTB1 DB 0DH,0AH, Simple calculator $ B2 DB 0DH,0AH, INPUT THE FIRST NUMBER: $ B3 DB 0DH,0AH, INPUT THE SECOND NUMBER: $ B4 DB 0DH,0AH, INPUT THE OPERATOR(+,-,*,/): $ B5 DB 0DH,0AH, THE RESULT IS: $ B6 DB 0DH,0AH, - $B7 DB 0DH,0AH, please INPUT THE KEY (0)
6、 to CONTINUE $B8 DB 0AH,0DH, THE REMAINDER IS: $A DW 0 ;存放第一个操作数B DW 0 ;存放第二个操作数C11 DW 0 ;存放余数C12 DB 0 ;存放输入的操作数B11 DW 10DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX S:MOV BX,0 MOV DI,0 MOV DX,0 LEA DX,B1 MOV AH,9 INT 21H LEA DX,B2 MOV AH,9 INT 21H ;输出提示信息DAT_1:MOV AX,0 MOV
7、 AH,1 INT 21H ;输入第一个操作数 CMP AL,0DH JE DAT_2 AND AL,0FH ;取ax的低四位 MOV AH,0 ADD DI,AX MOV AX,DI MUL B11 MOV DI,AX JMP DAT_1 ;把数字字符转化为数字DAT_2:MOV AX,0 MOV AX,DI DIV B11 MOV A,AX MOV DI,0 MOV AX,0 LEA DX,B3 MOV AH,9 INT 21HDAT_3:MOV AH,1 INT 21H ;输入第二个操作数 CMP AL,0DH JE DAT_4 AND AL,0FH MOV AH,0 ADD DI,AX
8、 MOV AX,DI MUL B11 MOV DI,AX JMP DAT_3 ;将数字字符转化为数字DAT_4:MOV AX,0 MOV AX,DI DIV B11 MOV B,AX MOV DI,0 MOV AX,0 DAT_5:LEA DX,B4 MOV AH,9 INT 21H MOV AH,1 ;输入操作符 INT 21H MOV C12,AL CMP AL,+ JE ADD_1 CMP AL,- JE SBB_1 CMP AL,* JE MUL_1 CMP AL,/ JE DIV_1 JMP DAT_5ADD_1:MOV AX,0 ;加法运算 MOV AX,A ADD AX,B MO
9、V SI,AX ;si存放源操作数地址,这里存放ax的内容 JMP R SBB_1:MOV AX,0 ;减法运算 MOV AX,A SBB AX,B MOV SI,AX JMP R MUL_1:MOV AX,0 ;乘法运算 MOV AX,A MUL B MOV SI,AX JMP R DIV_1:MOV AX,0 ;除法运算 MOV DX,0 MOV AX,A DIV B MOV SI,AX ;字除法中商放进ax,余数放进dx MOV C11,DX JMP R R: LEA DX,B5 MOV AH,9 INT 21H MOV CX,SP MOV AX,SI pp1:MOV DX,0 MOV
10、BX,10 DIV BX PUSH DX ;将16进制数转化为10进制数 CMP AX,0 JNZ pp1 pp2: CMP SP,CX JE EXIT1 POP DX ADD DL,30H MOV AH,2 INT 21H JMP pp2 ;输出结果EXIT1:CMP C12,4 JNE LOPAENDS LEA DX,B8 MOV AH,9 INT 21H MOV AX,C11 mov cx,sppp3: MOV DX,0 MOV BX,10 DIV BX PUSH DX ;将16进制数转化为10进制数 CMP AX,0 JNZ pp3 pp4: CMP SP,CX JE LOPAENDS
11、 POP DX ADD DL,30H ;将字符转化为ASCII码 MOV AH,2 ;显示dl给定字符,且光标移到下一个字符位置 INT 21H JMP pp4LOPAENDS: LEA DX,B6 MOV AH,9 INT 21H LEA DX,B7 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,y JNE EXIT2 JMP SEXIT2: MOV AH,4CH INT 21HCODE ENDS END START设计心的及总结:本次课程设计主要完成了简单的计算器汇编代码的实现。可以完成基本的加法、减法、乘法和除法运算(商和余数均可求出),并对溢出处理等情况进行了规定。同时也很感谢其他的同学对我的一些提示,也感谢指导老师提供的示例,也给我了很大的借鉴意义。当然这个课程设计中,仍存在着很多需要改进的地方。例如:不能实现带括号的运算;不能实现连续的加减运算等。希望可以得到指导老师的指正和改进。本文来自网络,版权归原作者所有,请下载后,尽快删除。