微机原理课程设计说明书.docx
- 文档编号:9373175
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:340.65KB
微机原理课程设计说明书.docx
《微机原理课程设计说明书.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计说明书.docx(17页珍藏版)》请在冰豆网上搜索。
微机原理课程设计说明书
微机原理课程设计说明书
2007级
电气工程及其自动化专业
班级
题目汽车小鸟动画
姓名学号
指导教师职称
二零一零年六月十一日
摘要:
随着计算机的快速发展,用汇编语言来实现动画更简单,直接和便捷,它的目标代码简短,占用内存较少,执行速度较快,是高效的程序设计语言。
本文主要对汽车小鸟动画进行程序设计,并通过masm软件进行运行,通过输入不同的数字对程序的控制,采用段内调用子程序的方法来实现,使用了堆栈技术和中断技术,来实现按下数字1,小鸟飞过,按2,汽车开过,按3,退出程序,同时对汇编语言的基本原理解析。
本程序可在windows2000,windowsxp上运行。
所需要的工具软件为MASM2.0及以上版本,先生成.asm文件,再生成.exe的文件,然后运行。
关键词:
汽车小鸟动画,masm软件,中断技术,堆栈,子程序调用
一、汽车小鸟动画的基本原理
此程序主要是利用BIOS功能调用的10H中断类型实现的。
先利用其功能设置显示方式为320*200彩色图形方式,由于程序中没有做好的汽车小鸟图形,需要先编写小鸟和汽车的字符图形的子程序,采用段内调用子程序的方法来实现,使用了堆栈技术。
设计两个画面,按1,小鸟飞过,按2,汽车开过,按3,退出程序。
二、设计方案
根据基本原理设计思路拟定出设计方案。
先编写好小鸟和汽车的图形显示的子程序,以供之后段内调用子程序。
之后再编写小鸟飞过的子程序和汽车开过的子程序,利用转移指令,调用子程序以及中断程序和堆栈等功能来实现设计的功能。
三、软件设计
3.1汽车小鸟动画总体结构图
程序流程图如下图所示
3.2编写汽车小鸟图形的子程序
BIRD DB76H,10,0,0 ;小鸟的字符图形表
DB0C4H,07,0,1
DB76H,10,-2,2
DB0C4H,07,0,1
DB76H,10,-2,2
DB0C4H,07,0,1
DB76H,10,-2,2
DB0C4H,07,0,1
DB76H,10,2,-2
DB0C4H,07,0,1
DB76H,10,2,-2
DB0C4H,07,0,1
DB76H,10,2,-2
DB0C4H,07,0,1
CAR DB7 ;汽车的字符图形表
DB52H,7,0,0
DB0B1H,7,0,1
DB0DBH,7,0,1
DB0DBH,7,0,1
DB4FH,7,1,0
DB4FH,7,0,-3
DB2,7,-2,1
3.3编写小鸟飞过和汽车开过的子程序
(1)小鸟飞过的子程序:
DISP:
CMPDL,80
JAEexit1
MOVAH,2 ;设置光标位置
INT10H
MOVAH,9 ;显示小鸟字符图形
MOVAL,[DI]
MOVBL,[DI+1]
INT10H
CALLDLY ;延时
MOVAH,9
MOVAL,''
MOVBL,04
INT10H
INCDL
ADDDI,2
DECSI
JNZDISP
JMPBEGIN
exit1:
RET
(2)汽车开过的子程序
QICHE PROCnear ;汽车子程序
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,0
MOVAL,4
INT10H
MOVAH,0BH ;设置彩色组颜色为绿、红、黄
MOVBH,01
MOVBL,00
INT10H
CLEAR0,0,24,79,7 ;清屏宏调用
LEADI,CAR ;DI指向字符图形表
MOVDH,5 ;从第5行5列位置开始显示汽车
MOVDL,0
CALLMOVE_SHAPE
RET
3.4汽车小鸟动画程序
运行可执行程序CAR.exe,选择1,小鸟飞过;选择2,汽车开过;选择3,退出。
DATA SEGMENT
INFO1 DB0DH,0AH,'INPUT1,2,OR3:
(1:
bird,2:
car,3:
exit)$'
BUFA DB200
DB?
DB200DUP(0)
BUFB DB200DUP(?
)
BIRD DB76H,10,0,0 ;小鸟的字符图形表
DB0C4H,07,0,1
DB76H,10,-2,2
DB0C4H,07,0,1
DB76H,10,-2,2
DB0C4H,07,0,1
DB76H,10,-2,2
DB0C4H,07,0,1
DB76H,10,2,-2
DB0C4H,07,0,1
DB76H,10,2,-2
DB0C4H,07,0,1
DB76H,10,2,-2
DB0C4H,07,0,1
CAR DB7 ;小汽车的字符图形表
DB52H,7,0,0
DB0B1H,7,0,1
DB0DBH,7,0,1
DB0DBH,7,0,1
DB4FH,7,1,0
DB4FH,7,0,-3
DB2,7,-2,1
CHAR_CNTDW?
POINTERDW?
LINE_ONDB?
COL_ONDB?
DATA ENDS
STACK SEGMENTstack
DB200DUP(0)
STACK ENDS
CODE SEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
start:
movax,data
movds,ax
movah,0 ;设置显示方式为320*200彩色图形方式
moval,4
int10h
leadx,info1 ;在显示器上显示字符串提示信息
movah,9
int21h
movah,0 ;从键盘读取字符到AL寄存器
int16h
CMPAL,31H ;比较AL是否等于1
JNE A
CALLXIAO
A:
CMPAL,32H ;比较AL是否等于2
JNE B
CALLQICHE
B:
CMPAL,33H ;比较AL是否等于3
JNESTART
MOVAH,4CH ;终止当前程序并返回调用程序
INT21H
CLEAR MACROpch,pcl,pdh,pdl,pbh;清屏宏定义
MOVAH,0
MOVAL,4
INT10H
MOVAH,6 ;调用6号功能
MOVAL,0 ;设置整个屏幕为空白
MOVCH,pch
MOVCL,pcl ;窗口左上角(0行,0列)
MOVDH,pdh
MOVDL,pdl ;窗口右下角(24行,79列)
MOVBH,pbh ;正常属性显示
INT10H
ENDM
xiao proc ;小鸟子程序
PUSH DS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAH,0
MOVAL,4
INT10H
MOVAH,0BH ;设置背景色
MOVBH,0
MOVBL,1
INT10H
MOVAH,0BH ;设置彩色组
MOVBH,1
MOVBL,1
INT10H
CLEAR0,0,24,79,7
MOVAH,0FH ;读当前显示状态
INT10H
MOVDH,10
MOVDL,0
BEGIN:
MOVSI,2
MOVCX,1
LEADI,BIRD ;DI指向小鸟字符表的首字母
DISP:
CMPDL,80
JAEexit1
MOVAH,2 ;设置光标位置
INT10H
MOVAH,9 ;显示小鸟字符图形
MOVAL,[DI]
MOVBL,[DI+1]
INT10H
CALLDLY ;延时
MOVAH,9
MOVAL,''
MOVBL,04
INT10H
INCDL
ADDDI,2
DECSI
JNZDISP
JMPBEGIN
exit1:
RET
xiaoendp
DLYPROCNEAR ;延时子程序
PUSHCX
PUSHDX
MOV DX,10000
DL1:
MOV CX,6801
DL2:
LOOPDL2
DEC DX
JNZ DL1
POP DX
POP CX
RET
DLY ENDP
QICHE PROCnear ;汽车子程序
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,0
MOVAL,4
INT10H
MOVAH,0BH ;设置彩色组颜色为绿、红、黄
MOVBH,01
MOVBL,00
INT10H
CLEAR0,0,24,79,7 ;清屏宏调用
LEADI,CAR ;DI指向字符图形表
MOVDH,5 ;从第5行5列位置开始显示汽车
MOVDL,0
CALLMOVE_SHAPE
RET
QICHE ENDP
MOVE_SHAPEPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAH,0FH ;取当前显示方式
INT10H
SUBCH,CH
MOVCL,[DI] ;CL放字符个数
INCDI ;DI指向字符图形表中的第一个字符
MOVCHAR_CNT,CX
MOVPOINTER,DI
MOVLINE_ON,DH
MOVCOL_ON,DL
PLOT_NEXT:
ADDDH,[DI+2] ;改变行列坐标
ADDDL,[DI+3]
CMPDL,80 ;出屏否?
JBMOV_CRSR
PopDI
PopDX
PopCX
PopBX
PopAX
jmpexit2
MOV_CRSR:
MOVAH,2
INT10H
MOVAL,[DI] ;取字符值
MOVBL,[DI+1] ;取字符属性
PUSHCX
MOVCX,1
MOVAH,09 ;显示字符
INT10H
POPCX
ADDDI,4 ;DI指向下一个字符
LOOPPLOT_NEXT
CALLDLY
CALLERASE
JMPSHORTPLOT_NEXT
exit2:
ret
MOVE_SHAPEENDP
ERASE PROCNEAR
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
MOVDL,COL_ON
ERASE_NEXT:
ADDDH,[DI+2]
ADDDL,[DI+3]
MOVAH,2
INT10H
MOVAL,[DI]
MOVBL,0
PUSHCX
MOVCX,1
MOVAH,9
INT10H
POPCX
ADDDI,4
LOOPERASE_NEXT
MOVCX,CHAR_CNT
MOVDI,POINTER
MOVDH,LINE_ON
INCCOL_ON
MOVDL,COL_ON
RET
ERASE ENDP
CODEENDS
ENDstart
调试与运行
1.打开MASM软件,对代码进行粘贴保存
2.运行程序
当按1时,小鸟飞过
当按2时,汽车开过
按3时,退出程序
四、结论
在调试程序时,要注意每一个小细节,如注释忘加分号,指令书写错误等问题,有时会运行不了,要仔细检查错误。
另外,由于动画为全屏显示,无法截图,只好照下来进行截图,图片可能会不太清晰。
通过改变指令,也可以改变汽车和小鸟开始的位置。
这次课程设计让我们巩固和加深了对微机原理与接口技术的理解,提高综合运用本课程所学知识的能力。
通过实际分析设计,调试程序,也掌握了微机原理与接口技术的基本规程和各个指令的使用。
参考文献:
1.钱晓捷主编:
《微机原理与接口技术》,第4版,机械工业出版社,2008年1月出版;
2.沈美明等编著:
《80X86汇编语言程序设计》,清华大学出版社,2001年9月出版;
3.杨素行等编著:
《微型计算机系统原理及应用》,第2版,清华大学出版社,2004年2月出版;
4.WWW.UT365.COM。
设计总结:
这次课程设计对我来说,确实是一项不简单的任务。
经过几天的努力,不断地翻书查资料,向老师同学请教,对汇编语言也有了进一步的认识和掌握,进一步理解了各个指令的功能,特别是转向指令和中断指令,也熟悉了子程序的定义和调用。
通过这次亲自动手认真做课程设计,我进一步熟悉了汇编语音的结构和使用方法,以前学习时不太懂的地方,有了更深刻的认识,基本达到了能读懂汇编语言理解其功能的水平。
这次课程设计也让我获得了宝贵的经验,为以后的毕业设计打下了良好的基础,培养了自己选用参考书,查阅文献资料的能力,提高独立思考,深入研究,分析问题解决问题的能力,知道了理论和实践相结合的重要性。
学习就是不断地发现问题解决问题的过程,在这期间我们会学会很多东西,要注意多动脑子勤思考,不懂得地方要向老师请教,争取能够明白。
指导教师评语:
课程设计成绩:
指导教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 说明书