匯編課程設(shè)計打字游戲_第1頁
匯編課程設(shè)計打字游戲_第2頁
匯編課程設(shè)計打字游戲_第3頁
匯編課程設(shè)計打字游戲_第4頁
匯編課程設(shè)計打字游戲_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、華 北 科 技 學(xué) 院課程設(shè)計說明書專 業(yè): 網(wǎng)絡(luò)工程 課程名稱: 匯編課程設(shè)計 班級: 網(wǎng)絡(luò)b091 姓 名: 張 學(xué)號: 200907024124 設(shè)計題目: 打字游戲 設(shè)計時間: 2011-12-05 至 2011-12-16 評 語: _評閱成績: 評閱教師:朱冬梅 1、 問題陳述及其需求分析要求:利用匯編語言編寫打字游戲的基本方法。內(nèi)容:編寫程序,顯示一個英文菜單game menu。要求分別顯示“start”,“setting”, “quit”,并對每項菜單的操作有所響應(yīng)。打字游戲其中包括以下幾個模塊:(1)main(2)gameplay子程序。(3)gamesetting游戲速度設(shè)

2、置子程序。(4)gameexit退出游戲子程序。(5)randchar產(chǎn)生隨機字母函數(shù)的子程序。(6)randnum產(chǎn)生隨機字母出現(xiàn)的隨機位置函數(shù)的子程序。(7)int_1ch 子程序,新1ch中斷處理。(8)shownum顯示數(shù)字子程序。(9)showone顯示一個數(shù)字子程序。 打字游戲菜單包括:開始,游戲速度設(shè)置,退出。使之提供以下功能:1、顯示菜單2、通過開始游戲,進(jìn)行打字游戲3、游戲速度設(shè)置(分為快速,慢速,中速)4、游戲成績統(tǒng)計(總共出現(xiàn)字母數(shù),打錯的字母數(shù))5、退出二、總體設(shè)計功能結(jié)構(gòu)圖設(shè)計依據(jù)程序的功能需求,描述該系統(tǒng)功能的結(jié)構(gòu)圖如下:打字游戲開始start quitsettin

3、g開始游戲顯示統(tǒng)計信息退出游戲elsenormalhign speedslow speed 圖1 系統(tǒng)功能結(jié)構(gòu)圖模塊簡介依據(jù)程序的功能模塊的劃分,各模塊定義如下: (1)游戲模塊名:gameplay模塊描述:調(diào)用randchar和randnum實現(xiàn)確定隨機字母和隨機字母出現(xiàn)位置的情況。然后取1ch中斷號的入口地址,出口參數(shù):es:bx。再設(shè)置中斷向量表,ah中斷號為1ch。使出現(xiàn)的隨機字母在某一隨機位置延時一段時間,然后清除這個字符,然后在下一位置顯示這個字符,再延時一段時間,最終出現(xiàn)字母在下落的視覺效果。(2)游戲設(shè)置模塊名:gamesetting模塊描述:此模塊可以通過鍵盤輸入,進(jìn)行打字游

4、戲的游戲速度的設(shè)置。(3)產(chǎn)生隨機字母函數(shù)的子程序模塊名:randchar模塊描述:通過讀時鐘計數(shù)器值 ,產(chǎn)生隨機數(shù),通過清除高六位,再除26得到的余數(shù)存放在bx中作為隨機出現(xiàn)的字母。(4)子程序,產(chǎn)生字母出現(xiàn)的隨機位置模塊名:randnum 模塊描述:此模塊可以通過讀時鐘計數(shù)器值 ,產(chǎn)生隨機數(shù),通過清除高六位,再除33得到的余數(shù)存放在bx中作為隨機字母出現(xiàn)的隨機位置。(5)子程序,新1ch中斷處理模塊名:int_1ch 模塊描述: (6)顯示數(shù)字模塊名:shownum模塊描述:通過調(diào)用四次showone顯示四位十六進(jìn)制數(shù),顯示出打字游戲的統(tǒng)計結(jié)果。(7)顯示一個數(shù)字模塊名:showone模塊

5、描述:判斷單個數(shù)字是否小于等于9,大于則變?yōu)槭M(jìn)制,然后加30h,變?yōu)閍scii碼,調(diào)用2號功能輸出。(8)退出游戲模塊名:gameexit模塊描述:退出游戲。3、 詳細(xì)設(shè)計算法說明1、主過程的算法設(shè)計: 清屏、顯示菜單及運用選擇操作,調(diào)用各個菜單功能,最后選擇quit退出程序,也可按快捷鍵esc退出程序。2、子過程的算法設(shè)計 (1)gameplay (2)gamesetting該過程的程序流程圖如圖所示。 該過程的程序流程圖如圖所示。gameplay子程序 gamesetting子程序開始開始鍵盤輸入數(shù)據(jù)區(qū)清零n等于h ?call randcharyy等于h ?call randnumn速

