收藏 分销(赏)

汇编语言专业课程设计论文动画程序设计样本.doc

上传人:二*** 文档编号:4517544 上传时间:2024-09-26 格式:DOC 页数:30 大小:940.50KB
下载 相关 举报
汇编语言专业课程设计论文动画程序设计样本.doc_第1页
第1页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、汇编语言专业课程设计论文动画程序设计学 号: 课 程 设 计题 目动画程序设计教 学 院计算机学院专 业计算机科学与技术班 级08级计算机科学与技术(1)班姓 名姚星指导教师姚莉、杨菲2010年12月27日课程设计任务书 2010 2011 学年第 一 学期学生姓名:姚星 专业班级:08计算机科学与技术(1)班指导教师: 姚莉、杨斐 工作部门: 计算机学院 一、课程设计题目:动画程序设计二、课程设计内容(含技术指标)要求完成一个在显示器上显示一个图形动画设计,即当程序运行时可看到移动的图形或图像。(比如:在出现的提示信息中输入某一个字母,即可让一个图形或图像出现在在屏幕的左边,然后移动到屏幕的

2、右边。)此程序涉及到宏和I/O中断的调用,要求学生掌握对宏的定义和使用,使用汇编语言对I/O中断的使用。三、进度安排2010年12月13日2010年12月14日,指导教师进行与课题相关的基础知识点讲解;2010年12月15日2010年12月17日,学生进行分组并选定课程设计题目,教师指导学生根据选定题目准备资料;2010年12月18日2010年12月19日,设计小组进行总体方案设计和任务分工;2010年12月20日2010年12月22日,每人完成自己承担的程序模块并通过独立编译;2010年12月23日2010年12月26日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行以及撰写课程

3、设计报告;2010年12月27日2010年12月28日,验收、修订课程设计报告、答辩及总结。 四、基本要求1晏伯武(组长)、姚莉、杨斐和田嵩组成设计小组。小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。2查阅相关资料,自学具体课题中涉及到的新知识,能够按照老师的要求对待设计的系统的程序流程图进行正确地绘制。3学生在老师的指导下,能够写出相应的源程序代码,采用结构化、模块化程序设计方法,功能要完善,界面要美观。4所设计的系统原则上要能够运行无误,结果准确。在条件允许的情况下,学生能够最终将系统所要实现的功能演示出来。5最后经验收合格后,按要求写出课程设计报告

4、,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、谢启、附录:带中文注释的程序清单、参考文献。报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”20磅,首行缩进2字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。目 录一 概述11122二 总体方案设计3 主程序设计思想3 霓虹灯图案设计思想3 本章小结5三 详细设计66712

5、14四 程序的调试与运行结果说明1515151920五 课程设计总结21、不足2121参考文献23一 概述汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机硬件特性并能直接控制硬件的唯一语言。汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。对我们掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。培养我们综合运用所学知识独立完成汇编程序课题的能力。使我们能够较

6、全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。提高我们对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。培养我们从资料文献、科学实验中获得知识的能力,提高我们从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。培养我们勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。动画程序设计要求完成一个在显示器上显示一个图形动画设计,即当程序运行时可看到移动的图形或图像。(比如:在出现的提示信息中输入某一个字母,即可让一个图形或图像出现在在屏幕的左边,然后移动到屏幕的右边。)此程序

7、涉及到宏和I/O中断的调用,要求我们掌握对宏的定义和使用,使用汇编语言对I/O中断的使用。小组成员分工协作完成。要求我们每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。学生查阅相关资料,自学具体课题中涉及到的新知识,能够按照老师的要求对待设计的系统的程序流程图进行正确地绘制。学生在老师的指导下,能够写出相应的源程序代码,采用结构化、模块化程序设计方法,功能要完善,界面要美观。所设计的系统原则上要能够运行无误,结果准确。在条件允许的情况下,学生能够最终将系统所要实现的功能演示出来。最后经验收合格后,按要求写出课程设计报告。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设

