动态图形设计(汇编课设)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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和小车初始位

相关文档
最新文档