6、度設(shè)置為h取1ch中斷號的入口地址y等于s ?n設(shè)置中斷向量表y等于s?速度設(shè)置為s delayn速度設(shè)置為nret返回ret返回(3) gameexit (4)randchar 和randnum該過程的程序流程圖如圖所示。 過程的程序流程圖如圖所示。開始開始 置開中斷顯示退出確定信息 =y?n讀取時鐘寄存器,清高六位yy =y? 退出n 除33 bx余數(shù) 做隨機位置 除26bx余數(shù)做隨機字母y =n?ny =n?ret返回nret返回(5)int_1ch 子程序,新1ch中斷處理。 (6)shownum顯示數(shù)字和showone顯示一個數(shù)字開始 置開中斷 count自減ncount等于0? 開

7、始y不相等 x與1比較相等設(shè)置光標(biāo)為x大于 dl,9比較clxcl自加 加7小于等于不相等x與23比較 加30h,變?yōu)閍scii碼相等call randchar 顯示call randnum ret是否為escyn wrongnumtotalnum ret四、編碼和測試1、 程序運行結(jié)果主界面如圖所示。 2、在主菜單下選項setting項,則出現(xiàn)如圖所示模塊界面。測試實例如圖。3、鍵盤輸入h(h)將游戲速度設(shè)置為快速 4、鍵盤輸入其他字符(除h,h,s,s),自動將游戲速度設(shè)置為normal 5、游戲界面6、按esc,統(tǒng)計游戲信息界面 7、選擇quit,如圖所示。 5 總結(jié)與體會本次的課程設(shè)計

8、在選題時,因為對打字游戲感興趣,就毫不猶豫的選了打字游戲。剛拿到這個題目感覺很盲目,無從下手。匯編語言不同于高級語言,對于高級語言,我們心中可以有一個非常清晰的思路,在實現(xiàn)功能的時候非常得心應(yīng)手。但匯編語言不同,它是面向機器的語言。用它編寫程序時的思路應(yīng)該按照機器執(zhí)行程序的思路來編寫,所以這個挑戰(zhàn)對我來說非常大。在編寫程序之前,首先要摒棄高級語言思路的干擾。在做準(zhǔn)備工作的時候,我從網(wǎng)上找到了相關(guān)的代碼,照著別人的步驟感受匯編語言編寫程序的思路。很多地方都不是太明白,通過查詢課本以及上網(wǎng)找相關(guān)資料,最終理解了。在編寫打字游戲的時候,模仿著別人的程序,一步一步進(jìn)行。很多地方乍眼一看很簡單,但是等到

9、自己親自實踐的時候就覺得很復(fù)雜,用到了很多書上沒有講過的指令。匯編語言的前后聯(lián)系非常緊密,如果要改一點東西的話整個程序的很多地方都要重新做,可以說是牽一發(fā)而動全身。所以在編寫的時候要很仔細(xì),要記住前面已經(jīng)實現(xiàn)了那些功能,還有那些功能要實現(xiàn),這些必須記好,否則程序會出錯。在具體實現(xiàn)的過程中遇到了很多困難。由于自己的電腦是64位的不兼容,所以平時對編好的程序在windows環(huán)境下用記事本打開程序?qū)ζ溥M(jìn)行說明注釋,由于使用了中文,所以回到dos環(huán)境時出現(xiàn)了亂碼。本次課程設(shè)計讓我們充分了解了匯編在實際軟件開發(fā)中的作用和地位。在這次課程設(shè)計過程中我們把課堂上的知識充分運用了還是不能完成實際軟件開發(fā)。這說

10、明程序開發(fā)是不能夠停留在書本上的,想要把程序作好,必須要不斷通過各種途徑掌握更多更好的知識,并且最重要的是要將獲得的知識運用到實際編程中,要學(xué)以致用。本次課程設(shè)計是自由分組、自由選題。我們可以根據(jù)我們的興趣和優(yōu)勢來選擇題目。通過這次編寫打字游戲程序的課程設(shè)計,最基本的收獲是我了解了匯編語言編寫程序的步驟:先確定程序要實現(xiàn)的功能,接著定義需要的寄存器、存儲器,畫出流程圖。然后逐個模塊實現(xiàn)其功能。此次的課程設(shè)計,提高了我閱讀和分析程序的能力,以及模仿能力。編程能力實事求是地說還有待提高,覺得自己邏輯性太差,但相對于原來學(xué)的高級語言,對匯編很感興趣,最終雖然不會從事匯編的編程工作,但知識就是力量,學(xué)

