微机原理与接口技术课程设计动画程序设计.docx
- 文档编号:15933619
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:16
- 大小:61.09KB
微机原理与接口技术课程设计动画程序设计.docx
《微机原理与接口技术课程设计动画程序设计.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术课程设计动画程序设计.docx(16页珍藏版)》请在冰点文库上搜索。
微机原理与接口技术课程设计动画程序设计
微机原理与接口技术
课程设计
设计课题:
动画程序设计
班级:
学号:
姓名:
指导教师:
2013年1月15日
一、设计题目
动画程序设计
二、设计内容
1、主要内容:
利用BIOS系统功能调用,进行简单的动画设计。
利用BIOS中断的10号、21号功能,进行简单的动画设计,并根据以下提示信息进行选择:
(1)小鸟从屏幕飞过。
(2)汽车按水平方向从屏幕上开过去。
(3)退出。
2、基本功能:
(1)清屏宏定义
观察程序流程图,在显示小鸟图形,汽车图形时,要先清屏,所以在编写程序使用到宏,因为宏定义只需在汇编语言原程序中定义一次,便可以多次反复调用。
调用时只需要一条宏指令即可。
程序中的清屏定义为:
CLEARMACROpch,pcl,pdh,pdl,pbh
MOVAH,0
MOVAL,02H
INT10H
MOVAL,0
MOVCH,pch
MOVCL,pcl
MOVDH,pdh
MOVDL,pdl
MOVBH,pbh
INT10H
ENDM
宏指令名为CLEAR,定义了五个形式参数,分别为:
pch,pcl,pdh,pdl,pbh,把pch,pcl的值分别传给窗口左上角行号、列号,pdh,pdl的值分别传给窗口右下角行号、列号,pbh的值则传给窗口底部卷入行属性。
利用已经定义好的宏,清屏时可以宏调用。
宏调用语句为:
CLEAR0,0,24,79,7
(2)子程序设计
在接受键盘输入后,判断AL的值,如果是“1”就调用小鸟子程序,如果是“2”就调用汽车子程序,如果是“3”就结束退出。
在小鸟子程序中又嵌套了延时子程序,在汽车子程序中又嵌套了多个子程序。
(3)显示小鸟字符图形
程序中利用BIOS系统功能中10H中断的09号功能进行小鸟字符图形的显示,程序段如下:
MOVAH,9
MOVAL,76H
MOVBL,10
INT10H
要是小鸟字符图形显示的更清晰,则需要延时。
循环指令LOOP,当CX不为零时,执行循环转移分支;当CX为零时,退出循环。
延时子程序为:
DLYPROCNEAR
PUSHCX
PUSHDX
MOVDX,10000
DL1:
MOVCX,6801
DL2:
LOOPDL2
DECDX
JNZDL1
POPDX
POPCX
RET
DLYENDP
上述子程序用两层循环实现延时,内循环实现单位时间延时,外循环次数由寄存器DX决定。
(4)显示汽车字符图形
因为汽车是多字符显示,所以在子程序中还嵌套了显示汽车图形和清屏两个子程序。
MOVCH,0
MOVCL,[DI]
INCDI
MOVCHAR,CX
MOVPOINTER,DI
MOVLINE,DH
MOVCOL,DL
此段程序把CH的值设为了0,又因为CL中存放字符的个数,所以CL=6,DI指向字符图形表中的第一个字符。
三、设计原理及方案
1、设计原理图:
图3-1主程序
图3-2小鸟子程序图3-3汽车子程序
2、设计方案:
在屏幕上显示动画的效果可以按以下五步进行:
(1)在屏幕上显示图形
ASCII码表,选择“V”来显示小鸟,“V”的ASCII码为76H,查表选择彩色文本模式下的IRGB组合成的通用颜色,选择亮绿色,色号为10。
显示汽车时用多字符图形显示,用6个字符组合来显示汽车,ASCII码分别为52H、0B1H、0DBH、0DBH、4FH、4FH,显示属性为白色,即色号为7。
在设置字符显示位置时,是通过两两字符间的相对坐标来实现的。
(2)延时一个时间周期,这样图形更清晰。
这里要用到延时子程序及其调用。
(3)消除图形
在进行小鸟清屏时,可使用清屏宏调用,只需在程序前面进行清屏宏定义。
而在进行汽车的清屏时,由于汽车是由对字符图形显示的,所以不采用清屏宏调用,而是通过修改字符显示属性来进行清屏。
(4)改变图形的行、列坐标。
因为要求小鸟从屏幕飞过,所以小鸟的飞行路径不是水平也不是垂直的,所以要同时改变字符的行、列坐标;而汽车从左至右行驶,所以只需要改变汽车的列坐标。
(5)返回第一步,重复上述过程。
利用BIOS系统功能中10H中断的06号功能进行清屏,循环调用09号功能显示字符图形;延迟一段时间后,再循环调用09号功能,设置BL寄存器的值为0(黑底黑字显符图形),以达到擦除图形的效果;改变行、列坐标,调用02号功能设置光标位置,重复上述过程。
利用DOS中断的01号和02号子功能来完成键盘接收,结果显示。
四、汇编源程序代码
DATASEGMENT
INFO1DB0DH,0AH,'INPUT1,2,OR3:
(1:
bird,2:
car,3:
exit)$'
BUFADB200
DB?
DB200DUP(0)
BUFBDB200DUP(?
)
CARDB7;小汽车的字符图形表
DB52H,7,0,0
DB0B1H,7,0,1
DB0DBH,7,0,1
DB0DBH,7,0,1
DB4FH,7,1,0
DB4FH,7,0,-3
CHARDW?
POINTERDW?
LINEDB?
COLDB?
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAH,0;设置显示方式为80*25的黑白文体
MOVAL,02H
INT10H
LEADX,INFO1;在显示器上显示字符串提示信息
MOVAH,9
INT21H
MOVAH,1;从键盘读取字符到AL寄存器
INT21H
CMPAL,31H;比较AL是否等于1
JNEA
CALLXIAO
A:
CMPAL,32H;比较AL是否等于2
JNEB
CALLQICHE
B:
CMPAL,33H;比较AL是否等于3
JNESTART
MOVAH,4CH;终止当前程序并返回调用程序
INT21H
CLEARMACROpch,pcl,pdh,pdl,pbh;清屏宏定义
MOVAH,0
MOVAL,02H
INT10H
MOVAH,6;调用6号功能
MOVAL,0;设置整个屏幕为空白
MOVCH,pch
MOVCL,pcl;窗口左上角行列数
MOVDH,pdh
MOVDL,pdl;窗口左上角行列数
MOVBH,pbh;正常属性显示
INT10H
ENDM
BIRDPROC;小鸟子程序
MOVAX,DATA
MOVDS,AX
MOVAH,0
MOVAL,02H
INT10H
CLEAR0,0,24,79,7;清屏宏调用
MOVAH,0FH;读当前显示状态
INT10H
MOVDH,10
MOVDL,0
BEGIN:
MOVSI,2
MOVCX,1
DISP:
CMPDL,80
JAEEXIT1
MOVAH,2
INT10H
MOVAH,9
MOVAL,76H
MOVBL,10
INT10H
CALLDLY;延时
MOVAH,9
MOVAL,''
INT10H
INCDL
DECSI
JNZDISP
JMPBEGIN
EXIT1:
RET
BIRDENDP
QINGPROCNEAR
MOVAH,6
MOVAL,0
MOVCX,0
MOVDH,24
MOVDL,79
MOVBH,7
INT10H
RET
QINGENDP
DLYPROCNEAR;延时子程序
PUSHCX
PUSHDX
MOVDX,10000
DL1:
MOVCX,6801
DL2:
LOOPDL2
DECDX
JNZDL1
POPDX
POPCX
RET
DLYENDP
QICHEPROCNEAR;汽车子程序
MOVAH,0
MOVAL,02
INT10H
CLEAR0,0,24,79,7;清屏宏调用
LEADI,CAR;DI指向字符图形表
MOVDH,5;从第5行0列位置开始显示汽车
MOVDL,0
CALLMOVE
RET
QICHEENDP
MOVEPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAH,0FH;取当前显示方式
INT10H
MOVCH,0
MOVCL,[DI];CL放字符个数
INCDI;DI指向字符图形表
MOVCHAR,CX
MOVPOINTER,DI
MOVLINE,DH
MOVCOL,DL
PLOT_NEXT:
ADDDH,[DI+2];改变行列坐标
ADDDL,[DI+3]
CMPDL,80;是否出屏
JBMOV_CRSR
POPDI
POPDX
POPCX
POPBX
POPAX
RET
MOV_CRSR:
MOVAH,2
INT10H
MOVAL,[DI];取字符值
MOVBL,[DI+1];取字符属性
MOVAH,09;显示字符
INT10H
ADDDI,4;DI指向下一个字符
LOOPPLOT_NEXT
CALLDLY
CALLERASE
JMPSHORTPLOT_NEXT
MOVEENDP
ERASEPROCNEAR
MOVCX,CHAR
MOVDI,POINTER
MOVDH,LINE
MOVDL,COL
ERASE_NEXT:
ADDDH,[DI+2];修改光标的行坐标
ADDDL,[DI+3];修改光标的列坐标
MOVAH,2
INT10H;设置光标位置
MOVAL,[DI]
MOVBL,0;设置字符属性为0,为黑色
PUSHCX
MOVCX,1;设置字符显示次数为1
MOVAH,9
INT10H
POPCX
ADDDI,4;指向下一个要用来擦除的字符
LOOPERASE_NEXT
MOVCX,CHAR
MOVDI,POINTER
MOVDH,LINE
INCCOL
MOVDL,COL
RET
ERASEENDP
CODEENDS
ENDSTART
五、实施结果
1、初始界面,如图5-2所示:
图5-1
2、输入1,小鸟从屏幕飞过界面,如图5-2所示:
图5-2
3、输入2,汽车按水平方向从屏幕上开过去界面,如图5-3所示:
图5-3
4、输入3,退出界面,如图5-4所示:
图5-4
六、课程设计体会
看到本次微机原理与接口技术课程设计的课题后,我首先从12个课题中选择了一个我比较感兴趣的课题——动画程序设计。
确定这个课题之后,我便仔细研究了老师在指导书中给出的设计思路,然后查阅相关书籍,上网查找各种资料,初步确定了设计方案,对整个程序的流程有了大概的顺序,对程序先实现什么再实现什么有了一个初步计划。
因为小车使用多字符图形组合来显示,所以首先定义出小车的字符图形表。
然后就是在运行程序是要用键盘输入指令1、2、3,以显示不同的运行结果,此时就要对从键盘输入信息和在显示器上显示信息进行定义。
因为在显示小鸟图形和汽车图形时,要先清屏,所以在编写程序要进行清屏宏定义以供调用。
接下来就编写小鸟子程序,为使小鸟字符图形显示的更清晰,则需要编写延时子程序。
最后一大块,便是编写汽车子程序。
得出完整程序后,便在计算机上运行,初次运行时程序中出现了六处错误。
有两处比较明显的相同错误,单引号不慎写成了双引号,改正后运行便还剩四处错误。
根据计算机提示的错误行数,很容易找到了第三处错误,英文字母EXIT在输入时写成了EXT。
第四处错误是MOVPOINTER,DI中,POINTER和DI之间的“,”写成了“.”。
最后一处错误也是最严重的一处错误,把段寄存器CS当成了目的操作数,修改方式是:
用其他通用寄存器代替。
通过本次微机原理与接口技术课程设计,培养了我各方面的能力。
我更好的学会了把课堂上的理论知识运用到实践中,通过解决实际问题,不断地找出自己所学知识中的薄弱环节。
使课堂上学习的理论知识得到了进一步的优化、补充,使自己所学知识变得更加完善。
通过对程序的不断调试修改,不但使自己的知识面有所拓宽,同时也提高了自己敢于动手、善于动手的能力和独立的分析问题、解决问题的能力,也使自己对微机原理与接口技术这门课程的学习兴趣有所增加,为以后更好的学习这门课程,以及与本课程有关的相关课程打下了坚实的基础。
七、参考文献
《微型计算机系统原理及应用》,周明德,清华大学出版社。
《微型计算机技术及应用》,戴梅萼、史嘉权,清华大学出版社。
《8086微型计算机组成、原理及接口》,顾滨,机械工业出版社。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 课程设计 动画 程序设计