动态图形设计(汇编课设)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北科技学院
课程设计说明书
专业:网络工程
课程名称: 汇编课程设计班级: 网络B091
姓名: 侯杰学号: 200907024121 设计题目: 动态图形设计
设计时间: 2011-12-05 至2011-12-16
评语: ________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____
一、问题陈述及其需求分析
要求:利用汇编语言进行动态图形设计。
内容:小车在公路上行驶,从屏幕左侧驶向右侧。在到达屏幕右侧,公路下降一段距离并改变颜色,然后小车继续由左向右行驶驶。当下降到屏幕底部时,又返回到屏幕顶部重复上述过程,直到有键按下。公路和小车的颜色不样。也要用INT 10H功能。
二、总体设计
本程序主要分三段:数据段,堆栈段及代码段。其中数据段定义了小车的图形集,堆栈段定义了堆栈空间,代码段执行各种功能,大体包括显示图形,延时,移动图形,清屏等,用三个循环实现动画整个功能:
一、让小车从屏幕左侧跑到右侧
二、让小车不断从屏幕上端跳到下端
三、不断重复这一屏。
定义了清屏、输出字符的宏,定义了显示小汽车和移动小汽车的子程序。本次动态图形设计,调用CRT显示功能实现。调用BOIS int 10h中断的相关功能,具体用以下步骤进行:
1.确定小车由哪些字符组成。
2.在设定的屏幕上显示小车图形。
3.延迟一个时间周期,使动态图形更清晰。
4.清除图形。
5.改变图形的行列坐标,修改图形显示位置,重复2、3、4步骤。
6.写一个循环子程序,让小车从屏幕左侧行驶到屏幕右侧。
7.用loop指令,改变行坐标,让小车从屏幕的上一端跳到屏幕的下一端,重复执行,显示一屏。
8.用loop指令,不断重复这一屏。
我的程序还有一个小技巧,清屏的时候不是像别人那样写长串代码,而是通过重新设置显示方式来清屏,这样程序变得简单。数学和逻辑推理对程序设计的重要性,找到简单、合适高效的算法可以大大节约程序运行时间和空间,优化了程序,提高程序运行效率,对于一个优秀的程序员来说非常重要。
流程图如下:
开 始
建立数据、堆栈段;设置小车的相关字符组合图形
显示动画 与否?
显示字符图形
调用子程序延时
调用子程序清除图形
修改图形显示位置
终止显示程序
结 束
是
否
是否
三、详细设计
(一)定义一个清屏宏clear ,并且定义哑元sch , scl,sdh,sdl,sbh 进行传参引用。代码具体分析如下:
mov ah,0 ; 设置显示方式为640*350彩色图形方式 mov al,10h int 10h
mov ah,6 ;调用6号功能设置整个屏幕为bh 值所对应的属性 sub al,al
mov al,1 ;设置滚动行数为1
mov ch,sch ;窗口左上角(0行,0列)
mov cl,scl
mov dh,sdh ;窗口右下角(dh,79),行号dh每次加3
mov dl,sdl
mov bh,sbh ; 道路属性,bh每次加1
int 10h
sch和scl分别显示左上角的行和列,sdh和sdl分别显示右上角的行和列,sbh表示显示道路属性。定义清屏宏方便以后的程序多次调用,可简化程序结构、增加源程序的可读性、提高源程序的可维护性。
此程序显示方式均设为640*350彩色图形方式
(二)定义输出字符宏show_str,哑元tishi进行传参,lea dx,tishi,将tishi的有效地址放入dx里面再显示出来。
(三)界面提示输入,用call指令调用showcar子程序,主要代码如下:
mov ah,01h ;输入1或者2
int 21H
cmp al,31h ;比较输入的字符是否为1
jne a
call showcar
sub ax,ax
a :
cmp al,32h ;比较输入的字符是否为2
jne start
b :
mov ah,4ch ;终止当前程序并返回调用程序
int 21h
输入1或者2,cmp指令判断输入的是1的话,则调用子程序showcar,若不是则跳转到标号a 进行cmp指令判断是否是2,若是2则推出程序,若不是则返回初始。
(四)显示小汽车子程序,定义showcar子程序,并且实现下移公路改变颜色。
1、mov ah,1 ; 设置显示方式为640*350彩色图形方式
mov al,10h
int 10h
push dx
push bx
cmp ax,ax ;zf标志位置1
sub si,si
mov dh,3
mov bh,7
next: cmp dh,22 ;公路是否退至屏幕底端?
jb next1
sub dh,dh
mov dh,3
next1:
mov ah,01h ;检查键盘缓冲区中有无输入字符(zf是否等于0)
int 16h
jne fh ;zf等于0则退出程序
将标志位置1,设置7行,每行间隔3,屏幕为22行,比较公路是否退至屏幕底端,若是则返回屏幕最上面,若不是则跳到标号next1,检查键盘缓冲区中有无输入字符(zf是否等于0),zf不等于0则显示小车,否则执行fh推出程序。
2、实现下移公路并改变颜色,调用清屏宏clear和call指令调用car_move子程序。
clear 0,0,dh,79,bh ; 清屏宏调用
lea di,car ;di指向字符图形表
push dx
call car_move
cmp si,1
je fh
pop dx
pop ax
add dh,3
add bh,1
cmp bh,8 ;循环改变公路的颜色
jb bs
sub bh,bh
mov bh,1
bs:
mov ah,01h ;检查键盘缓冲区中有无输入字符(zf是否等于0)
int 16h
jne fh ;zf等于0则退出程序
jmp next
实现公路颜色的改变,小车每次跳转一次就改变一次公路颜色。比较si中的值是否是1,若等于就执行fh推出程序,不是1,就道路坐标增加3行,bh加1。cmp指令循环改变公路颜色,bh小于8执行bs,否则bh清零。
(五)小车移动子程序car_move,让小车从屏幕左侧跑到右侧,让小车不断从屏幕上端跳到下端
调用了延时delaytime子程序和擦出子程序erase,此处可以通过改变di和小车初始位