8、计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。Windows XP/98/2000操作系统、文本编辑器使用EDIT或NOTEPAD,。定义数据段,设置主要参数:设置9号中断向量地址,9号中断向量首址;定义时间参数为秒、分、小时。在代码段,调用10中断、21中断,整个程序使用序分化各子功能。二 总体方案设计 主程序设计思想 本程序主要实现霓虹灯的效果,可以分为三大块:首先画霓虹灯的形状,其次让组成霓虹灯的符号按一定的规律变色,实现动态效果,最后通过重画实现动画闭幕的效果。动画的原理实质上是在屏幕上连续的间隔较小的地方显示相同的图案。由于人

9、眼具有视觉暂留的特性,我们就会看到“运动”的画面。模块图如下: 总体画三角形帘子 变换颜色 呈现闭幕效果 图2-1 模块图 霓虹灯图案设计思想(1)画三角形帘子 此模块要呈现一个三角形帘子的图形,首先要选用组成帘子的符号,在这里我选用了和*,也可以根据要求选择其他符号,的ASCII码是40H,*的ASCII是2AH,也可直接将符号用送给寄存器AL,然后调用10中断的9号功能,将其显示出来。因为要画出固定的图形,所以必须指定光标位置,然后在相应的位置显示,这里指定光标位置学要调用10中断的2号功能,将所需设置的行列号分别送给寄存器DH和DL即可。后面可以通过行列的变化来画出所需的图形,行列的起始

10、位置和最终位置可以根据实际情况进行设置,每隔一定的时间关标要移动,才能画出完整的图形,所以还需设置延时的时间。(2)变换颜色此模块主要是想呈现一个灯光闪烁的效果,联系实际,可以通过变换字符的颜色来实现这一效果,画不同颜色的字符同样需要调用10中断的9号功能,把想要变换的颜色属性值存放到寄存器BL即可显示出不同颜色的字符。变换颜色还需考虑时间和顺序,所以需要根据需要来设置时间和行列变化方向,可根据想要呈现的图形效果具体设计。(3)呈现闭幕效果此模块主要是想呈现一个闭幕效果,联想现实生活中的闭幕,帘子从两边到中间移动,或从上到下等等,想要使程序呈现出这种动态效果,必须是人眼看到字符是在移动的,而产

11、生移动效果则可通过光标移动在不同地方画相同的字符来实现,同样也需要采用延时,才能显示出更好的效果,本程序基本设计为上下的字符向中间移动。(4)本程序所涉及的主要知识点模块化设计方法:模块化设计方法是按照各部分程序所实现的不同功能把程序划分成多个模块,各个模块在明确各自的功能和相互间的连接约定后,就可以分别编制和调试程序,最后再把它们连接起来,形成一个大程序。这是一种很好的程序设计方法,而子程序结构就是模块化程序设计的基础。子程序:子程序又称为过程,它相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把

12、这些程序段写成子程序的形式,以便需要时可以调用它。INT 10中断:INT 10中断提供了设置各种文本和图形显示方式的功能,程序只要将给出调用参数,将参数送给相应的寄存器,即可建立某种相应的方式。例如功能00可为当前执行程序初始化显示方式或在文本方式和图形之间切换。显示器一旦设置成图形方式,光标即消失;功能9可在光标位置显示字符和属性,只要设置相应参数即可实现等等。INT 21中断:INT 21中断提供一些键盘功能调用,在编写程序时,使用此功能调用非常方便。比如调用功能1,能等待从键盘输入一个字符,并在视频显示器上回显;调用功能9,能将代码段定义的字符串回显到视频显示器上等等。 本章小结通过初

13、步的设计,我设计出了程序所要实现的效果,整体把握了程序的实现方法,并整理了整个程序的实现思路,在这过程中,最初想了几种实现方案,最后通过对程序实现的可行性和效率的分析,选了一种最适合的实现方案。通过本阶段的设计、分析,做出了一个总体设计方案。三 详细设计 程序主要是设计为子程序调用的方法来实现,将各个模块设计为不同的子程序,然后在主程序中来调用这些子程序,每个子程序中都会调用延时子程序,以便达到想要的效果,主程序流程图如下: 开始定义相关变量调用清屏子程序调用画三角形帘子的子程序重设相关变量调用10次变换颜色子程序 调用闭幕效果子程序 结束图3-1 主程序流程图 此程序设计的是先画三角形帘子,

