《匯編語言程序設(shè)計》課程設(shè)計論文-動畫貪吃蛇程序設(shè)計_第1頁
《匯編語言程序設(shè)計》課程設(shè)計論文-動畫貪吃蛇程序設(shè)計_第2頁
《匯編語言程序設(shè)計》課程設(shè)計論文-動畫貪吃蛇程序設(shè)計_第3頁
《匯編語言程序設(shè)計》課程設(shè)計論文-動畫貪吃蛇程序設(shè)計_第4頁
《匯編語言程序設(shè)計》課程設(shè)計論文-動畫貪吃蛇程序設(shè)計_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、匯編語言程序設(shè)計課程設(shè)計論文 設(shè)計題目: 動畫貪吃蛇程序的設(shè)計 專 業(yè): 班 級:學(xué) 號:姓 名: 指導(dǎo)教師:職稱: 日期: 2009年12月28日 摘要在我們空閑的時候,我們可以用一些我們學(xué)過的知識編一些東西,通過這些東西我們可以學(xué)習(xí)到匯編語言綜合應(yīng)用程序設(shè)計方法,還可以提高匯編語言實際應(yīng)用能力,充分了解計算機硬件和軟件,完成理論到實踐的推進過程。這個程序就是用我所學(xué)過的匯編知識編的一個小游戲,這個游戲的程序主要就是用匯編宏和子程序的知識來編制而成的,我們用宏和子程序定義了很多的模塊,模塊也就是在我們的程序中直接可以調(diào)用的一個獨立的程序。所以我們編寫程序的時候可以很方便的用到它,所以那些基礎(chǔ)

2、知識也是我們編寫程序的基礎(chǔ)。關(guān)鍵詞 宏定義,子程序,匯編,宏調(diào)用,主程序。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 mate

3、rials 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

4、 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 o

5、f 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 pr

6、ocedure.目錄摘要.Abstract.一、背景分析及意義.1二、總體設(shè)計思想. 1三、主要功能. .2四、軟硬件環(huán)境要求.2五、程序流程圖. . 2六、使用說明. 3總體設(shè)計. 4參考文獻. 4程序清單. 5一、 背景分析及意義現(xiàn)在有的一些人感覺生活都是很無聊的,特別是我們這些學(xué)生,所以有些時候肯定會玩各種各樣的游戲的,有一些大的游戲,玩起來會話掉很多的時間,而且也會花掉大量精力的 ,所以在一些閑暇的時候一些小游戲會博得很多人的喜愛,例如:俄羅斯方塊,和一些格斗游戲等等。然而這些小游戲的設(shè)計方法和軟件有很多,所以也有很多不同的效果,本篇設(shè)計是采用匯編中宏定義和調(diào)用,子程序的調(diào)用等一些匯編

7、知識編制而成的一個貪吃蛇小游戲,通過這個小游戲的制作,我們可以得到很多的益處,一方面我們可以不在浪費平時的一些空閑的時間了,而熱中于我們自己喜歡的游戲;另一個方面我們制作完游戲還可以給自己或者別人來享受一下,同時自己也會有一種成就感。特別當你用自己學(xué)到的知識制作出一個東西的時候,或者克服一個困難的時候你就會發(fā)現(xiàn)你自己的價值所在了,而且這還能促進你喜歡學(xué)習(xí)的念頭。二、總體設(shè)計思想這個程序的總體的思想也就是主要用的就是宏和子程序的定義和調(diào)用,首先,定義了5個宏它們分別為:屏幕初始化宏定義 在光標位置顯示字符和屬性定義 顯示字符串宏定義 置光標位置宏定義 讀光標位置的字符和屬性宏定義。它們在程序中起