11、習(xí)匯編拓展了自己的知識面。附錄:程序主要代碼;程序中要用到的一些宏指令及其說明 getchar macro char ;調(diào)用1號功能,接收一個字符,將字符放在char里 push ax mov ah,1 int 21h mov char,al pop axendmshowchar macro char ;調(diào)用2號功能顯示字符 push ax push dx mov ah,2 mov dl,char int 21h pop dx pop axendm showstring macro string ;調(diào)用9號功能顯示字符串 push ax push dx push ds mov ax,data_

12、seg mov ds,ax mov ah,9 lea dx,string int 21h pop ds pop dx pop axendm setcurpos macro m,n,p ;設(shè)置光標(biāo)的位置在m行,n列,p頁 push ax push bx push dx mov ah,2 mov bh,p mov dh,m mov dl,n int 10h pop dx pop bx pop axendmgetcurpos macro m,n ;獲取光標(biāo)的位置,將相應(yīng)的行放在m中,列值放在n中 push ax push bx push dx mov ah,3 ;讀光標(biāo)位置 mov bh,0 int

13、 10h mov m,dh mov n,dl pop dx pop bx pop axendm initshowmodel macro a ;初始化顯示模式 push ax mov ah,0 ;用來設(shè)定顯示模式的服務(wù)程序 mov al,a ;al 寄存器表示欲設(shè)定的模式: int 10h pop axendm initwindow macro a,b,c1,c2,d1,d2 ;初始化窗口或窗口內(nèi)容向上卷動,也可以用于清屏 push ax push bx push cx push dx mov ah,6 mov al,a ;上卷行數(shù) mov bh,b ;卷入行屬性(顏色) mov ch,c1 ;

14、左上角行號 mov cl,c2 ;左上角列號 mov dh,d1 ;右下角行號 mov dl,d2 ;右下角列號 int 10h pop dx pop cx pop bx pop axendm pause macro push ax mov ah,01h int 21h pop axendm data_seg segment ;數(shù)據(jù)段定義 flag db 0 count dw 1 gamemenu db game menu,0dh,0ah,$ ;主菜單 db start,0dh,0ah,$ db setting,0dh,0ah,$ db quit,0dh,0ah,$ kick db ? x d

15、b ?y db ? errormsg db error!,0dh,0ah,$ exitmsg db you really want to exit,enter y to exit,and n to continue! (y/n),0dh,0ah,$ speed db n speednum dw 3 speedsetmsg db input the speed value:,0dh,0ah ;游戲速度設(shè)置菜單 db h(h)-high speed,0dh,0ah db s(s)-slow speed,0dh,0ah db else-normal speed!,0dh,0ah,$speedvalu

