动态图形设计小车动画doc.docx
《动态图形设计小车动画doc.docx》由会员分享,可在线阅读,更多相关《动态图形设计小车动画doc.docx(12页珍藏版)》请在冰豆网上搜索。
![动态图形设计小车动画doc.docx](https://file1.bdocx.com/fileroot1/2023-2/2/9a705824-a0d1-457f-995c-e46b18aa057d/9a705824-a0d1-457f-995c-e46b18aa057d1.gif)
动态图形设计小车动画doc
华北科技学院计算机系
课程设计报告
课程名称汇编语言课程设计
设计题目动态图形设计
设计时间2008-12-08至2008-12-19
年级2006专业班级网络B061
姓名皇甫建杰学号200507024207
指导教师李冬艳
成绩
评语
计算机系制
一.课程设计的性质和目的
性质:
《汇编语言》是计算机科学与技术专业及网络工程本科学生必修的专业课程。
目的要求:
进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二.课程设计的要求
1.遵循模块化、结构化的程序设计方法。
2.要求程序必须正确。
3.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
4.要求程序结构合理,语句使用得当。
5.适当追求编程技巧和程序运行效率。
三.主要仪器设备及软件
计算机、MASM汇编软件。
四.设计题目
动态图形设计:
要求:
小车在公路上行驶,从屏幕左侧驶向右侧。
在到达屏幕右侧,公路下降一段距离并改变颜色,然后小车继续由左向右行驶驶。
当下降到屏幕底部时,又返回到屏幕顶部重复上述过程,直到有键按下。
公路和小车的颜色不样。
也要用INT10H功能。
五.题目分析
图形移动程序,调用CRT显示功能实现。
具体可分5步进行:
1.在屏幕上显示图形(单字符或多字符图形)。
2.延迟一个时间周期,这样图形更清晰。
3.清除图形。
4.改变图形的行列坐标,修改图形显示位置。
5.若没有键按下,则重复以上过程
六.运行结果
选择操作
显示动画
七.程序流程
本程序主要分三段:
数据段,堆栈段及代码段。
其中数据段定义了小车的图形集,堆栈段定义了堆栈空间,代码段执行各种功能,大体包括显示图形,延时,移动图形,清屏等。
具体流程图如下
八.代码
datasegment
infordb0dh,0ah,'input1or2(1:
showacar,2:
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
db2,7,-2,1
char_cntdw?
pointerdw?
line_ondb?
col_ondb?
dataends
;数据段
stacksegmentstack
db200dup(0)
stackends
;堆栈段
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
movah,0;设置显示方式为640*350彩色图形方式
moval,10h
int10h
leadx,infor;在显示器上显示字符串提示信息
movah,9
int21h
movah,0;从键盘读取字符到AL寄存器
int16h
cmpal,31h
jnea
callqiche
subax,ax
a:
cmpal,32h;比较al是否等于2
jnestart
b:
movah,4ch;终止当前程序并返回调用程序
int21h
clearmacropch,pcl,pdh,pdl,pbh
;清屏宏定义
movah,0
moval,10h
int10h
movah,6;调用6号功能设置整个屏幕为bh值所对应的属性
subal,al
moval,1;设置滚动行数为1
movch,pch
movcl,pcl;窗口左上角(0行,0列)
movdh,pdh
movdl,pdl;窗口右下角(24行,79列)
movbh,pbh;正常属性显示:
1绿、2青、3蓝、4红、5粉、6黄、7白(高亮)
int10h
endm
dlyprocnear;延时子程序
pushcx
pushdx
movdx,10000
dl1:
movcx,6801
dl2:
loopdl2
decdx
jnzdl1
popdx
popcx
ret
dlyendp
qicheprocnear;汽车子程序
movah,0
moval,10h
int10h
pushdx
pushbx
cmpax,ax;zf标志位置1
movdh,3
movbh,1
next:
cmpdh,25;公路是否退至屏幕底端?
jbnext1
subdh,dh
movdh,3
next1:
movah,01h;检查键盘缓冲区中有无输入字符(zf是否等于0)
int16h
jnefh;zf等于0则退出程序
clear0,0,dh,79,bh;清屏宏调用
leadi,car;di指向字符图形表
pushdx;保护dh源值
callmove_shape
popdx
popax
adddh,3
addbh,1
cmpbh,8;循环改变公路的颜色
jbbs
subbh,bh
movbh,1
bs:
jmpnext
fh:
ret
qicheendp
move_shapeprocnear;移动子程序
pushax
pushbx
pushcx
subdh,2;从第1行0列位置开始显示汽车
movdl,0
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
eraseprocnear;擦除子程序
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
eraseendp
codeends
;代码段
endstart
九.心得体会
两周的课程设计,让我基本上掌握了,子程序的调用与运用;它不但大大减化了程序代码,使程序的逻辑性大大加强。
汇编语言是一门与硬件直接打交道的语言,因此很多操作功能的使用需要反复调用,为此,程序显得十分烦琐,通过子程序的调用,可将这些重复的步骤,加以简化,为内存节省空间。
可是,子程序也有若点,它的形式参数只能为操作数与地址,当数据交错时,容易出错,于是又引入了一个概念:
宏。
宏必须先定义,后调用,他的形式参数比较灵活,但是它不能节省空间。
因此,我们常常要用宏与子程序相互联系起来。
使我们的程序不断的优化,达到更好的效果,此外,对于数据缓冲区里的内部结构了解掌握也是非常重要的,这将是一个飞跃。
因为它会使得我们对数据的处理更加的精准。
通过编程和对编程过程中遇到的问题的思考,有效的提高了我对汇编的认识和理解,切实的提高了我的编程能力,补全了我的不足。
通过这次课程设计,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,以及正确地运用DEBUG指令。
在整个程序的编写中,调试占了很大部分的时间。
要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。
通过这次实际动手能力的培养,我进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水平。
设计过程中暴露出了自己的一些问题,动手和实践能力不足,知识上还有许多漏洞,缺乏大型程序的开发经验,理论联系实际的能力更有待提高。
希望随着以后设计的增多,阅历的增长,能够逐渐弥补这些不足
对我而言,知识上的收获重要,精神上的丰收更加可喜。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆!