《汇编语言程序设计》课程设计论文-动画贪吃蛇程序设计.doc_第1页
《汇编语言程序设计》课程设计论文-动画贪吃蛇程序设计.doc_第2页
《汇编语言程序设计》课程设计论文-动画贪吃蛇程序设计.doc_第3页
《汇编语言程序设计》课程设计论文-动画贪吃蛇程序设计.doc_第4页
《汇编语言程序设计》课程设计论文-动画贪吃蛇程序设计.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计课程设计论文 设计题目: 动画贪吃蛇程序的设计 专 业: 班 级:学 号:姓 名: 指导教师:职称: 日期: 2009年12月28日 摘要在我们空闲的时候,我们可以用一些我们学过的知识编一些东西,通过这些东西我们可以学习到汇编语言综合应用程序设计方法,还可以提高汇编语言实际应用能力,充分了解计算机硬件和软件,完成理论到实践的推进过程。这个程序就是用我所学过的汇编知识编的一个小游戏,这个游戏的程序主要就是用汇编宏和子程序的知识来编制而成的,我们用宏和子程序定义了很多的模块,模块也就是在我们的程序中直接可以调用的一个独立的程序。所以我们编写程序的时候可以很方便的用到它,所以那些基础知识也是我们编写程序的基础。关键词 宏定义,子程序,汇编,宏调用,主程序。abstractat the time of our spare time, we can use some knowledge that we learned to weave some things, passing these things we can study to edit collected materials the comprehensive applied program design method of language, can also raise to edit collected materials the actual applied ability of language, the full understanding calculator hardware and software, complete the propulsion process that the theories arrives the fulfillment.this procedure is with what i learned to edit collected materials a get-away drama of the knowledge plait, the procedure of this game mainly be use to edit collected materials great and sub- procedure of knowledge draw up and become of, we use great defined a lot of molds piece with sub- procedure, an independent procedure that the mold piece also is in our procedure and can adjust to use directly.so we weave the time of write the procedure and can be very convenient with it, so those foundations knowledge is also the foundation that we weave to write the procedure.key words the great definition, the sub- procedure, jumps to turn, edit collected materials, great adjust to use, the beginning starts to turn, main procedure.2目录摘要.abstract.一、背景分析及意义.1二、总体设计思想. 1三、主要功能. .2四、软硬件环境要求.2五、程序流程图. . 2六、使用说明. 3总体设计. 4参考文献. 4程序清单. 5一、 背景分析及意义现在有的一些人感觉生活都是很无聊的,特别是我们这些学生,所以有些时候肯定会玩各种各样的游戏的,有一些大的游戏,玩起来会话掉很多的时间,而且也会花掉大量精力的 ,所以在一些闲暇的时候一些小游戏会博得很多人的喜爱,例如:俄罗斯方块,和一些格斗游戏等等。然而这些小游戏的设计方法和软件有很多,所以也有很多不同的效果,本篇设计是采用汇编中宏定义和调用,子程序的调用等一些汇编知识编制而成的一个贪吃蛇小游戏,通过这个小游戏的制作,我们可以得到很多的益处,一方面我们可以不在浪费平时的一些空闲的时间了,而热中于我们自己喜欢的游戏;另一个方面我们制作完游戏还可以给自己或者别人来享受一下,同时自己也会有一种成就感。特别当你用自己学到的知识制作出一个东西的时候,或者克服一个困难的时候你就会发现你自己的价值所在了,而且这还能促进你喜欢学习的念头。二、总体设计思想这个程序的总体的思想也就是主要用的就是宏和子程序的定义和调用,首先,定义了5个宏它们分别为:屏幕初始化宏定义 在光标位置显示字符和属性定义 显示字符串宏定义 置光标位置宏定义 读光标位置的字符和属性宏定义。它们在程序中起到主要的作用。其次,就是子程序定义了,程序中定义了很多的子程序,其中有:控制子程序 食物子程序,还有记分子程序等。它们首先被主程序调用,然后它们之间再互相调用,这样构成了完整的游戏程序并实现其功能。具体的设计思想是:第一,对数据进行初始化,即对寄存器的初始化,比如对食物的初始化等。第二,开始运行,判断是否符合条件,如果符合赢的条件的话,就会跳转到赢的那个子程序下,然后那个赢的子程序会调用记分的那个子程序,最后显示赢的信息和分数后再转到控制程序执行控制和其后的程序。如果要是输的话,就会跳转到输的那个子程序下,然后那个输的子程序也会调用记分的那个子程序,最后显示得分和信息。如果要是没有赢也没有输的话,那程序会跳到控制的子程序中,等控制完以后程序又会跳到程序判断的那个地方重复的执行。这个就是完成这个游戏程序的整个思想。三、完成的主要功能这个程序完成的功能就是和别的游戏一样,最初,给出一个初始化的界面,和一个红的小心,我们要把那个最初给出那个小链条穿过那个饿小红心,然后那个红心就会变成我们那个小链条上的组成单元一样的一个小黄圆,和在别的地方会在出现另一个小红心,我们接下来要做的就是要把那个小黄圆穿过来,然后我们那个小链条就会变长了,然后在穿过小红心,就这样重复的做就行了,随着你的穿过你的小链条就会越来越长了,这是你的得分就会越高,同时你难度也会变大的,因为如果你要碰到四周的变的话,或者你自己的那个小链条首尾要是相连的话你就会输了,所以当你那个小链条很长的时候,难度自然就会变大了。四、软硬件环境要求本程序适合于windows操作系统,使用的是masm5.0版本的工具和一台联想计算机。五、程序流程图动画贪吃蛇程序的流程图如图1所示。开始初始化数据是否成功?losewinnolose显示分数和符号显示成功的符号上下左右的控制结束图1 动画贪吃蛇程序的流程图 六、使用说明、汇编过程a、把源程序汇编成*.obj文件。方法是:在dos环境中找到*.asm的目标文件,然后输入masm * .asm,然后按回车就可以生成目标文件.obj了。b、再输入link .obj,在按回车就可以得到可执行文件*.exe了。、运行程序在我们用的软件masm的目录下,我们可以找到*.exe文件,双击就可以打开了。再有就是在dos的环境下,在*.exe的文件所在的位置,直接输入*.exe的文件名就可以了,比如说,如果我们的*.exe文件在c: masm下,我们就可以在dos环境下在c: masm后直接输入*.exe的文件名,即*就可以了。、玩游戏我们通过键盘的上下左右键来控制里面我们的那个小链条的,即键盘上的键,只需要这四个键就可以了。设计总结这个 小游戏程序主要用的技术包括三个方面:第一个方面就是宏的定义及调用,这个程序当中多次用到宏汇编。这不仅减少了程序的开销,而且还减少了程序运行的时间和一些存储空间。第二个方面就是子程序的调用,这个程序中也有多处用到call的调用。使用子程序不仅可以提供模块化程序设计的条件,而且便于程序的调试及修改等。第三个方面就是其中的一些跳转的问题,这个用起来有点麻烦,但是这个用起来比较方便,所以文中很多很多的地方都用到这个跳转。比如:jmp,jnc,jc等。在这个游戏的设计中,其实也遇到很多的困难,比如说一些寄存器使用冲突的问题 ,还有一些是宏的使用问题和当中跳转的问题等。经过这一个小游戏程序的设计,我也深刻体会到这个汇编程序设计的意义所在了,原本在课堂上学的东西自己现在把它运用到现时的生活中的一些小的问题上,那种感觉和意义是无法用言语表达的, 在这个过程当中我也知道了汇编这门课程的重要性了。参考文献1 ibm-pc 汇编语言程序设计 沈美明等 清华大学出版社 2 8086/8088宏汇编语言程序设计教程 第二版 王正智/编 电子工业出版社3 80x86汇编语言程序设计教程 杨季文/等编 清华大学出版社程序清单clear macro p1,p2,p3,p4 ;屏幕初始化 mov ah,6 mov al,0 mov ch,p1 mov cl,p2 mov dh,p3 mov dl,p4 mov bh,7 int 10h endmprint macro p1,p2 ;在光标位置显示字符和属性 mov al,p1 mov cx,p2 mov ah,9h int 10h endmprintsz macro p1,p2; 显示字符串 mov al,0 lea bp,p1 mov cx,p2 mov ah,13h int 10h endmwcur macro p1,p2;set bh=0 置光标位置 mov dh,p1 mov dl,p2 mov ah,2h int 10h endmrcur macro ;读光标位置的字符和属性 mov ah,08h int 10h endm.model small.data over_h dw 0 over_l dw 0 head_h dw 0 head_l dw 0 pt_h dw 0 pt_l dw 0 queue_len dw 0 tou_h db 0 tou_l db 0 wei_h db 0 wei_l db 0 food_h db 20,5 ,9 ,7 ,13,16,6 ,7 ,10,23,18,14,15,9,15,19 db 21,6,20,11,15,20,21,14,7 ,9 ,8 ,10,24,17,5 ,13 db 18,9 ,16,19,22,13,18,23,6 ,8 ,15,23,18,17,9 ,9 db 9 ,16,15,20,6 ,9,22,24,24,21,16,5 ,19,17,16,14 db 13,10,18,22,5 ,6 ,7 ,21,19,18,20,14,9,16,17,13,19,0ffh ph_food db 0 food_l db 40,24,15,47,19,45,67,79,62,46,51,1 ,3 ,8,68,21 db 68,2,38,45,29,15,6 ,55,77,66,13,30,60,75,12,15 db 74,77,16,5 ,5 ,54,52,39,37,44,67,66,51,20,21,66 db 77,33,55,28,46,1,71,73,0 ,0 ,58,69,49,21,56,30 db 33,45,59,54,65,68,22,11,8 ,76,32,62,4,22,38,38,24,0ffh pl_food db 0 nfood db 0 direct db 3 speed db 0 t_speed db 0 mar_top equ 5 mar_down equ 23 mar_left equ 0 mar_right equ 79 success db 2 yu_shap equ 07h yu_color equ 0eh szscore db you have got ,thanks for playing anything exit ! nscore equ $-szscore szlose db you lose ! nlose equ $-szlose szwin db congratulations ! you are the winner ! nwin equ $-szwin szgood db good , just go on ! -_-! ngood equ $-szgoodqueue_h db 200 dup(0)queue_l db 200 dup(0).codeyuyu proc faryuyu_start: push ax ;寄存器进栈push bxpush cx push dx push di push si push ds push es mov ax,data mov ds,ax mov es,ax mov ah,1 mov cx,1000h int 10h;置光标类型 clear 0,0,23,79 clear mar_top,mar_left,mar_down,mar_right;调用屏幕初始化宏定义 mov bx,offset queue_h mov byte ptr bx,12 inc bx mov byte ptr bx,12 inc bx mov byte ptr bx,12 mov bx,offset queue_l mov byte ptr bx,30 inc bx mov byte ptr bx,28 inc bx mov byte ptr bx,29 mov ax,offset queue_h mov head_h,ax inc ax mov over_h,ax mov ax,offset queue_l mov head_l,ax inc ax mov over_l,ax mov bx,head_h mov al,byte ptr bx mov tou_h,al mov bx,head_l mov al,byte ptr bx mov tou_l,al mov bx,over_h mov al,byte ptr bx mov wei_h,al mov bx,over_l mov al,byte ptr bx mov wei_l,al mov bh,0 mov bl,yu_color wcur wei_h,wei_l ;调用置光标位置宏定义,置光标位置 print yu_shap,1 ;显示字符 wcur queue_h+2,queue_l+2 print yu_shap,1 ;显示字符 wcur tou_h,tou_l print yu_shap,1 mov queue_len,3 mov direct,3 mov t_speed,3 mov success,2 mov ph_food,0 mov pl_food,0 mov nfood,0 call food ;调用食物的子程序 mov si,es mov ax,351ch int 21h push es push bx mov es,si push ds mov dx,offset move mov ax,seg move mov ds,ax mov ax,251ch ctrl: cmp success,0jz yu_win1cmp success,1jz yu_losecmp success,2jz noloseclijmp yu_losenolose:mov ah,0int 16hcmp ah,39hjnz yu_upclijmp ctrlyu_up:cmp ah,48hjnz yu_leftcmp direct,2 jz yu_up1mov direct,0yu_up1:jmp ctrlctrl1:jmp ctrlyu_left:cmp ah,4bhjnz yu_downcmp direct,3jz yu_left1mov direct,1yu_left1:jmp ctrlyu_win1:jmp yu_winyu_down:cmp ah,50hjnz yu_rightcmp direct,0jz yu_down1mov direct,2yu_down1:jmp ctrl ;跳转到判断的标号位置yu_right:cmp ah,4dhjnz yu_esccmp direct,1jz yu_right1mov direct,3yu_right1:jmp ctrlyu_esc:cmp ah,01hjnz ctrl1;temp jmpcliyu_lose:pop dxpop dsmov ax,251chint 21hcall scoremov bx,0chwcur 10,38printsz szlose,nlosejmp scoryu_win:pop dxpop dsmov ax,251chint 21hcall scoremov bx,0chwcur 10,38printsz szwin,nwinscor:mov ah,7int 21hmov ah,1mov ch,0int 10hpop espop dspop sipop dipop dxpop cxpop bxpop axretyuyu endpmove proc near push axpush bxpush cxpush dxpush dsmov ax,datamov ds,axmov es,axdec t_speedjnz no_exit1cmp success,1 ;判断success是否为1,为一则跳到jz no_exit1mov bx,0005hwcur ph_food,pl_foodprint 03h,1 ;调用在光标位置显示字符和属性宏定义move_up:cmp direct,0jnz move_leftdec tou_hcmp tou_h,mar_topjnl up1 ;sign number cmpmov tou_h,mar_downup1:call step ;调用自动走步子程序jmp move_exitmove_left:cmp direct,1 ;看direct是否为1,不为1则跳jnz move_downdec tou_lcmp tou_l,mar_leftjnl left1mov tou_l,mar_rightleft1:call stepjmp move_exitno_exit1:jmp no_exitmove_down:cmp direct,2jnz move_rightinc tou_hcmp tou_h,mar_downjng down1mov tou_h,mar_topdown1:call stepjmp move_exitmove_right:inc tou_lcmp tou_l,mar_rightjng right1mov tou_l,mar_leftright1:call stepmove_exit:mov al,speedmov t_speed,alno_exit:pop ds ;寄存器出栈pop dxpop cxpop bxpop axiretmove endpstep proc nearmov cx,queue_lenmov al,tou_hmov di,offset queue_hcldcompar:repne scasbcmp cx,0jng okmov bx,offset queue_ladd bx,queue_lensub bx,cxdec bxmov dl,byte ptr bxcmp dl,tou_ljz lose1jmp comparok:mov al,ph_foodcmp tou_h,aljnz nofood1mov al,pl_foodcmp tou_l,aljz isfoodnofood1:jmp nofoodlose1:jmp step_loseisfood:mov bx,0005hwcur 4,20printsz szgood,ngoodmov bh,0mov bl,yu_colorwcur tou_h,tou_lprint yu_shap,1inc nfoodcall foodcmp si,0jz step_win1mov cx,offset queue_hadd cx,queue_lensub cx,over_hmov si,over_hmov di,over_h+1cldrep movsbmov cx,offset queue_ladd cx,queue_lensub cx,over_lmov si,over_lmov di,over_l+1cldrep movsbinc queue_lenmov success,2mov ax,over_hmov head_h,axmov ax,over_lmov head_l,axmov al,tou_hmov bx,head_hmov byte ptr bx,almov al,tou_lmov bx,head_lmov byte ptr bx,alinc over_hinc over_ljmp step_exitstep_win1:jmp step_winnofood:mov bx,0005hwcur 4,0print 0,78mov bh,0mov bl,yu_colorwcur tou_h,tou_lprint yu_shap,1wcur wei_h,wei_lprint 0,1mov success,2 ;把2送到successmov ax,over_hmov head_h,axmov ax,over_lmov head_l,axmov al,tou_hmov bx,head_hmov byte ptr bx,almov al,tou_lmov bx,head_lmov byte ptr bx,alinc over_hinc over_lmov ax,offset queue_hadd ax,queue_lencmp over_h,axjb plug1mov bx,offset queue

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论