微机原理课程设计-小鸟动画.doc_第1页
微机原理课程设计-小鸟动画.doc_第2页
微机原理课程设计-小鸟动画.doc_第3页
微机原理课程设计-小鸟动画.doc_第4页
微机原理课程设计-小鸟动画.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

摘要: 随着计算机的快速发展,用汇编语言来实现动画更简单,直接和便捷,它的目标代码简短,占用内存较少,执行速度较快,是高效的程序设计语言。本文主要对汽车小鸟动画进行程序设计,并通过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。设计总结:这次课程设计对我来说,确实是一项不简单的任务。经过几天的努力,不断地翻书查资料,向老师同学请教,对汇编语言也有了进一步的认识和掌握,进一步理解了各个指令的功能,特别是转向指令和中断指令,也熟悉了子程序的定义和调用。 通过这次亲自

温馨提示

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

评论

0/150

提交评论