16、e db now the speed is ,$totalkick db ?rightkick db ?wrongkick db ?char db ? linea db -gameplay-,0dh,0ah,$ lineb db -,0dh,0ah,$linec db /*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/,0dh,0ah,$wrongnum dw 0totalnum dw 0 resultmsg db the char you kick: ,0dh,0ah, totalnum = ,$ ;游戲結(jié)果菜單顯示 db 0dh,0ah, wrongnum = ,$ d

17、b 0dh,0ah,press any kick to exit the game!,$ after db h,$ data_seg endsstack_seg segment stack ;堆棧段定義 stack_buf dw 120 dup(?)top equ $-stack_bufstack_seg ends code_seg segment ;程序代碼區(qū) assume cs:code_seg,ds:data_seg,ss:stack_seg main proc farstart: mov ax,stack_seg mov ss,ax mov sp,top mov ax,data_seg

18、 mov ds,axbegin: initshowmodel 0 initwindow 0,3eh,0,0,24,4fh ;宏調(diào)用menu: setcurpos 2,2,0 showstring linec setcurpos 4,10,0 ;設(shè)置主菜單光標(biāo)位置 showstring gamemenu setcurpos 8,10,0 showstring gamemenu12 setcurpos 12,10,0 showstring gamemenu20 setcurpos 16,10,0 showstring gamemenu30 setcurpos 21,2,0 showstring l

19、inec setcurpos 8,8,0 showchar keyboad: getchar kick ;菜單選擇部分 cmp kick,9 ;按的是鍵tab je tab jmp entertab: getcurpos x,y next_tab_1: cmp x,8 ;選擇標(biāo)記在start處 jnz next_tab_2 setcurpos 8,8,0 showchar setcurpos 8,10,0 showstring gamemenu12 setcurpos 12,8,0 showchar jmp keyboadnext_tab_2: cmp x,12 ;選擇標(biāo)記在setting處

20、jnz next_tab_3 setcurpos 12,8,0 showchar setcurpos 12,10,0 showstring gamemenu20 setcurpos 16,8,0 showchar jmp keyboadnext_tab_3: cmp x,16 ;選擇標(biāo)記在exit處 je next_tab_3_else jmp errornext_tab_3_else: setcurpos 16,8,0 showchar setcurpos 16,10,0 showstring gamemenu30 setcurpos 8,8,0 showchar jmp keyboaden

21、ter: cmp kick,13 ;按的是鍵enter je enter_enter jmp esc_keyenter_enter: getcurpos x,y next_enter_1: cmp x,8 ;選擇標(biāo)記在start處 jz next_enter_e jmp next_enter_2next_enter_e: call gameplay ;gameplay子程序調(diào)用 initshowmodel 0 initwindow 0,3eh,0,0,24,4fh setcurpos 1,0,0 showstring resultmsg lea si,totalnum call shownum

22、 ;shownum 子程序調(diào)用 showstring resultmsg34 lea si,wrongnum call shownum ;shownum 子程序調(diào)用 showstring resultmsg49 pause jmp exitnext_enter_2: cmp x,12 ;選擇標(biāo)記在setting處 jnz next_enter_3 call gamesetting jmp beginnext_enter_3: cmp x,16 ;選擇標(biāo)記在exit處 jnz error call gameexit jmp beginesc_key: cmp kick,27 ;按的是鍵esc j

23、ne else_key call gameexit jmp beginelse_key: jmp beginerror: initshowmodel 0 initwindow 0,3eh,0,0,24,4fh setcurpos 12,6,0 showstring errormsg ;宏調(diào)用 getchar kickexit: mov ax,4ch int 21h main endp ;子程序1 gameplay gameplay proc mov wrongnum,0 mov totalnum,0 call randchar ;調(diào)用randchar子程序 mov char,bl call r

24、andnum ;調(diào)用randnum子程序 mov y,bl mov x,1 initshowmodel 0 initwindow 0,3eh,0,0,24,4fh setcurpos 1,1,0 showstring linea setcurpos 23,1,0 showstring lineb mov ah,35h mov al,1ch ;取1ch中斷號的入口地址 出口參數(shù):es:bx int 21h push es push bx push ds mov dx,offset int_1ch mov ax,seg int_1ch mov ds,ax mov ah,25h ;設(shè)置中斷向量,ds

25、:dx mov al,1ch int 21h pop ds in al,21h and al,11111110b out 21h,al stidelay: cmp flag,1 je exit_else jmp delay exit_else: mov flag,0 mov count,1 pop dx pop ds mov al,1ch mov ah,25h int 21h ret ;ret返回gameplay endp ;子程序2游戲速度設(shè)置 gamesetting proc push ax initshowmodel 0 initwindow 0,3eh,0,0,24,4fh setcu

26、rpos 5,4,0 showstring speedsetmsg getchar kick cmp kick,h ;判斷鍵盤輸入的是否為h jne h_input mov al,h mov speed,al mov speednum,1 ;速度參數(shù)設(shè)置為1 jmp setfinishh_input: cmp kick,h ;判斷鍵盤輸入的是否為h jne s_input mov al,h mov speed,al mov speednum,1 ;速度參數(shù)設(shè)置為1 jmp setfinishs_input: cmp kick,s ;判斷鍵盤輸入的是否為s jne s_input_else mo

27、v al,s mov speed,al mov speednum,5 ;速度參數(shù)設(shè)置為5 jmp setfinishs_input_else: cmp kick,s ;判斷鍵盤輸入的是否為s jne normal mov al,s mov speed,al mov speednum,5 ;速度參數(shù)設(shè)置為5 jmp setfinishnormal: mov al,n ;判斷鍵盤輸入的是否為n mov speed,al mov speednum,3 ;速度參數(shù)設(shè)置為3 setfinish: initshowmodel 0 initwindow 0,3eh,0,0,24,4fh setcurpos 5,4,0 showstring speedvalue showchar speed getchar kick pop ax retgamesetting endp;子程序3退出程序gameexit procchoose: initshowmodel 0 initwindow 0,3eh,0,0,24,4fh setcurpos 5,4,0 showstring exitmsg getchar kick cmp kick,y;鍵盤輸入大寫 jne y_input jmp exit y_input: cmp kick,

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論