14、对于此部分,我把它设计为一个子程序,然后在主程序中分别调用来实现想要的效果,具体实现代码如下:(1)主程序:code_seg segment assume cs:code_seg,ds:data_seg,ss:stack main proc far push ds sub ax,ax ;寄存器AX清零 sub cx,cx ;寄存器CX清零 push ax push cx mov ax,data_seg mov ds,ax mov char,2 ;定义不同变量,根据变量取 mov count,2 ;值的不同来实现跳转 mov char0,4 mov cool1,0eh ;设置颜色的属性值 mov

15、 cool2,0ah mov count0,8 ;调用延时程序的次数 mov count1,10 ;调用颜色变换子程序的次数 again: call clear_screen ;程序开始清屏 mov line_on1,4 ;设置行列起始位置 mov col_on1,4 call must_2 ;调用画三角形子程序 mov count,1 again1: mov line_on1,4 mov col_on1,4 call must_21 ;调用颜色变换子程序 cmp count,1 jne exit0 mov cool1,0eh ;设置颜色属性值 mov cool2,0ah inc count

16、jmp exit12 exit0: mov cool1,0ch ;设置不同颜色的属性值 mov cool2,03h dec count exit12: dec count1 ;计数,变色次数 jne again1 mov line_on1,4 ;重设行列值 mov col_on1,4 mov line_on2,16 mov col_on2,3 call must_22 ;调用闭幕子程序 pop cx ret main endp 主程序定义了许多变量,是为后面画图形做一个标志和跳转的作用,这里没有用寄存器的原因是,此程序需要存值的地方很多,而寄存器的数量有限,为避免寄存器的值相互干扰,故另外定义

17、变量。在主程序中,设定了变量的值,然后调用子程序,依次实现动画效果。(2) 画三角形帘子部分先画符号,第四行第四列为起始点,然后再画的地方重画*,行增加一行,继续画,然后又重画*,如此重复,直到画的行为第七行时,就使列增加2列,同样的方法画,直到画的行为第八行,然后列增加2,用同样的方法画,只是每一列的符号个数依次增加或减少,当符号个数未到5时,就一直画,从每一列一个画到每一列五个,当到了五个时,又从每列五个画到每列一个,直到列数到达74列,整个三角形帘子就实现了,如下图所示:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

18、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 图3-2 三角形帘子第一个子程序:must_2 proc near ;显示整个画面,当count=1时,显示左边三角,当count=2时显示右 push ax ; 边三角 push bx push dx mov ah,0fh ;取当前显示方式 int 10h mov cool0,1 plot_next: mov dh,line_on1 ;设置光标行列 mov dl,col_on1 mov ah,2 ;置光标位置 int 10h

19、 mov al,40h ;显示字符及其属性 mov bl,0ch push cx mov cx,1 mov ah,09 ;显示字符 int 10h pop cx call dly_qrtr ;调用延时子程序 mov dl,cool0 cmp char0,dl je exit3 call erase ;调用画*的子程序 jmp plot_next exit3: cmp col_on1,74 ;比较是否到达74列,到了就 je exit1 ;结束程序,否则继续执行 cmp col_on1,38 ;比较是否到达38列,看是否 jne exit7 ;画两列五个字符 add col_on1,2 mov

20、cool0,1 mov line_on1,4 jmp plot_next exit7: add col_on1,2 ;列增加2列 mov cool0,1 mov line_on1,4 ;每画完一列就将光标重置第四列 cmp count,1 je exit5 cmp char0,5 je exit4 inc char0 ;若不为5就加1 jmp plot_next exit5: cmp char0,1 je exit6 dec char0 ;若不为1就减1 jmp plot_next exit4: dec count dec char0 jmp plot_next exit6: inc coun

