汇编大全语言课程设计论文正文粒子运动动画报告大学论文.docx
- 文档编号:11802022
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:57
- 大小:407.37KB
汇编大全语言课程设计论文正文粒子运动动画报告大学论文.docx
《汇编大全语言课程设计论文正文粒子运动动画报告大学论文.docx》由会员分享,可在线阅读,更多相关《汇编大全语言课程设计论文正文粒子运动动画报告大学论文.docx(57页珍藏版)》请在冰点文库上搜索。
汇编大全语言课程设计论文正文粒子运动动画报告大学论文
汇编语言实训任务书
题目:
粒子运动动画
学生姓名学号:
钟磊;13740133
班级:
13级软件工程
题目类型:
软件工程(R)指导教师:
刘树群
一、设计目的
用汇编语言编程设计一个简单的动画程序,实现粒子的运动。
通过设计,掌握显示输出和基本数据像素颜色指令的应用,进一步提高综合运用知识的能力。
二、设计内容(包括原始数据、技术参数、条件、设计要求等):
随机数量的种子,每个种子随机的像素颜色,任意方向自由随机的分散或集中,并且种子数量不断地增加。
三、设计要求
题目的选择是根据汇编语言的特点主要针对系统内部的一些中断调用、系统功能调用、系统数据处理、文件数据处理、以及相关的API而设计的,是对所学课程知识较为系统的应用。
由于汇编语言编程相对其他语言编程比较复杂,因此,在设计上应把重点放在程序的功能实现上,不要太在意程序的结构和显示界面的设计。
不要局限于题目所规定的要求,可以灵活裁减,设计出功能更完善程序。
另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可作为课程设计的题目。
四、提交的成果
1.设计说明书一份,内容包括:
包含任务书一份
1)中文摘要100字,关键词3-5个。
2)实训题目、内容、要求。
3)总体设计(包含几大功能模块)。
4)详细设计(各功能模块的具体实现算法——流程图)
5)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。
6)调试分析(包含各模块的测试用例,及测试结果。
)
7)总结(实训完成了哪些功能,还有哪些地方需要改进,及通过实训有何收获,调试程序的体会等)
8)参考文献、致谢等。
五、主要参考资料
[1]李敬兆等编.《汇编语言程序设计》.合肥:
中国科学技术大学出版社,2008.9
[2]李敬兆等编.《汇编语言程序设计实验教程及习题解答》.合肥:
中国科学技术大学出版社,2008.9
[3]王爽等编.《汇编语言》.北京:
清华大学出版社,2003.5
[4]曹加恒等编.《新一代汇编语言课程设计》.北京:
高等教育出版社,2003.6
[5]杨路明等编.《汇编语言程序设计》.长沙:
中南大学出版社,2005.8 [6]詹仕华等编.《汇编语言程序设计》.北京:
中国电力出版社,2008.2 [7]詹仕华等编.《汇编语言程序设计习题解答及课程设计、设计辅导》.北京:
中国电力出版社,2008.2
[8]宋彩莉等编.《汇编语言程序设计学习指导》.西安:
西安交通大学出版社,2008.2
六、各阶段时间安排(共1周)
日期
内容
地点
星期一
教师讲解设计要求,准备参考资料
实验室
星期二
分析系统,方案设计
实验室
星期三
方案设计,编程
实验室
星期四
调试程序,书写实训说明书
实验室
星期五
完成实训说明书,答辩
实验室
摘要
此次汇编语言课程说明书根据设计任务阐述粒子运动动画汇编程序的设计基本思想与方案,绘制程序流程图,运用8086CPU提供的指令、伪指令、宏指令,同时给出说明注释。
并利用计算机提供的软件调试工具对所编写程序进行调试,记录下整个调试分析的过程与运行结果。
关键词:
粒子运动动画、汇编语言、方案、调试。
1概述
1.1课程设计的目的
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机硬件特性并能直接控制硬件的唯一语言。
汇编语言程序设计课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。
因此,要求我们能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。
对我们掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
培养我们综合运用所学知识独立完成汇编程序课题的能力。
使我们能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。
提高我们对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
培养我们从资料文献、科学实验中获得知识的能力,提高我们从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
培养我们勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
1.2课程设计的要求
动画程序设计
要求完成一个在显示器上显示一个图形动画设计,即当程序运行时可看到移动的图形或图像。
(比如:
当程序运行之后,即可让一个图形或图像实现在窗口中央集中,然后在黄口范围内只有运动。
)
此程序涉及到宏和I/O中断的调用,要求我们掌握对宏的定义和使用,使用汇编语言对I/O中断的使用。
小组成员分工协作完成。
要求我们每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。
学生查阅相关资料,自学具体课题中涉及到的新知识,能够按照老师的要求对待设计的系统的程序流程图进行正确地绘制。
学生在老师的指导下,能够写出相应的源程序代码,采用结构化、模块化程序设计方法,功能要完善,界面要美观。
所设计的系统原则上要能够运行无误,结果准确。
在条件允许的情况下,学生能够最终将系统所要实现的功能演示出来。
最后经验收合格后,按要求写出课程设计报告。
总体设计应配合软件总体模块结构图来说明软件应具有的功能。
详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。
2系统分析
2.1主程序设计思想
本程序主要实现在窗口内粒子的运动,可以分为三大块:
首先窗口界面的生成,其次随机生成N个随机种子变量,使其实现在窗口中央集中。
最后第三部分是运动轨迹的绘制,主要实现种子在窗口中各方向实运动的动态效果,动画的原理实质上是在屏幕上连续的间隔较小的地方显示相同的图案。
由于人眼具有视觉暂留的特性,我们就会看到“运动”的画面。
模块图如下:
图2-1模块图
2.2粒子动画设计思想
(1)建立窗口
此模块要呈现一个窗口用来作为显示动画的幕布。
首先要选用ProcWinMain定义主要的窗口函数,在用PAINT消息完成客户区的更新或失效区域的绘制,然后建立窗口。
在窗口程序中利用invoke、uMsg==WM_COMMAND、DIB_RGB_COLORS等一系列的函数以及窗口消息函数,来实现种子初始化、窗口像素淡化等一系列子程序的调用与实现。
因为要实现一系列的条件判断,所以用了大量的if条件的嵌套使用。
每隔一定的时间关标要移动,才能画出完整的图形,所以还需设置延时的时间。
(2)生成种子
此模块主要是想实现多种子在窗口内的生成。
联系实际,可以通过定义多变量以及一个过滤的定义来实现。
为类是程序达到可编程性要求使用while语句。
所以需要根据需要来设置时间和行列变化方向,可根据想要呈现的图形效果具体设计。
(3)呈现游走动画效果
此模块主要是想呈现一个游走动画效果,联想现实生活中的动画,物体要车呈现一定规律,想要使程序呈现出这种动态效果,必须是人眼看到粒子是在移动的,而产生移动效果则可通过绘制不同方向的轨迹来实现,同样也需要采用延时,才能显示出更好的效果,本程序基本设计为粒子的随机移动。
(4)本程序所涉及的主要知识点
模块化设计方法:
模块化设计方法是按照各部分程序所实现的不同功能把程序划分成多个模块,各个模块在明确各自的功能和相互间的连接约定后,就可以分别编制和调试程序,最后再把它们连接起来,形成一个大程序。
这是一种很好的程序设计方法,而子程序结构就是模块化程序设计的基础。
子程序:
子程序又称为过程,它相当于高级语言中的过程和函数。
在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序的形式,以便需要时可以调用它。
2.3本章小结
通过初步的设计,我设计出了程序所要实现的效果,整体把握了程序的实现方法,并整理了整个程序的实现思路,在这过程中,最初想了几种实现方案,最后通过对程序实现的可行性和效率的分析,选了一种最适合的实现方案。
通过本阶段的设计、分析,做出了一个总体设计方案。
3详细设计
3.1主程序流程图
程序主要是设计为子程序调用的方法来实现,将各个模块设计为不同的子程序,然后在主程序中来调用这些子程序,每个子程序中都会调用延时子程序,以便达到想要的效果,主程序流程图如下:
图3-1主程序流程图
3.2部分模块说明
(1)主程序:
主程序定义了许多变量,是为后面画图形做一个标志和跳转的作用,这里没有用寄存器的原因是,此程序需要存值的地方很多,而寄存器的数量有限,为避免寄存器的值相互干扰,故另外定义变量。
在主程序中,设定了变量的值,然后调用子程序,依次实现动画效果。
.data
xClientDWORD600;客户区宽度
yClientDWORD400;客户区高度
viewDWORD1;生成模式:
0无轨迹模式,1拖轨模式,2轨迹模式
smodeDWORD1;种子模式:
0分散,1集中
seedDWORD1001;种子数
astepDWORD16;单步次数
speedDWORD18;速度控制值(毫秒)
ftimeDWORD0;时钟标志:
0没用,100时钟编号
rngsDWORD242343,5436,5675,67,678979098,890,32545436,657563453,23435345,143545,45976768,6754,743453455,67546,754,754324783
ridxDWORD0
tnDWORD0A2F59C2Eh;随机数初始值的工作变量
raDWORD19;随机数因子
rbDWORD91;随机数平移
rnDWORD0A2F59C2Eh;随机数初始值r0
rsDWORD16;随机数向右移位的次数
maDWORD3;随机数掩码
mfDWORD0;位0:
方向数(取值4或8),位1:
绝对方向行走模式还是相对模式(A或R)
bkcolorDWORD0FFFFFFH
bmFileBITMAPFILEHEADER<04D42H,0,0,0,54>
bmInfoBITMAPINFOHEADER
bmFilterBYTE"位图文件(*.BMP)",0,"*.BMP",0,"所有文件(*.*)",0,"*.*",0,0
bmDefExtBYTE"BMP",0
szCapBYTE"粒子运动动画",0
formatBYTE"%u",0
.data?
hInstanceDWORD?
hWinMainDWORD?
hdcTempHDC?
seedxchDWORD?
strtempBYTE1024dup(?
)
hBitmapTempHBITMAP?
mTempDWORD?
bitmapTempBITMAP
>;背景位图信息
ofnOPENFILENAME
>
filenameBYTEMAX_PATHdup(?
)
pathnameBYTEMAX_PATHdup(?
)
ALIGN16
atsATOMST10000dup(
>);种子数组
attDWORD10000dup(?
)
crCustColorsDWORD16dup(?
)
.const
szClassNamedb'rpClass',0
;-------------------------------------
(2)初始化种子子程序
此程序设计的是先初始化种子,分散的种子。
随机产生n个初始点和颜色对于此部分,我把它设计为一个子程序,然后在中分别调用其他子程序来实现想要的效果,具体实现代码如下:
RandProcprochDlg:
DWORD,uMsg:
DWORD,wParam:
DWORD,lParam:
DWORD
.ifuMsg==WM_INITDIALOG
invokesetIPs,hDlg,IDC_EDIT01,ra
invokesetIPs,hDlg,IDC_EDIT03,rb
invokesetIPs,hDlg,IDC_EDIT02,rn
invokesetIPs,hDlg,IDC_EDIT04,rs
jmpItRet0
.elseifuMsg==WM_COMMAND
.ifwParam==IDOK
invokegetIPs,hDlg,IDC_EDIT01
oreax,1
movra,eax
invokegetIPs,hDlg,IDC_EDIT03
movrb,eax
invokegetIPs,hDlg,IDC_EDIT02
movrn,eax
invokegetIPs,hDlg,IDC_EDIT04
;限制移位的范围
.ifeax moveax,0 .elseifeax>28 moveax,28 .endif movrs,eax invokeEndDialog,hDlg,wParam moveax,TRUE jmpItRet .elseifwParam==IDCANCEL invokeEndDialog,hDlg,wParam moveax,TRUE jmpItRet .endif .endif ItRet0: xoreax,eax ItRet: ret RandProcendp (3)单步(n个像素距离内的)随机行走部分 此段程序使用循环体以及条件语句的嵌套使用实现各个种子的随机游走,同时配合其余子程序模块实现其始终处于冲口内部。 该子程序是整个程序的核心部分,具体实现代码如下: 第一部分: Stepprocusesebx,hdcT: HDC,_n: DWORD LOCAL_k: DWORD .ifview==3 movebx,offsetats movedx,offsetatt movecx,seed .whileecx moveax,[ebx] mov[edx],eax addebx,8 addedx,4 dececx .endw .endif movecx,0 .whileecx<_n pushecx movebx,offsetats moveax,seed mov_k,eax .while_k callrnd;rnd()为: 产生0,1,2,3的随机数发生器 andeax,3 .ifeax==0 inc[ebx].ATOMST.x;向右行走一个像素的距离 .elseifeax==1 dec[ebx].ATOMST.y;向上行走一个像素的距离 .elseifeax==2 dec[ebx].ATOMST.x;向左行走一个像素的距离 .elseifeax==3 inc[ebx].ATOMST.y;向下行走一个像素的距离 .elseifeax==4 inc[ebx].ATOMST.x dec[ebx].ATOMST.y .elseifeax==5 dec[ebx].ATOMST.x dec[ebx].ATOMST.y .elseifeax==6 dec[ebx].ATOMST.x inc[ebx].ATOMST.y .else inc[ebx].ATOMST.x inc[ebx].ATOMST.y .endif 此程序主要是图像的移动,通过不同的值的定义实现图像向不同方向的移动。 第二个子程序: ;水平方向上的越界检查(越界时进行回绕处理) movsxeax,[ebx].ATOMST.x .ifeax moveax,xClient deceax mov[ebx].ATOMST.x,ax .elseifeax>=xClient moveax,0 mov[ebx].ATOMST.x,ax .endif ;垂直方向上的越界检查(也做回绕处理) movsxedx,[ebx].ATOMST.y .ifedx movedx,yClient decedx mov[ebx].ATOMST.y,dx .elseifedx>=yClient movedx,0 mov[ebx].ATOMST.y,dx .endif ;绘制当前状态(向@hDc设备绘制一点) movzxeax,[ebx].ATOMST.x movzxedx,[ebx].ATOMST.y .ifview! =3 invokeSetPixel,hdcT,eax,edx,[ebx].ATOMST.color .endif addebx,sizeofATOMST dec_k .endw popecx incecx .endw 此程序是利用如.ifeax 。 3.3其他主要子程序说明 (1)绘制路线子程序 此程序用于绘制粒子运动的不同轨迹,在不同的时间使其粒子想不通的方向产生运动轨迹。 绘制整条直线及用算法实现范围的计算,分别定义长和宽为_x,_xx,_y,_yy,利用坐标思维_xx-_x,_yy-_y来实现场合矿的计算。 利用坐标点绘制直线来实现横向和竖向的运动轨迹。 效果如下图所示: 横向路线轨迹分解: 图3-3颜色变换一 图3—1轨迹分解图 代码如下: ;绘制直线 drawLineprocusesebxesiedi,_x: SWORD,_y: SWORD,_xx: SWORD,_yy: SWORD,_color: DWORD LOCALincx: SDWORD,incy: SDWORD moveax,bitmapTemp.bmHeight movzxecx,_y subeax,ecx deceax imuleax,bitmapTemp.bmWidthBytes movzxedx,_x shledx,2 addeax,edx movedi,mTemp addedi,eax ;计算两个方向的画线距离 movzxeax,_xx movzxedx,_x subeax,edx;dx=xx-x movzxedx,_y movzxecx,_yy subedx,ecx;dy=yy-y ;计算两个方向的步长 movebx,4 .if(eax negebx negeax .elseif! eax movebx,eax .endif movincx,ebx movecx,bitmapTemp.bmWidthBytes .if(edx negecx negedx .elseif! edx movecx,edx .endif movincy,ecx movebx,_color ;绘制整条直线 .whileecx mov[edi],ebx addesi,eax addedi,incy .ifesi>=SDWORDPTR0 addedi,incx subesi,edx .endif dececx .endw .endif ;mov[edi],ebx ret drawLineendp (2)随机数发生器子程序 此程序用于产生随机数,对应种子时间内的路径。 (4)弱化内存设备数据区像素的颜色子程序 此程序用于弱化内存设备数据区像素的颜色,使其背景显示纯色。 (5)其他功能子程序 选取背景颜色程序子程序,获取对话框中指定编辑框的整数设置子程序,对话框中指定编辑框的初始值保存位图文件选择框子程序,获取有效的全路径文件名子程序,将内存设备位图写到文件系统参数设置对话框过程子程序等子程序共同下更好的实现程序要求。 3.4本章小结 整个代码部分的设计,本小组分工合作完成,程序难点在于行列变换的情况较复杂,所以需跳转很多次,定义了许多变量来存放定义的值,起着标志的作用,通过比较值是否与预设的值相等,来实现跳转。 完成此部分后,我对子程序设计方法有了更进一步的了解,对于跳转语句的使用更加熟练,程序设计的能力也有所提升,思维更加严谨。 4程序的调试与运行结果说明 4.1程序调试 程序的分析、代码的编写完成后,开始对代码进行编译和调试,,程序调如图如下: 图4—1调试图 4.2程序运行 1)程序执行后建立窗口,在窗口中实现粒子种子的初始化并调用。 如下图使粒子种子集中于中央并显示。 图4—2运行图 (1) 2)窗口建立调用粒子种子,程序嗲用字程序实现粒子种子在窗口内的随机行走。 图4—3运行图 (2) 2)如图程序实现了对粒子种子的范围划定。 图4—4运行图(3) 4.3本章小结 通过对程序的编译、调试和运行,我对代码的调试方法更加熟悉,并了解到自己程序的不足之处,知道怎样去修改代码以及简化代 5课程设计总结 5.1设计的特点、不足 在动画程序中,通过对变量的定义以及对各子程序的调用,实现了对粒子的显示并移动,使其呈现动画效果。 让人在视觉上产生美感,程序尚有不足,比如效果不是很多,动画单一等。 5.2收获与体会 在编程的过程中,遇到了很多没有预料到的困难,有很多知
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 大全 语言 课程设计 论文 正文 粒子 运动 动画 报告 大学