8、到主要的作用。其次,就是子程序定義了,程序中定義了很多的子程序,其中有:控制子程序 食物子程序,還有記分子程序等。它們首先被主程序調(diào)用,然后它們之間再互相調(diào)用,這樣構(gòu)成了完整的游戲程序并實現(xiàn)其功能。具體的設(shè)計思想是:第一,對數(shù)據(jù)進行初始化,即對寄存器的初始化,比如對食物的初始化等。第二,開始運行,判斷是否符合條件,如果符合贏的條件的話,就會跳轉(zhuǎn)到贏的那個子程序下,然后那個贏的子程序會調(diào)用記分的那個子程序,最后顯示贏的信息和分數(shù)后再轉(zhuǎn)到控制程序執(zhí)行控制和其后的程序。如果要是輸?shù)脑?,就會跳轉(zhuǎn)到輸?shù)哪莻€子程序下,然后那個輸?shù)淖映绦蛞矔{(diào)用記分的那個子程序,最后顯示得分和信息。如果要是沒有贏也沒有輸?shù)?/p>

9、話,那程序會跳到控制的子程序中,等控制完以后程序又會跳到程序判斷的那個地方重復(fù)的執(zhí)行。這個就是完成這個游戲程序的整個思想。三、完成的主要功能這個程序完成的功能就是和別的游戲一樣,最初,給出一個初始化的界面,和一個紅的小心,我們要把那個最初給出那個小鏈條穿過那個餓小紅心,然后那個紅心就會變成我們那個小鏈條上的組成單元一樣的一個小黃圓,和在別的地方會在出現(xiàn)另一個小紅心,我們接下來要做的就是要把那個小黃圓穿過來,然后我們那個小鏈條就會變長了,然后在穿過小紅心,就這樣重復(fù)的做就行了,隨著你的穿過你的小鏈條就會越來越長了,這是你的得分就會越高,同時你難度也會變大的,因為如果你要碰到四周的變的話,或者你自

10、己的那個小鏈條首尾要是相連的話你就會輸了,所以當你那個小鏈條很長的時候,難度自然就會變大了。四、軟硬件環(huán)境要求本程序適合于Windows操作系統(tǒng),使用的是MASM5.0版本的工具和一臺聯(lián)想計算機。五、程序流程圖動畫貪吃蛇程序的流程圖如圖1所示。開始初始化數(shù)據(jù)是否成功?LOSEWINNOLOSE顯示分數(shù)和符號顯示成功的符號上下左右的控制結(jié)束圖1 動畫貪吃蛇程序的流程圖 六、使用說明、匯編過程A、把源程序匯編成*.OBJ文件。方法是:在DOS環(huán)境中找到*.ASM的目標文件,然后輸入MASM * .ASM,然后按回車就可以生成目標文件.OBJ了。B、再輸入LINK .OBJ,在按回車就可以得到可執(zhí)行

11、文件*.EXE了。、運行程序在我們用的軟件MASM的目錄下,我們可以找到*.EXE文件,雙擊就可以打開了。再有就是在DOS的環(huán)境下,在*.EXE的文件所在的位置,直接輸入*.EXE的文件名就可以了,比如說,如果我們的*.EXE文件在C: MASM下,我們就可以在DOS環(huán)境下在C: MASM后直接輸入*.EXE的文件名,即*就可以了。、玩游戲我們通過鍵盤的上下左右鍵來控制里面我們的那個小鏈條的,即鍵盤上的鍵,只需要這四個鍵就可以了。設(shè)計總結(jié)這個 小游戲程序主要用的技術(shù)包括三個方面:第一個方面就是宏的定義及調(diào)用,這個程序當中多次用到宏匯編。這不僅減少了程序的開銷,而且還減少了程序運行的時間和一些存