21、t inc char0 jmp plot_next exit1: pop dx pop bx pop ax must_2 endp此程序主要是画和行列的移动,通过行列的变化画出三角形帘子,然后在每个上面调用erase子程序来画*第二个子程序:erase proc near mov dh,line_on1 ;设置行列位置 mov dl,col_on1 mov ah,2 int 10h mov al,* mov bl,03h push cx mov cx,1 ;画符号的次数 mov ah,9 int 10h pop cx inc cool0 inc line_on1 ret erase endp

22、此程序是在must_2指定的行列画*,画完后使行增加一行,继续返回must_2,在行数加一后的地方画。(1)颜色变换子程序 此程序用于变换三角形帘子的颜色,在相同的地方重画相同的符号,采用不同的颜色画,调用延时程序,从上到下变换颜色,和*也采用不同的颜色,使看起来有吊灯的效果。分别用两种颜色的值赋给定义的变量,判断count的值,当count的值为1时采用一种颜色赋值给cool1和cool2,然后调用本程序,延时后再判断 count的值,如果为2就赋另一种值给cool1和cool2,如此循环判断十次,就会呈现出一个变换颜色闪动的效果,颜色变换图形效果如下图所示:第一种颜色变换: * * * *

23、 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 图3-3 颜色变换一第二种颜色变换:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 图

24、3-4 颜色变换二代码如下:;- must_21 proc near push ax push bx push dx mov ah,0fh ;设置显示方式 int 10h plot_next1: mov dh,line_on1 mov dl,col_on1 mov ah,2 int 10h mov ah,8 ;读取光标位置的字符和属性 int 10h cmp al, ;比较光标位置的字符是为空还是,或 je exit9 ;是*,若为空则增加列,若为,则设置 cmp al,40h ;不同的颜色属性值重画一遍,若为*则同 jne exit10 ; 样设置不同颜色属性值重画一遍 mov bl,coo

25、l1 jmp exit11 exit10: mov al,* mov bl,cool2 ;重新显示*,颜色不一样 exit11: push cx mov cx,1 mov ah,09 int 10h pop cx exit9: cmp col_on1,74 ;比较是否到达74列,到了则使列为4, je exit8 ;行增加一行 add col_on1,2 jmp plot_next1 exit8: call dly_qrtr ;调用延时子程序 dec count0 jne exit8 mov count0,10 mov col_on1,4 inc line_on1 cmp line_on1,9

26、 jne plot_next1 pop dx pop bx pop ax ret must_21 endp;-(3)闭幕子程序 首先在最后在第四行和十六行分别画一行,然后重画*,然后第四行增加一行,第十六行减一行,画,画完又重画*,如此循环,实现闭幕效果,最后到达中间时,由于上半部分是从第四列起,每隔两列画,直到七十四列,下班部分是从第三列起,直到七十五列,所以当画到中间时,上下就会重合,*就会不满整个空间,直到第十六列的移动到第四列时,程序结束,这样就呈现了一个闭幕的效果。(4)延时子程序 此程序用于延时,达到人眼所能反应的时间,看出变化效果。(5)清屏子程序 此程序用于清屏,将左上角的位置

27、定在(0,0),右下角的位置定在(24,79),执行后可将整个屏幕上的内容清除掉,然后继续执行后面的内容,此程序用在此时为避免没有清除掉的内容影响霓虹灯的效果。 整个代码部分的设计,本小组分工合作完成,程序难点在于行列变换的情况较复杂,所以需跳转很多次,定义了许多变量来存放定义的值,起着标志的作用,通过比较值是否与预设的值相等,来实现跳转。完成此部分后,我对子程序设计方法有了更进一步的了解,对于跳转语句的使用更加熟练,程序设计的能力也有所提升,思维更加严谨。四 程序的调试与运行结果说明程序的分析、代码的编写完成后,开始对代码进行编译和调试,我们采用masm 环境对所编代码进行调式、编译,用DE

