资源描述
郑州航空工业管理学院微机原理课程设计说明书 2007 级 电气工程及其自动化 专业 0706072 班级题 目 汽车小鸟动画 姓 名 学号 指导教师 职称 二零一零 年 六 月 十一 日摘要: 随着计算机的快速发展,用汇编语言来实现动画更简单,直接和便捷,它的目标代码简短,占用内存较少,执行速度较快,是高效的程序设计语言。本文主要对汽车小鸟动画进行程序设计,并通过masm软件进行运行,通过输入不同的数字对程序的控制,采用段内调用子程序的方法来实现,使用了堆栈技术和中断技术,来实现按下数字1,小鸟飞过,按2,汽车开过,按3,退出程序,同时对汇编语言的基本原理解析。 本程序可在windows 2000,windows xp上运行。所需要的工具软件为MASM2.0及以上版本,先生成.asm文件,再生成.exe的文件,然后运行。关键词:汽车小鸟动画,masm软件,中断技术,堆栈,子程序调用一、汽车小鸟动画的基本原理 此程序主要是利用BIOS功能调用的10H中断类型实现的。先利用其功能设置显示方式为320*200彩色图形方式,由于程序中没有做好的汽车小鸟图形,需要先编写小鸟和汽车的字符图形的子程序,采用段内调用子程序的方法来实现,使用了堆栈技术。设计两个画面,按1,小鸟飞过,按2,汽车开过,按3,退出程序。二、设计方案 根据基本原理设计思路拟定出设计方案。先编写好小鸟和汽车的图形显示的子程序,以供之后段内调用子程序。之后再编写小鸟飞过的子程序和汽车开过的子程序,利用转移指令,调用子程序以及中断程序和堆栈等功能来实现设计的功能。三、软件设计3.1汽车小鸟动画总体结构图程序流程图如下图所示开始设计为320*200彩色图形清屏从键盘读取字符1或2或3提示语设计背景色设置彩色组结束设置光标位置显示小鸟字符图形延时设置彩色颜色为绿红黄设置汽车开始显示位显示汽车字符图形出屏延时出屏3213.2 编写汽车小鸟图形的子程序BIRD DB 76H,10,0,0 ;小鸟的字符图形表 DB 0C4H,07,0,1 DB 76H,10,-2,2 DB 0C4H,07,0,1 DB 76H,10,-2,2 DB 0C4H,07,0,1 DB 76H,10,-2,2 DB 0C4H,07,0,1 DB 76H,10,2,-2 DB 0C4H,07,0,1 DB 76H,10,2,-2 DB 0C4H,07,0,1 DB 76H,10,2,-2 DB 0C4H,07,0,1CAR DB 7 ;汽车的字符图形表 DB 52H,7,0,0 DB 0B1H,7,0,1 DB 0DBH,7,0,1 DB 0DBH,7,0,1 DB 4FH,7,1,0 DB 4FH,7,0,-3 DB 2,7,-2,13.3编写小鸟飞过和汽车开过的子程序(1)小鸟飞过的子程序:DISP: CMP DL,80 JAE exit1 MOV AH,2 ;设置光标位置 INT 10H MOV AH,9 ;显示小鸟字符图形 MOV AL,DI MOV BL,DI+1 INT 10H CALL DLY ;延时 MOV AH,9 MOV AL, MOV BL,04 INT 10H INC DL ADD DI,2 DEC SI JNZ DISP JMP BEGINexit1: RET(2)汽车开过的子程序QICHE PROC near ;汽车子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,0 MOV AL,4 INT 10H MOV AH,0BH ;设置彩色组颜色为绿、红、黄 MOV BH,01 MOV BL,00 INT 10H CLEAR 0,0,24,79,7 ;清屏宏调用 LEA DI,CAR ;DI指向字符图形表 MOV DH,5 ;从第5行5列位置开始显示汽车 MOV DL,0 CALL MOVE_SHAPE RET3.4汽车小鸟动画程序 运行可执行程序CAR.exe,选择1,小鸟飞过;选择2,汽车开过;选择3,退出。DATA SEGMENTINFO1 DB 0DH,0AH,INPUT 1,2,OR 3:(1:bird,2:car,3:exit) $BUFA DB 200 DB ? DB 200 DUP(0)BUFB DB 200 DUP(?)BIRD DB 76H,10,0,0 ;小鸟的字符图形表 DB 0C4H,07,0,1 DB 76H,10,-2,2 DB 0C4H,07,0,1 DB 76H,10,-2,2 DB 0C4H,07,0,1 DB 76H,10,-2,2 DB 0C4H,07,0,1 DB 76H,10,2,-2 DB 0C4H,07,0,1 DB 76H,10,2,-2 DB 0C4H,07,0,1 DB 76H,10,2,-2 DB 0C4H,07,0,1CAR DB 7 ;小汽车的字符图形表 DB 52H,7,0,0 DB 0B1H,7,0,1 DB 0DBH,7,0,1 DB 0DBH,7,0,1 DB 4FH,7,1,0 DB 4FH,7,0,-3 DB 2,7,-2,1 CHAR_CNT DW ? POINTER DW ? LINE_ON DB ? COL_ON DB ?DATA ENDSSTACK SEGMENT stack DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKstart:mov ax,data mov ds,ax mov ah,0 ;设置显示方式为320*200彩色图形方式 mov al,4 int 10h lea dx,info1 ;在显示器上显示字符串提示信息 mov ah,9 int 21h mov ah,0 ;从键盘读取字符到AL寄存器 int 16h CMP AL,31H ;比较AL是否等于1 JNE A CALL XIAO A: CMP AL,32H ;比较AL是否等于2 JNE B CALL QICHE B: CMP AL,33H ;比较AL是否等于3 JNE START MOV AH,4CH ;终止当前程序并返回调用程序 INT 21HCLEAR MACRO pch,pcl,pdh,pdl,pbh ;清屏宏定义 MOV AH,0 MOV AL,4 INT 10H MOV AH,6 ;调用6号功能 MOV AL,0 ;设置整个屏幕为空白 MOV CH,pch MOV CL,pcl ;窗口左上角(0行,0列) MOV DH,pdh MOV DL,pdl ;窗口右下角(24行,79列) MOV BH,pbh ;正常属性显示 INT 10HENDMxiao proc ;小鸟子程序 PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AH,0 MOV AL,4 INT 10H MOV AH,0BH ;设置背景色 MOV BH,0 MOV BL,1 INT 10H MOV AH,0BH ;设置彩色组 MOV BH,1 MOV BL,1 INT 10H CLEAR 0,0,24,79,7 MOV AH,0FH ;读当前显示状态 INT 10H MOV DH,10 MOV DL,0BEGIN: MOV SI,2 MOV CX,1 LEA DI,BIRD ;DI指向小鸟字符表的首字母DISP: CMP DL,80 JAE exit1 MOV AH,2 ;设置光标位置 INT 10H MOV AH,9 ;显示小鸟字符图形 MOV AL,DI MOV BL,DI+1 INT 10H CALL DLY ;延时 MOV AH,9 MOV AL, MOV BL,04 INT 10H INC DL ADD DI,2 DEC SI JNZ DISP JMP BEGINexit1: RETxiao endpDLY PROC NEAR ;延时子程序 PUSH CX PUSH DX MOV DX,10000DL1: MOV CX,6801DL2: LOOP DL2 DEC DX JNZ DL1 POP DX POP CX RETDLY ENDPQICHE PROC near ;汽车子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV AH,0 MOV AL,4 INT 10H MOV AH,0BH ;设置彩色组颜色为绿、红、黄 MOV BH,01 MOV BL,00 INT 10H CLEAR 0,0,24,79,7 ;清屏宏调用 LEA DI,CAR ;DI指向字符图形表 MOV DH,5 ;从第5行5列位置开始显示汽车 MOV DL,0 CALL MOVE_SHAPE RETQICHE ENDPMOVE_SHAPE PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AH,0FH ;取当前显示方式 INT 10H SUB CH,CH MOV CL,DI ;CL放字符个数 INC DI ;DI指向字符图形表中的第一个字符 MOV CHAR_CNT,CX MOV POINTER,DI MOV LINE_ON,DH MOV COL_ON,DLPLOT_NEXT: ADD DH,DI+2 ;改变行列坐标 ADD DL,DI+3 CMP DL,80 ;出屏否? JB MOV_CRSR Pop DI Pop DX Pop CX Pop BX Pop AX jmp exit2MOV_CRSR: MOV AH,2 INT 10H MOV AL,DI ;取字符值 MOV BL,DI+1 ;取字符属性 PUSH CX MOV CX,1 MOV AH,09 ;显示字符 INT 10H POP CX ADD DI,4 ;DI指向下一个字符 LOOP PLOT_NEXT CALL DLY CALL ERASE JMP SHORT PLOT_NEXTexit2: ret MOVE_SHAPE ENDPERASE PROC NEAR MOV CX,CHAR_CNT MOV DI,POINTER MOV DH,LINE_ON MOV DL,COL_ONERASE_NEXT: ADD DH,DI+2 ADD DL,DI+3 MOV AH,2 INT 10H MOV AL,DI MOV BL,0 PUSH CX MOV CX,1 MOV AH,9 INT 10H POP CX ADD DI,4 LOOP ERASE_NEXT MOV CX,CHAR_CNT MOV DI,POINTER MOV DH,LINE_ON INC COL_ON MOV DL,COL_ON RETERASE ENDPCODE ENDS END start调试与运行1 打开MASM软件,对代码进行粘贴保存2 运行程序当按1时,小鸟飞过当按2时,汽车开过按3时,退出程序四、结论在调试程序时,要注意每一个小细节,如注释忘加分号,指令书写错误等问题,有时会运行不了,要仔细检查错误。另外,由于动画为全屏显示,无法截图,只好照下来进行截图,图片可能会不太清晰。通过改变指令,也可以改变汽车和小鸟开始的位置。这次课程设计让我们巩固和加深了对微机原理与接口技术的理解,提高综合运用本课程所学知识的能力。通过实际分析设计,调试程序,也掌握了微机原理与接口技术的基本规程和各个指令的使用。参考文献:1钱晓捷 主编:微机原理与接口技术,第4版,机械工业出版社,2008年1月出版; 2沈美明等编著:80X86汇编语言程序设计,清华大学出版社,2001年9月出版;3. 杨素行等编著:微型计算机系统原理及应用,第2版,清华大学出版社,2004年2月出版;4. WWW.UT365.COM。设计总结:这次课程设计对我来说,确实是一项不简单的任务。经过几天的努力,不断地翻书查资料,向老师同学请教,对汇编语言也有了进一步的认识和掌握,进一步理解了各个指令的功能,特别是转向指令和中断指令,也熟悉了子程序的定义和调用。 通过这次亲自动手认真做课程设计,我进一步熟悉了汇编语音的结构和使用方法,以前学习时不太懂的地方,有了更深刻的认识,基本达到了能读懂汇编语言理解其功能的水平。这次课程设计也让我获得了宝贵的经验,为以后的毕业设计打下了良好的基础,培养了自己选用参考书,查阅文献资料的能力,提高独立思考,深入研究,分析问题解决问题的能力,知道了理论和实践相结合的重要性。学习就是不断地发现问题解决问题的过程,在这期间我们会学会很多东西,要注意多动脑子勤思考,不懂得地方要向老师请教,争取能够明白。指导教师评语:课程设计成绩: 指导教师签名: 年 月 日
展开阅读全文