12、儲空間。第二個方面就是子程序的調(diào)用,這個程序中也有多處用到CALL的調(diào)用。使用子程序不僅可以提供模塊化程序設(shè)計的條件,而且便于程序的調(diào)試及修改等。第三個方面就是其中的一些跳轉(zhuǎn)的問題,這個用起來有點麻煩,但是這個用起來比較方便,所以文中很多很多的地方都用到這個跳轉(zhuǎn)。比如:JMP,JNC,JC等。在這個游戲的設(shè)計中,其實也遇到很多的困難,比如說一些寄存器使用沖突的問題 ,還有一些是宏的使用問題和當中跳轉(zhuǎn)的問題等。經(jīng)過這一個小游戲程序的設(shè)計,我也深刻體會到這個匯編程序設(shè)計的意義所在了,原本在課堂上學(xué)的東西自己現(xiàn)在把它運用到現(xiàn)時的生活中的一些小的問題上,那種感覺和意義是無法用言語表達的, 在這個過程當

13、中我也知道了匯編這門課程的重要性了。參考文獻1 IBM-PC 匯編語言程序設(shè)計 沈美明等 清華大學(xué)出版社 2 8086/8088宏匯編語言程序設(shè)計教程 第二版 王正智/編 電子工業(yè)出版社3 80X86匯編語言程序設(shè)計教程 楊季文/等編 清華大學(xué)出版社程序清單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

14、 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 q

15、ueue_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

16、,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,0ff

17、h 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

18、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,10

19、00h int 10h;置光標類型 clear 0,0,23,79 clear mar_top,mar_left,mar_down,mar_right;調(diào)用屏幕初始化宏定義 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 h

20、ead_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

21、 wei_h,wei_l ;調(diào)用置光標位置宏定義,置光標位置 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 ;調(diào)用食物的子程序 mov si,es mov ax,351ch int 21h push es push bx mov

22、 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 c

23、trlyu_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 ;跳轉(zhuǎn)到判斷的標號位置yu_right:cmp ah,4dhjnz yu_esccmp direct,1jz yu_right1mov direct,3yu_right1:jmp ctrlyu_esc:cmp ah,01hjnz

24、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 e

25、ndpmove proc near push axpush bxpush cxpush dxpush dsmov ax,datamov ds,axmov es,axdec t_speedjnz no_exit1cmp SUCCESS,1 ;判斷SUCCESS是否為1,為一則跳到j(luò)z no_exit1mov bx,0005hwcur ph_food,pl_foodprint 03h,1 ;調(diào)用在光標位置顯示字符和屬性宏定義move_up:cmp direct,0jnz move_leftdec tou_hcmp tou_h,mar_topjnl up1 ;sign number cmpmov t

26、ou_h,mar_downup1:call step ;調(diào)用自動走步子程序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_topdown

27、1: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 okm

28、ov 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_lpr

29、int 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

30、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,o

31、ver_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_hmov over_h,bxmov bx,offset queue_lmov over_l,bxplug1: mov bx,over_hmov

32、al,byte ptr bxmov wei_h,almov bx,over_lmov al,byte ptr bxmov wei_l,aljmp step_exitstep_win:mov SUCCESS,0 ;把0送給SUCCESSjmp step_exitstep_lose:mov SUCCESS,1clistep_exit: retstep endpfood proc nearcmp ph_food,0ffhjz food_overmov bx,offset food_hmov al,nfoodmov ah,0add bx,axmov al,byte ptr bxmov ph_food,

33、almov bx,offset food_lmov al,nfoodmov ah,0add bx,axmov al,byte ptr bxmov pl_food,almov bx,0005hwcur ph_food,pl_foodprint 03h,1mov si,1retfood_over:mov si,0ret food endpscore proc near ;記分子程序 clear mar_top,mar_left,mar_down,mar_rightmov bh,0mov bl,7wcur 13,15printsz szscore,nscorewcur 13,29mov bx,queue_lencall far ptr bin2decretscore endpyu_byebye proc nearretyu_byebye endpdec_div proc far mov ax,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,2int 21hretdec_div endpbin2dec proc far mov cx,10000dcall dec_div ;調(diào)用計算分數(shù)的子程序mov cx,1000dcall dec_divmov cx,100dcall

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論