28、BUG命令进行调试,程序调试图如下:图41 调试图(1)先画符号,第四行第四列为起始点,然后再画的地方重画*,行增加一行,继续画,然后又重画*,如此重复,直到画的行为第七行时,就使列增加2列,同样的方法画,直到画的行为第八行,然后列增加2,用同样的方法画,只是每一列的符号个数依次增加或减少,当符号个数未到5时,就一直画,从每一列一个画到每一列五个,当到了五个时,又从每列五个画到每列一个,直到列数到达74列,整个三角形帘子就实现了,图42为画三角形帘子的部分动态过程: 图 42 三角形帘子动态图(2)在相同的地方重画相同的符号,采用不同的颜色画,调用延时程序,从上到下变换颜色,和*也采用不同的颜

29、色,使看起来有吊灯的效果。分别用两种颜色的值赋给定义的变量,判断count的值,当count的值为1时采用一种颜色赋值给cool1和cool2,然后调用本程序,延时后再判断 count的值,如果为2就赋另一种值给cool1和cool2,如此循环判断十次,就会呈现出一个变换颜色闪动的效果。图43和44是霓虹灯动态变色的部分过程:图 43 变色动态图一 图44 变色动态图二(3)首先在最后在第四行和十六行分别画一行,然后重画*,然后第四行增加一行,第十六行减一行,画,画完又重画*,如此循环,实现闭幕效果,最后到达中间时,由于上半部分是从第四列起,每隔两列画,直到七十四列,下班部分是从第三列起,直到

30、七十五列,所以当画到中间时,上下就会重合,*就会不满整个空间,直到第十六列的移动到第四列时,程序结束,这样就呈现了一个闭幕的效果。图45和46为闭幕的部分效果:图 45 闭幕效果动态图一图46 闭幕效果动态图二(1)增加一个主界面由于程序界面不是很好看,所以我对程序进行了一个修改,增加了一个主界面,使程序执行不显得仓促,并可重复执行。在代码段增加菜单如下:menu db 5 dup(0ah)db 31 dup( ),MAIN MENU,0dh,0ahdb 25 dup( ),201,21 dup(205),187,0dh,0ahdb 25 dup( ),186, ,186,0dh,0ahdb

31、25 dup( ),186, ,186,0dh,0ahdb 25 dup( ),200,21 dup(205),188,0dh,0ahdb 28 dup( ),Choice(1,2):$在主函数中进行判断,执行往后跳回菜单项: call clear_screen lea dx,menu mov ah,9 int 21hinput: mov ah,0 int 16h cmp al,1 jnz cp2 jmp startcp2: mov ah,4ch int 21h然后在执行完一遍后用jmp语句重新跳转到显示主菜单的地方,这样可以重复执行,也可按2退出。执行时主界面如下图所示: 图51 主界面 通

32、过对程序的编译、调试和运行,我对代码的调试方法更加熟悉,并了解到自己程序的不足之处,知道怎样去修改代码以及简化代码。五 课程设计总结、不足在动画程序中,通过行列变化,在相同位子以不同颜色重画相同字符,实现动态灯的效果,让人在视觉上产生美感,程序尚有不足,比如效果不是很多,没有主界面等。在这次的课程设计中,通过实践操作,加深了对汇编语言的了解,增强了汇编的使用能力,有了整体的了解和把握。汇编语言虽然是门低级语言,解决问题的难度有限,但是它的与计算机硬件的紧密关系使的它有着独特的优点。汇编语言程序设计虽然是一门低级语言的程序设计,但是它的学习和我们以往所学习的高级语言程序设计又有相通之处:算法是程序设计的灵魂,而计算机的硬件条件又决定了程序设计的环境。因此在实践程序设计的过程中,要坚持软件与硬件相结合的原则,多探究计算机的内部构造及执行和相应程序的原理。 课程设计是个小工程,需要从多方面考虑用户的要求,即完善功能又要用户使用起来比较方便,当然也要考虑时间和效率。课程设

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服