汇编语言实现动态图形

更新时间:2023-12-16 11:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

华 北 科 技 学 院

课程设计说明书

课程名称: 汇编语言 设计题目: 动态图形设计 设计时间: 6/20/ 2010 至 7/1/2010 指导教师:_ _ 杜杏箐 评 语:________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:__ _ 评阅教师:____

一、课程设计目的

使用所学过的汇编语言程序设计知识,掌握结构化程序设计的基本思路和

方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。 二、课程设计要求

1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。 2.遵循模块化、结构化的程序设计方法。 3. 要求程序必须正确。

4. 程序简明易懂,多运用输入输出提示,出错信息及必要的注释。 5. 要求程序结构合理,语句使用得当。 6. 适当追求编程技巧和程序运行效率。

三、课程设计题目:

动态图形设计

要求:小车在公路上行驶,从屏幕左侧驶向右侧。在到达屏幕右侧 ,公路下降一段距离并改变颜色,然后小车继续由左向右行驶驶。当下降到屏幕底部时,又返回到屏幕顶部重复上述过程,直到有键按下。公路和小车的颜色不样,要用到INT 10H功能。 四、课题分析

汇编动态图形设计没怎么学,书上只是提供它的原理,生疏无法理解,从图书馆借书看到一个例程,因此问题迎刃而解。

具体设计有以下几个步聚:

1.小车是如何用汇编语言设计出来的?字符组合

2. 如何让它动起来?设计延迟程序,使小车的现实出现时间间隔,改变小车的显示列数,出现向左或向右的动态效果

3.公路如何和小车一起显示?公路也用字符的形式显示,调用时不用加延迟。 4.小车在公路上行驶,从屏幕左侧驶向右侧。在到达屏幕右侧 ,公路下降一段距离并改变颜色,然后小车继续由左向右行驶驶。当下降到屏幕底部时,又返回到屏幕顶部重复上述过程?这几个循环的过程只需要设计循环程序,具体设计如流程图。

- 1 -

5.有按键时结束程序?用到读键盘状态,此处要用到“int 16H”的01号功能 五、流程图 主程序:

显示小车的提示语 置小车显 示的列,行 调用 MOVECAR程序 置显示格式,清除之前画的小车 行数减1, 判断行是否显示到底 否 是

- 2 -

小车程序:

设置显示方式,清屏 调用路的 子程序 显示列加1 置小车工作模式 MODE = 1 调用画小车子程序 调用画小车子程序,延时子程序 置MODE = 0 判断显示列 是否到达边 缘 结束

六、程序源代码

SETMODE MACRO MODE1 MOV AH,0 MOV AL,MODE1 INT 10H ENDM DATAS SEGMENT

- 3 -

CAR DW 8 ;小车由6个字符组成

DB 0,1,0DBH,9 ;第一,二字节是字符坐标位移量 DB 0,1,0DBH,7,0,1,0DBH,9 ;三四字节是字符与字符属性 DB 1,0,4FH,8,0,-2,4FH,8 DB -2,2,3,13,0,-2,3,10 DB 0,1,3,4

DRAWLU DB 0DBH ;画路的字符

ROW DB ? ;显示小车的行坐标 COLUMN DB ? ;显示小车的列坐标 MODE DB ? ;控制画小车的变量 YS DB 4 ;控制路的颜色

A DB 'press any buton to show my work',13,10,'$';显示提示语 B db 'after the work press any key to the end$' DATAS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS MOV DS,AX

LEA DX,A ; 显示提示语 MOV AH,9 INT 21H LEA DX,B MOV AH,9 INT 21H MOV AH,7 INT 21H

A0: MOV ROW,1 ;置显示行为第1行 A1:

MOV COLUMN,0 ;置显示列为第0列 CALL MOVECAR ;调用画小车的子程序 SETMODE 02H ;设置显示格式 ADD ROW,4 ;设置显示路的行 MOV DH,ROW ;设置显示路的列 MOV DL,COLUMN ;显示光标位置 MOV AH,2 INT 10H CMP ROW,21 JZ A0 JNZ A1 EXIT:

MOV AH,4CH INT 21H

- 4 -

MOVECAR PROC NEAR

SETMODE 02H ;设置显示方式(有清屏作用) CALL LU ;画路 INC YS A2:

MOV MODE,1 ;设置小车工作模式 CALL DRAW ;画小车

CALL DELAY ;延时 CMP COLUMN,76 JA EXIT1

MOV MODE,0 CALL DRAW

INC COLUMN JMP A2 EXIT1: RET MOVECAR ENDP

DRAW PROC NEAR

MOV DH,ROW MOV DL,COLUMN

MOV CX,[CAR]

LEA DI,CAR+2 A3:

ADD DH,[DI+0] ADD DL,[DI+1]

MOV AH,2 INT 10H

MOV AL,[DI+2]

MOV BL,[DI+3] CMP MODE,0 JNE A4

MOV BL,0 A4:

PUSH CX

MOV CX,1 MOV AH,09H INT 10H POP CX ADD DI,4 LOOP A3 ADD DH,3 MOV AH,2 INT 10H RET

;是否到达显示边缘 ;设置小车工作模式(擦除) ;改变显示列重新画小车 ;设置显示字符的行列 ;字符开始的地址送给DI ;字符定义中的显示行列 ;小车属性 ;模式为0,字符为黑底黑字,擦除小车 ;画小车 - 5 -

DRAW ENDP

DELAY PROC NEAR ;延时子程序 PUSH AX

MOV AH,1H ;判读有无输入 INT 16H

JNE EXIT MOV DX,888H A5:

MOV CX,0 LOOP $ DEC DX JNZ A5 POP AX RET DELAY ENDP

LU PROC NEAR PUSH DX PUSH CX PUSH AX MOV DH,ROW MOV DL,COLUMN LEA DI,CAR+2 ADD DH,[DI+0] ADD DH,2 MOV AH,2 INT 10H

MOV AL,DRAWLU MOV BL,YS MOV CX,80 MOV AH,9 INT 10H POP AX POP CX POP DX RET

LU ENDP CODES ENDS END START

;路的子程序 - 6 -

七、结果显示

图(1)

图(2)

到达低端时又回到顶端重新显示,直到有按键输入 八、感想、收获及体会

刚知道要做课程设计时,有些兴奋,我们之前还没做过什么课设,因此我对它充满了好奇。第一天开动员会时,听到老师的一席话后,感觉课设也跟上课一样只是我们的黑板换做了电脑,你需要在你的电脑上涂鸦你的作品。之后得到题目的我,有一种冲动——我看完之后是否能立即吧它编出来呢?答案是否定的!!!我之前想先画个小车的整体,之后用控制显示来使小车动起来,这样想结果根本不能实现!这个想法也是用到了C,C++的构思。

于是,我开始翻看我的课本,找关于动画的设计方法,只可惜书上只讲了原理,这是很模糊的。根本编不出来啊!到图书馆找了几本关于动画的设计书,看过之后才明白,动画的关键问题是“延时子程序的设计”。看到这些,这个程序我有了一定的眉目,于是分析书上提供的例子开始了自己的设计。

最终,经过查书上网,我发现网上有一个例子就是我要做的这个题目,当时我就看完了,结果他的这个是在图书馆书上的一个例子!我也结合自己的想法和书上的例子把我的课设弄完了!

- 7 -

本文来源:https://www.bwwdw.com/article/4wh5.html

Top