版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)任務(wù)書(shū)學(xué)生姓名: 專業(yè)班級(jí): 電氣0803班 指導(dǎo)教師: 工作單位: 自動(dòng)化學(xué)院 題 目: 指法練習(xí)程序 初始條件: 1.從屏幕上方隨機(jī)落下可顯示字符,字符的出現(xiàn)位置亦是隨機(jī)的;2.在字符下落的過(guò)程中可輸入任意鍵,若鍵入與下落字符相匹配的鍵,則該字符消失并發(fā)出蜂鳴聲,同時(shí)計(jì)分;3.按esc 鍵結(jié)束練習(xí)并顯示命中數(shù);4.按q 鍵退出。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說(shuō)明書(shū)撰寫(xiě)等具體要求)(1) 設(shè)計(jì)任務(wù)及要求分析(2) 方案比較及認(rèn)證說(shuō)明(3) 系統(tǒng)原理闡述(4) 硬件設(shè)計(jì)課題需要說(shuō)明:硬件原理,電路圖,采用器件的功能說(shuō)明(5) 軟件設(shè)計(jì)課題需要說(shuō)明:軟件思想
2、,流程圖,源程序及程序注釋(6) 調(diào)試記錄及結(jié)果分析(7) 總結(jié)(8) 參考資料(9) 附錄:芯片資料或程序清單,軟件演示屏幕拷貝圖或硬件實(shí)物圖時(shí)間安排:1月10日1月12日:收集資料,方案選擇1月13日1月17日:整體流程,程序細(xì)節(jié)1月18日1月20日:調(diào)試程序,報(bào)告撰寫(xiě)1月20:交設(shè)計(jì)報(bào)告,程序演示,答辯指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日摘要本程序首先出現(xiàn)開(kāi)始界面,然后按enter鍵進(jìn)入,這時(shí)會(huì)出現(xiàn)速度選擇界面進(jìn)行選擇速度,然后進(jìn)入游戲界面,這時(shí)其中任一字母落下,在鍵盤(pán)上敲入該字母,如果輸入正確,字母消失,同時(shí)揚(yáng)聲器發(fā)聲;按esc鍵彈出得分結(jié)果界面;按q鍵退出
3、。從設(shè)計(jì)任務(wù)及要求的分析、方案比較及認(rèn)證說(shuō)明、系統(tǒng)原理闡述、軟件設(shè)計(jì)、程序調(diào)試以及心得體會(huì)六部分來(lái)對(duì)該程序的設(shè)計(jì)進(jìn)行詳細(xì)解釋和說(shuō)明,并且結(jié)合了流程圖和實(shí)際界面截圖。從構(gòu)思,編寫(xiě),調(diào)試到完整的程序?qū)崿F(xiàn)設(shè)計(jì)任務(wù)。每一部分都做了深入的分析和說(shuō)明,同時(shí)也從主題上對(duì)程序進(jìn)行了分析。關(guān)鍵詞:功能模塊 核心代碼 子程序 調(diào)試 運(yùn)行結(jié)果目 錄1設(shè)計(jì)任務(wù)及要求的分析12 方案比較及認(rèn)證說(shuō)明13 系統(tǒng)原理闡述14 軟件設(shè)計(jì)24.1軟件設(shè)計(jì)的思想24.2主程序及其功能說(shuō)明24.2.1主程序的流程圖34.2.2主程序功能說(shuō)明44.3初始化子程序及其功能說(shuō)明84.3.1初始化子程序的流程圖94.3.2初始化子程序功能說(shuō)
4、明94.4速度選擇子程序及其功能說(shuō)明104.4.1速度選擇子程序的流程圖104.4.2速度選擇子程序功能說(shuō)明114.5顯示時(shí)鐘子程序及其功能說(shuō)明134.5.1顯示時(shí)鐘子程序的流程圖134.5.2顯示時(shí)鐘子程序功能說(shuō)明134.6開(kāi)始打字子程序及其功能說(shuō)明154.6.1開(kāi)始打字子程序的流程圖154.6.2開(kāi)始打字子程序功能說(shuō)明154.7顯示打字結(jié)果子程序及其功能說(shuō)明194.7.1顯示打字結(jié)果子程序的流程圖194.7.2顯示打字結(jié)果子程序功能說(shuō)明195 調(diào)試記錄及結(jié)果分析215.1調(diào)試記錄215.2運(yùn)行結(jié)果226 總結(jié)24參考文獻(xiàn)25附錄26指法練習(xí)程序1設(shè)計(jì)任務(wù)及要求的分析這次課程設(shè)計(jì)的任務(wù)是寫(xiě)一
5、個(gè)程序,運(yùn)行可執(zhí)行程序后,從屏幕上方隨機(jī)落下可顯示字符,字符的出現(xiàn)位置亦是隨機(jī)的;在字符下落的過(guò)程中可輸入任意鍵,若鍵入與下落字符相匹配的鍵,則該字符消失并發(fā)出蜂鳴聲,同時(shí)計(jì)分;并且在程序運(yùn)行過(guò)程中,若按esc 鍵,則結(jié)束練習(xí)并顯示命中數(shù),若按q 鍵則退出。根據(jù)題目要求可以看到有以下幾部分來(lái)實(shí)現(xiàn)打字練習(xí):1.隨機(jī)顯示字母,字母出現(xiàn)的位置隨機(jī)。2.字母自動(dòng)落下。3.從鍵盤(pán)輸入的字母與落下字母相同則該字母消失,同時(shí)下一個(gè)字母自動(dòng)接著落下,并且揚(yáng)聲器發(fā)聲。4程序開(kāi)始統(tǒng)計(jì)得分和總字符數(shù)5.按下“ese”鍵則程序顯示得分和總字符數(shù)返。6.在主界面按“q”則程序退出。打字練習(xí)的主要功能由以上六部分組成,每
6、一部分之間的聯(lián)系都是比較緊密的。對(duì)于以上及部分,最主要的部分就是中間的四個(gè)部分,這是打字練習(xí)的重點(diǎn),需要詳細(xì)設(shè)計(jì)其所需要的功能。2方案比較及認(rèn)證說(shuō)明對(duì)于隨機(jī)顯示字母和字母出現(xiàn)的隨機(jī)位置,有兩種不同的產(chǎn)生方式。方式1:可以將字母隨機(jī)的排在一個(gè)字符串中,然后通過(guò)查表的方式來(lái)顯示不同的字母,字母出現(xiàn)位置的隨機(jī)也可以這樣。方式2:通過(guò)數(shù)學(xué)上產(chǎn)生隨機(jī)數(shù)的算法來(lái)實(shí)現(xiàn)字母出現(xiàn)位置的隨機(jī),從而根據(jù)字母的位置來(lái)選擇不同的隨機(jī)字母。方式1只需要在開(kāi)始將字母隨機(jī)的排在一個(gè)字符串中,然后將字母出現(xiàn)位置也隨機(jī)的排列在內(nèi)存中就行了,這種方式調(diào)用起來(lái)方便和快捷;方式2需要用匯編語(yǔ)言對(duì)隨機(jī)算法進(jìn)行描述,從而不斷的產(chǎn)生隨機(jī)數(shù),
7、較為復(fù)雜。最后,綜和各自的優(yōu)缺點(diǎn),本程序選擇了方式1。3系統(tǒng)原理闡述從設(shè)計(jì)任務(wù)及要求可以得知編寫(xiě)此匯編程序的基本原理,編寫(xiě)一個(gè)主程序和若干個(gè)子程序(初始化子程序、提示信息子程序、速度設(shè)定子程序、開(kāi)始打字子程序,顯示打字結(jié)果子程序)來(lái)完成設(shè)計(jì)任務(wù)所要求的功能,使程序模塊化和功能化,讓程序看起來(lái)簡(jiǎn)潔,明了。主程序完成的功能為:首先調(diào)用初始化子程序,對(duì)系統(tǒng)參數(shù)進(jìn)行初始化和主界面初始化,然后調(diào)用字母下降速度選擇和設(shè)定子程序?qū)ψ帜赶陆邓俣冗M(jìn)行設(shè)定,其次調(diào)用系統(tǒng)時(shí)鐘子程序顯示當(dāng)前時(shí)間,然后調(diào)用開(kāi)始游戲子程序開(kāi)始打字和計(jì)分。若想中斷打字過(guò)程,并看自己的成績(jī),可按esc鍵進(jìn)行游戲結(jié)束時(shí)分?jǐn)?shù)顯示子程序的調(diào)用,窗
8、口會(huì)顯示打字情況。初始化子程序?qū)φ麄€(gè)程序中用到的參數(shù)進(jìn)行初值設(shè)定,并顯示開(kāi)始界面和提示信息。速度選擇和設(shè)定子程序?qū)嶋H上是延時(shí)環(huán)節(jié),字母下落速度越快則延時(shí)越少,反之亦然。系統(tǒng)時(shí)鐘子程序是采用中斷調(diào)用系統(tǒng)時(shí)鐘并顯示在打字游戲窗口,讓用戶可以隨時(shí)知道打字所花費(fèi)的時(shí)間,人機(jī)交互友好,體現(xiàn)人性化設(shè)計(jì)。開(kāi)始游戲子程序會(huì)調(diào)用字母下落子程序和隨機(jī)字母和隨機(jī)位置產(chǎn)生子程序,不斷的落下字母讓用戶進(jìn)行打字游戲,并隨時(shí)顯示用戶的得分情況。字母下落子程序通過(guò)不斷的本行寫(xiě)空格和下一行寫(xiě)當(dāng)前字母來(lái)實(shí)現(xiàn)字母的下落。隨機(jī)字母和隨機(jī)位置產(chǎn)生子程序通過(guò)查表的方法來(lái)實(shí)現(xiàn)隨機(jī)字母和隨機(jī)位置的產(chǎn)生。游戲結(jié)束時(shí)分?jǐn)?shù)顯示子程序會(huì)顯示本次用戶
9、的打字情況。本程序有多個(gè)子程序和主程序構(gòu)成,主程序不斷地調(diào)用子程序來(lái)進(jìn)行打字游戲。4軟件設(shè)計(jì)4.1 軟件的設(shè)計(jì)思想根據(jù)設(shè)計(jì)任務(wù)及要求,可以得到匯編語(yǔ)言的基本思想為編寫(xiě)一個(gè)主程序和若干個(gè)子程序,各子程序分別為:初始化子程序、速度設(shè)定子程序、顯示時(shí)鐘子程序、開(kāi)始打字子程序,顯示打字結(jié)果子程序,在程序運(yùn)行時(shí)主程序分別調(diào)用各個(gè)子程序來(lái)完成匯編語(yǔ)言程序的編制和打字游戲的不斷進(jìn)行。因?yàn)楦鱾€(gè)子程序是相互獨(dú)立的,所以可以讓這些子程序分別獨(dú)立的完成某一特定的功能,然后再依靠主程序來(lái)調(diào)用這些不同的功能模塊,這樣通過(guò)增加子程序逐漸增加系統(tǒng)的功能,最終主程序?qū)⑺械男」δ苣K連接在一起,從而達(dá)到設(shè)計(jì)任務(wù)所要求的功能。
10、這樣,將一個(gè)大功能簡(jiǎn)化為一個(gè)個(gè)小功能,可以大大減小編寫(xiě)程序的難度,并且這樣進(jìn)行模塊化設(shè)計(jì)大大增加了程序的可閱讀性和移植性,在以后要用到相同的功能時(shí)可以將其移植過(guò)來(lái),還大大簡(jiǎn)化了程序的設(shè)計(jì),避免了重復(fù)勞動(dòng)。4.2 主程序及其功能說(shuō)明4.2.1主程序的流程圖開(kāi)始初始化速度選擇enter顯示當(dāng)前時(shí)間是否esc鍵開(kāi)始游戲否是顯示得分是否重新開(kāi)始(y /n)結(jié)束游戲ynq鍵圖1 主程序流程圖4.2.2主程序的功能說(shuō)明由圖1可知主程序是程序的脈絡(luò)主線,程序的運(yùn)行就是圍繞著主程序的執(zhí)行而運(yùn)行的同時(shí)也是其他子程序的接入點(diǎn)。主模塊是打字游戲的核心模塊,主要通過(guò)各個(gè)鍵盤(pán)符來(lái)控制各個(gè)子模塊之間的協(xié)調(diào),完成打字游戲的
11、運(yùn)行。子模塊主要包括:初始化子模塊、速度設(shè)定子模塊、顯示時(shí)鐘子模塊、開(kāi)始打字子模塊,顯示打字結(jié)果子模塊。其中初始化子模塊包括顯示初始界面菜單,初始化程序參數(shù),判斷是否進(jìn)入游戲;速度設(shè)定子模塊包括速度選擇子程序和速度設(shè)置子程序。顯示時(shí)鐘子模塊包括取系統(tǒng)時(shí)鐘和顯示兩個(gè)子程序。開(kāi)始打字子模塊包括顯示分?jǐn)?shù)子程序,當(dāng)敲入字符與下落相符時(shí)揚(yáng)聲器發(fā)聲子程序,字母下落子程序,產(chǎn)生新的字母和新的位置子程序,延時(shí)子程序。這些程序有機(jī)的組合在一起,完成整個(gè)打字游戲的運(yùn)行。主程序如下所示。pushreg macropush axpush bxpush cxpush dxendm ;寄存器出棧popreg macrop
12、op dx pop cx pop bx pop axendm ;*設(shè)置光標(biāo)宏* curse macro cury,curxpushreg mov ah,02h mov bh,00hmov dh,curymov dl,curxint 10hpopregendm ;清屏宏定義 clear_screen macro op1,op2,op3,op4,color pushreg mov ax,0600h ;清屏程序 mov bh,color mov ch,op1 mov cl,op2 mov dh,op3 mov dl,op4 int 10h curse 0,0popreg endm ;菜單顯示宏定義
13、menu macro cury,curx,op3 ; curse cury,curx mov ah,02h mov bh,00h mov dh,cury mov dl,curx int 10h ;mov ah,02h mov ah,09h lea dx,op3 int 21h endmdata segment ; add your data here! ;隨機(jī)的字母 letters db 'etfpzybjsyoqirfxtdaphbfdbchrrmjwzxkhuieqtwfqzuglnvmlmotogaitlbpfuhgdzwxwqiproeagndclrjyvnzcyjywdquv
14、pmneknvkesbhlagsoxivscmskkujcxa'ch_count equ $-letters ;ch_count=130 、;隨機(jī)的x坐標(biāo)xpos db 73,42,44,74,76,43,24,62,76,1,2,44,59,77,23,9,13,53,50,63,36,15,0,33,12,51,18,8,6db 66,68,30,18,10,2,79,48,7,6,29,47,27,43,25,40,32,42,28,56,17,11,10,18,25,5,45,16db 37,67,61,28,20,69,70,34,74,55,33,4,57,69,12,66
15、,53,2,47,40,72,34,35,20,27,71,1,6db 8,32,40,52,58,11,9,79,77,5,45,77,11,7,42,22,21,71,35,29,78,22,14,37,38,47,58,28db 78,49,31,22,50,63,39,61,51,56,48,76,7,10,75,62,67,38,3,61,24,60,56,54,34,8,33,50db 59,53,1,26,14,13,37,24,19,54,15,60,57,21,70,54,75,63,23,58,49,71,5,26,60,12,26db 15,68,69,43,8,75,4
16、1,6,74,65,64,3,73,78,64,32,9,51,72,55,19,66,49,21,62,46,36,29db 0,3,46,16,72,27,59,20,46,19,38,16,45,14,41,48,41,39,52,73,30,4,52,35,67,31,13,39db 30,23,31,65,55,17,70,36,65,0,4,57,64,25,44,17 x_count equ $-xpos ;x_count=239;歡迎界面 menu0 db "welcome to play !$" menu1 db '1.press enter to
17、 game!',0dh,0ah,'$' menu3 db '2.press esc to exit!',0dh,0ah,'$' menu40 db 'hint: when you exit from the game ,',0dh,0ah,'$' menu41 db ' you will kown how much you get ',0dh,0ah,'$' ;版權(quán)界面copyright_msg db 'portions copyright 2011 zhang ch
18、ong. all rights reserved.',0dh,0ah,'$' ;速度選項(xiàng)speed_msg1 db 'choose speed:$'speed_msg2 db '1.press "h"-high speed$'speed_msg3 db '2.press "l"-low speed$'speed_msg4 db '3.othes-orditional$' speed_msg5 db 'speed is ungelivable? press &q
19、uot;s" to set$'輸入速度值set_msg1 db 'please input a num(=x) between 1 to 999$' set_msg2 db 'as x percent of the orditional speed$'set_msg3 db 'x=$'set_msg4 db '%$'時(shí)間和分?jǐn)?shù) time_msg db 'time:$'goal_msg db 'your score:$' ;結(jié)束界面顯示score_msg1 db 'congr
20、atulation! there are total $'score_msg2 db 'chars.$'score_msg3 db 'you have hit $'score_msg4 db 'and you have tapped keyboard for $'score_msg5 db 'times.$' score_msg6 db'the hit rate is:$' score_msg7 db'%'是否重新開(kāi)始提示restart_msg db 'do you want to
21、continue? (y/n):$'char db 0 ;字母ch_index dw 0 ;字母的索引x_index dw 0 ;位置的索引blife db 0 ;字母是否還在letter_y db 1 ;字母y坐標(biāo)letter_x db 0 ;字母x坐標(biāo)ispeed db 1 ;速度選擇,0慢速,1普通,2快速score dw 0 ;得分即擊中次數(shù)total dw 0 ;總共字母數(shù)nhit dw 0 ;擊鍵次數(shù)second db 0ffh ;時(shí)間的當(dāng)前秒數(shù)numchar db 4,?,4 dup(0) ;輸入數(shù)字 speednum dw 0 ;速度值bset db 0 ;是否重設(shè)數(shù)字
22、char_yn db 2,0,2 dup(0) ;是否繼續(xù)的符號(hào)(y/n)data endsstack segment dw 128 dup(0)stack endscode segmentassume cs:code,ds:data,ss:stack start:; set segment registers: mov ax, data mov ds, ax mov es, axrestart: call init ; 初始化 cmp ax,0 je lexit call speedchoose ;速度選擇 call setinterface ;速度設(shè)置界面 ; add your code
23、here;輸出一句話lgettime: call showtime call playgames ;是否有結(jié)束標(biāo)志 cmp al,0 jne lgettime lendgame: call gameover call isrestart cmp al,0 je lexit ;重新開(kāi)始 mov bx,restart jmp bxlexit: mov ax, 4c00h ; exit to operating system. int 21h 4.3 初始化子程序及其功能說(shuō)明4.3.1初始化子程序的流程圖初始化參數(shù)初始化開(kāi)始界面按鍵是否enter鍵進(jìn)入游戲是退出游戲否圖2 初始化子程序流程圖4.3.
24、2初始化子程序功能說(shuō)明初始化子模塊包括初始化程序參數(shù),顯示初始界面菜單,判斷是否進(jìn)入游戲。首先初始化字母出現(xiàn)的位置,初始化得分和各種標(biāo)志的值,然后顯示初始界面菜單,通過(guò)一個(gè)比較指令和堆棧操作來(lái)判斷是否進(jìn)入游戲。其源程序如下。;初始化界面和判斷是否進(jìn)入游戲init proc near mov letter_y,1 ;初始化y坐標(biāo) mov letter_x,0 ;初始化x坐標(biāo) ;初始化分?jǐn)?shù),擊鍵次數(shù)和總字符數(shù) mov score,0 mov nhit,0 mov total,0 mov bset,0 ;默認(rèn)沒(méi)有設(shè)置速度 mov blife,0 ;生命置空 mov ispeed,1 ;速度置為普通
25、clear_screen 0d,00d,24d,79d,11 ;青色包括時(shí)間和分?jǐn)?shù);24*80(0開(kāi)始) menu 05,20,menu0 ;菜單信息的宏調(diào)用 menu 07,20,menu1 menu 09,20,menu3 menu 13,20,menu40 menu 15,22,menu41 menu 23,08,copyright_msg ;輸入是否進(jìn)入游戲 mov bx,0; mov ah,01h int 21h cmp al,0dh jne lendi inc bxlendi:push bx pop ax retinit endp 4.4 速度選擇子程序及其功能說(shuō)明4.4.1速度選
26、擇子程序的流程圖顯示速度選擇界面檢測(cè)鍵盤(pán)輸入是否s設(shè)置速度標(biāo)志置1設(shè)置速度是否h速度選擇標(biāo)志置2是否l速度選擇標(biāo)志置0退出程序是否是否是否圖3 速度選擇子程序4.4.2速度選擇子程序功能說(shuō)明速度選擇子程序初始默認(rèn)速度為正常速度,然后檢測(cè)鍵盤(pán)輸入,若輸入為s則轉(zhuǎn)入速度設(shè)置子程序,此時(shí)可以輸入0-999的數(shù)對(duì)字母下降的速度進(jìn)行調(diào)整,輸入數(shù)字越大則延時(shí)時(shí)間越短,即字母下降速度越快;若輸入為h則將速度選擇標(biāo)志置2,此標(biāo)志會(huì)讓字母下降時(shí)延時(shí)時(shí)間縮短,即讓字母下降速度變快;若輸入為l則將速度選擇標(biāo)志置0,此標(biāo)志會(huì)讓字母下降時(shí)延時(shí)時(shí)間增長(zhǎng),即讓字母下降速度變慢。速度選擇子程序的源程序如下。;選擇速度spee
27、dchoose proc near clear_screen 0d,00d,24d,79d,11 ;青色包括時(shí)間和分?jǐn)?shù);24*80(0開(kāi)始) menu 07,24,speed_msg1 menu 09,24,speed_msg2 menu 11,24,speed_msg3 menu 13,24,speed_msg4 menu 17,20,speed_msg5 mov ispeed,1 ;默認(rèn)普通速度 mov bset,0 ;默認(rèn)沒(méi)有設(shè)置速度 mov ah,01h int 21h or al,20h ;轉(zhuǎn)為小寫(xiě) cmp al,'s' jne lnexts mov bset,1 c
28、all setspeed ;設(shè)置速度 jmp lendchoose lnexts: cmp al,'h' jne lisslow mov ispeed,2 jmp lendchoose lisslow:cmp al,'l' jne lendchoose mov ispeed,0 lendchoose: ret speedchoose endpsetspeed proc near clear_screen 0,0,24,79,10 ;橙黃色界面 menu 9,20,set_msg1 menu 11,20,set_msg2 menu 13,20,set_msg3 m
29、enu 13,27,set_msg4 call cinnum ;輸入數(shù)字 ret setspeed endp;輸入速度比例cinnum proc near ;輸入數(shù)字lrecin: curse 13,23 ;清除輸入垃圾值 mov cx,3 mov ah,02h lcout: mov dl,' ' int 21h loop lcout ;輸入字符串 curse 13,23 lea dx,numchar mov ah,0ah int 21h xor cx,cx mov cl,numchar1 ;輸入數(shù)字個(gè)數(shù) lea si,numchar2 xor ax,ax ;輸入數(shù)字大小 mo
30、v bl,10 ;乘10再加數(shù) l11: ;判斷輸入是否合法 mov dl,si cmp dl,'0' jl lrecin cmp dl,'9' jg lrecin ;乘10再加數(shù) mul bl sub dl,'0' xor dh,dh add ax,dx ;加上新數(shù) inc si loop l11 cmp ax,0 je lrecin mov speednum,ax ;速度值 ret cinnum endp 4.5 顯示時(shí)鐘子程序及其功能說(shuō)明4.5.1 顯示時(shí)鐘子程序的流程圖取系統(tǒng)時(shí)間秒值是否變化輸出當(dāng)前時(shí)間退出程序是否圖4 顯示時(shí)鐘子程序的流
31、程圖4.5.2 顯示時(shí)鐘子程序的功能說(shuō)明顯示時(shí)鐘子程序首先通過(guò)dos中斷中的取系統(tǒng)時(shí)鐘中斷,獲得當(dāng)前系統(tǒng)時(shí)鐘的時(shí)、分、秒值,然后將秒值與程序定義的秒值標(biāo)志進(jìn)行比較,若兩者不想等,則將系統(tǒng)當(dāng)前的時(shí)鐘輸出,若秒值沒(méi)有變化,則直接退出程序。此部分源程序如下。;顯示時(shí)間showtime proc near mov ah,2ch ;取時(shí)間 int 21h cmp second,dh ;秒變化則再次輸出,秒不變化則繼續(xù)等待 jz lreshow curse 0,5 mov al,ch call p ;輸出“小時(shí)” mov ah,02h mov dl,':' int 21h mov al,c
32、l call p ;輸出“分鐘” mov dl,':' int 21h mov al,dh call p ;輸出“秒鐘” lreshow: ret showtime endp;計(jì)算2位整數(shù),主要用于時(shí)間和分?jǐn)?shù)輸出p proc near mov ah,00h ;將al補(bǔ)充為ax mov bl,10 div bl mov bh,ah ;余數(shù)存入ah mov dl,al ;商存入al or dl,30h mov ah,02h int 21h mov dl,bh or dl,30h int 21h retp endp 4.6開(kāi)始打字子程序及其功能說(shuō)明4.6.1 開(kāi)始打字子程序的流程圖顯
33、示當(dāng)前得分檢測(cè)鍵盤(pán)是否有輸入與顯示字符是否相同字符生命值為0揚(yáng)聲器發(fā)聲得分加1是否esc鍵退出程序顯示得分情況當(dāng)前位置顯示空字母位置下移是否顯示新字母生命值置1,總字符數(shù)加1,產(chǎn)生新字母和新列坐標(biāo),顯示新字母延時(shí)設(shè)定值否是否在當(dāng)前位置顯示當(dāng)前字母是是否否是圖5 開(kāi)始打字子程序的流程圖4.6.2 開(kāi)始打字子程序的功能說(shuō)明 開(kāi)始打字子程序的程序段中,首先調(diào)用顯示分?jǐn)?shù)子程序?qū)Ξ?dāng)前得分進(jìn)行動(dòng)態(tài)顯示,然后檢測(cè)是否有字符從鍵盤(pán)輸入,若沒(méi)有則直接調(diào)用下落子程序和延時(shí)子程序,讓字母按正常方式下落。若有字符從鍵盤(pán)輸入則判斷和當(dāng)前顯示字母是否相同,相同則對(duì)相關(guān)標(biāo)志進(jìn)行處理,不相同則判斷是否和esc鍵相同,相同則退
34、出程序并顯示得分情況,最后除了退出程序外,其他情況都要經(jīng)過(guò)字母下落子程序和延時(shí)子程序,在字母下落子程序中,會(huì)根據(jù)相關(guān)標(biāo)志值的情況,判斷是顯示新字符,還是繼續(xù)當(dāng)前字符的下落,下落的快慢是由延時(shí)的長(zhǎng)短決定的。在本程序中,有很多int10的指令。靈活的利用int10豐富的指令功能,可以巧妙的設(shè)計(jì)出想要的程序來(lái)。int10中斷規(guī)定,dh和dl共同控制著字符輸出的位置,其中dh為字符輸出的行標(biāo),dl為字符輸出的列標(biāo),通過(guò)改變dh和dl的值,可以改變字符在命令符輸出屏幕上的位置,從而實(shí)現(xiàn)字符下落。開(kāi)始打字子程序的源程序如下,。playgames proc near cmp score,1000 jl lr
35、ightshow curse 0,76 ;顯示分?jǐn)?shù) jmp lendsetpos lrightshow: curse 0,77 ;顯示分?jǐn)?shù) lendsetpos: call printscore ;輸出分?jǐn)?shù) mov ah,0bh ;是否有字符輸入 int 21h inc al jne lnochar ;沒(méi)有字符 mov ah,07h int 21h inc nhit ;擊鍵次數(shù)加一 cmp al,char ;是否和當(dāng)前字符相同 jne lnothit call sound ;按鍵正確則發(fā) mov blife,0 ;擊中當(dāng)前字符 inc score jmp lnochar lnothit:cmp
36、 al,27;esc 鍵退出 jne lnochar dec nhit ;退出不算擊鍵 xor ax,ax jmp lendplay lnochar: call letterdown call delay mov ax,1lendplay: ret playgames endp;顯示四位數(shù)字?jǐn)?shù)字printscore proc near ;萬(wàn)位數(shù)字 mov ax,score cmp ax,10000 jl lsmlth mov bx,10000 xor dx,dx div bx mov ax,dx ;萬(wàn)位數(shù)字暫不顯示 lsmlth:;千位數(shù)字 cmp score,1000 jl lsmallhu
37、n xor dx,dx mov bx,1000 div bx push dx ;余數(shù) call outnum ;顯示千位數(shù)字 pop ax lsmallhun: ;顯示百位數(shù)字 mov bl,100 div bl push ax ;余數(shù) call outnum ;顯示百位數(shù)字 pop ax mov al,ah ;顯示個(gè)位和十位數(shù)字 call p ret printscore endp 字母下降一層letterdown proc near mov ch,letter_y mov cl,letter_x mov dl,' ' call lettershow inc letter_y
38、 ;下降一格 mov al,0 cmp blife,0 ;生命值為0 jne lnext1 inc allnext1: cmp letter_y,24 ;到達(dá)游戲界面底部 jl lnext2 inc allnext2: cmp al,0 ;是否該顯示新字母 jne lnewletter ;字母下一行顯示 mov ch,letter_y mov cl,letter_x mov dl,char call lettershow jmp lendown lnewletter: mov blife,1 inc total ;總字符數(shù)加1 call gennewpos mov ch,letter_y mo
39、v cl,letter_x mov dl,char call lettershow lendown: ret letterdown endp4.7 顯示打字結(jié)果子程序及其功能說(shuō)明4.7.1顯示打字結(jié)果子程序的流程圖清屏顯示總的字符數(shù)顯示得分?jǐn)?shù)顯示總擊鍵數(shù)開(kāi)始是否重新開(kāi)始退出游戲是否圖6 顯示打字結(jié)果子程序的流程圖4.7.2顯示打字結(jié)果子程序的功能說(shuō)明顯示打字結(jié)果子程序通過(guò)不斷的調(diào)用計(jì)算數(shù)字位數(shù)子程序,顯示數(shù)字子程序來(lái)將總字符數(shù)、總擊鍵數(shù)、得分?jǐn)?shù),顯示在屏幕上,當(dāng)然字符前面也有一些提示信息,它們是通過(guò)調(diào)用宏來(lái)實(shí)現(xiàn)字符串現(xiàn)實(shí)的,并且通過(guò)調(diào)用int10的相關(guān)中斷改變字符串顯示的顏色和數(shù)字顯示的顏色。
40、其源程序如下所示。gameover proc near ;游戲結(jié)束顯示分 clear_screen 0,0,24,79,14 ;橙黃色界面 ;總共的字符數(shù) ;-total menu 07,20,score_msg1 mov ax,total call countnum ;計(jì)算數(shù)字位數(shù),返回值在cx中 mov bl,52 add bl,cl ;x坐標(biāo) push bx clear_screen 07,52,07,bl,12 ;分?jǐn)?shù)處顏色為紅色 curse 07,52 mov ax,total call coutnum ;輸出數(shù)字 pop bx inc bl menu 07,bl,score_msg
41、2 ;-score ;擊中的字符數(shù) menu 09,20,score_msg3 mov ax,score call countnum ;計(jì)算數(shù)字位數(shù),返回值在cx中 mov bl,33 add bl,cl ;x坐標(biāo) push bx clear_screen 09,33,09,bl,12 ;分?jǐn)?shù)處顏色為紅色 curse 09,33 mov ax,score call coutnum ;輸出數(shù)字 pop bx inc bl menu 09,bl,score_msg2;-nhit ;擊鍵的次數(shù)數(shù) menu 11,20,score_msg4 mov ax,nhit call countnum ;計(jì)算數(shù)
42、字位數(shù),返回值在cx中 mov bl,53 add bl,cl ;x坐標(biāo) push bx clear_screen 11,53,11,bl,12 ;分?jǐn)?shù)處顏色為紅色 curse 11,53 mov ax,nhit call coutnum ;輸出數(shù)字 pop bx inc bl menu 11,bl,score_msg5 ;顯示是否重新開(kāi)始 menu 15,20,restart_msg legame: ret gameover endp5調(diào)試記錄及結(jié)果分析5.1 調(diào)試記錄在調(diào)試字母下落這部分程序的時(shí)候,編譯器顯示沒(méi)有錯(cuò)誤,但是運(yùn)行程序時(shí)不管中途有沒(méi)有輸入按鍵,始終是一個(gè)字母下落到底,意識(shí)到可能
43、是邏輯錯(cuò)了,然后我對(duì)這段程序畫(huà)了詳細(xì)的流程圖,嚴(yán)格按照流程圖的邏輯來(lái)寫(xiě),調(diào)試了幾遍終于在最后出來(lái)了,當(dāng)時(shí)感到非常高興,同時(shí)也意識(shí)到流程圖的巨大作用;還有有時(shí)講一個(gè)寄存器入了棧,但是沒(méi)有出棧,對(duì)程序的結(jié)果也造成了巨大的影響,其中一個(gè)例子就是,程序出現(xiàn)開(kāi)始界面以后,我按enter鍵進(jìn)入,但是始終無(wú)法進(jìn)入,導(dǎo)致我懷疑這部分邏輯是不是也有問(wèn)題,最后我逐句的分析發(fā)現(xiàn)原來(lái)是寄存器沒(méi)有出棧。最后界面顯示結(jié)果如下圖所示。5.2 運(yùn)行結(jié)果程序運(yùn)行后的開(kāi)始界面如圖7,主界面第一行是歡迎語(yǔ),最后一行是作者,然后中間是操作說(shuō)明,為使用者說(shuō)明該程序的使用方法。背景設(shè)置為黑色,字體為藍(lán)色。圖7 開(kāi)始界面程序運(yùn)行后的速度選
44、擇界面如圖8所示,其中前三行為快速和慢速選擇界面,第三行為普通速度選擇。最后一行為速度設(shè)置。圖8 速度選擇界面程序運(yùn)行后的字母下落界面如圖9所示,其中左上角顯示的是當(dāng)前時(shí)間,每隔一秒變化一次,右上角顯示的是用戶得分情況,在字母下降過(guò)程中若用戶按下相同的鍵,則當(dāng)前字母消失,出現(xiàn)新的字母,同時(shí)揚(yáng)聲器發(fā)聲。如圖10所示。圖9 字母下落界面圖10 按下相同鍵之后的顯示程序運(yùn)行后的結(jié)果顯示界面如圖11所示其中第一行是程序總共下落的字母數(shù),第二行是用戶的得分情況,第三行為用戶按鍵次數(shù)。通過(guò)這些結(jié)果的顯示,用戶可以非常清楚的知道本次練習(xí)的情況,體現(xiàn)了人機(jī)界面的友好。圖11 結(jié)果顯示界面6總結(jié)本次課程設(shè)計(jì)主要
45、分為以下5個(gè)部分,初始化子模塊、速度設(shè)定子模塊、顯示時(shí)鐘子模塊、開(kāi)始打字子模塊,顯示打字結(jié)果子模塊。在整個(gè)程序的編寫(xiě)中,調(diào)試占了很大部分的時(shí)間,基本上每個(gè)子模塊需要調(diào)試3-4個(gè)小時(shí),而且要想寫(xiě)好匯編程序,必須認(rèn)真對(duì)待代碼的每一個(gè)細(xì)節(jié),還必須熟練的掌握debug指令。通過(guò)這次實(shí)際動(dòng)手能力的培養(yǎng),我進(jìn)一步熟悉了匯編的結(jié)構(gòu)和使用法,基本達(dá)到能獨(dú)立閱讀。我覺(jué)得學(xué)習(xí)匯編的一個(gè)較大好處就是可以了解電腦中每一個(gè)字節(jié)數(shù)據(jù)的來(lái)龍去脈,到底是存儲(chǔ)在那一個(gè)地方。同時(shí)在這次課程設(shè)計(jì)中我也做了一些課設(shè)任務(wù)沒(méi)有要求的部分,比如速度選擇和當(dāng)前時(shí)間顯示。雖然學(xué)校也開(kāi)設(shè)了微機(jī)原理實(shí)驗(yàn)的課程,但在學(xué)習(xí)的時(shí)候總是感覺(jué)差點(diǎn)什么,這次
46、做了課程設(shè)計(jì)讓我明白仿真軟件的學(xué)習(xí)是需要在實(shí)踐中進(jìn)行的。在經(jīng)過(guò)自己學(xué)習(xí),請(qǐng)教后,我能寫(xiě)出自己想要的匯編程序。我認(rèn)為光靠自己一個(gè)人的力量是遠(yuǎn)遠(yuǎn)不夠的,當(dāng)自己遇到問(wèn)題實(shí)在解決不了時(shí),可以和同學(xué)共同探討,尋找解決辦法。正所謂“三人行,則必有我?guī)煛?。最后,我看著最終的成果,還是覺(jué)得受益匪淺的。這次課程設(shè)計(jì),讓我有機(jī)會(huì)將課堂上所學(xué)的理論知識(shí)運(yùn)用到實(shí)際中。這是一次對(duì)所學(xué)知識(shí)的整合,一次綜合利用,在做課程設(shè)計(jì)的同時(shí)也驗(yàn)證了我們課堂上所學(xué)的理論知識(shí),對(duì)我們以后的工作學(xué)習(xí)具有很大的指導(dǎo)作用,同時(shí)我也明白了在以后的工作中寫(xiě)程序時(shí),不僅要多動(dòng)腦,還要多進(jìn)行調(diào)試和動(dòng)手實(shí)踐。最后,這次課程設(shè)計(jì)真的讓我學(xué)到了不少知識(shí)。參
47、考文獻(xiàn)1 沈美明、溫冬嬋.ibm pc匯編語(yǔ)言程序設(shè)計(jì).北京:清華大學(xué)出版社20012 李敬兆.8086/8088和基于arm核匯編語(yǔ)言程序設(shè)計(jì).第二版.合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2008.93 王爽.匯編語(yǔ)言.北京:清華大學(xué)出版社,2003.94 姚燕南.微型計(jì)算機(jī)原理與接口技術(shù).北京:高等教育出版社,20045 劉樂(lè)善.微型計(jì)算機(jī)接口技術(shù)及應(yīng)用.武漢:華中科技大學(xué)出版社2000附錄 源程序清單pushreg macropush axpush bxpush cxpush dxendm ;寄存器出棧popreg macropop dx pop cx pop bx pop axendm ;*
48、設(shè)置光標(biāo)宏* curse macro cury,curxpushreg mov ah,02h mov bh,00hmov dh,curymov dl,curxint 10hpopregendm ;清屏宏定義 clear_screen macro op1,op2,op3,op4,color pushreg mov ax,0600h ;清屏程序 mov bh,color mov ch,op1 mov cl,op2 mov dh,op3 mov dl,op4 int 10h curse 0,0popreg endm ;菜單顯示宏定義 menu macro cury,curx,op3 ; curse
49、cury,curx mov ah,02h mov bh,00h mov dh,cury mov dl,curx int 10h ;mov ah,02h mov ah,09h lea dx,op3 int 21h endmdata segment ; add your data here! ;隨機(jī)的字母 letters db 'etfpzybjsyoqirfxtdaphbfdbchrrmjwzxkhuieqtwfqzuglnvmlmotogaitlbpfuhgdzwxwqiproeagndclrjyvnzcyjywdquvpmneknvkesbhlagsoxivscmskkujcxa
50、39;ch_count equ $-letters ;ch_count=130 、;隨機(jī)的x坐標(biāo)xpos db 73,42,44,74,76,43,24,62,76,1,2,44,59,77,23,9,13,53,50,63,36,15,0,33,12,51,18,8,6db 66,68,30,18,10,2,79,48,7,6,29,47,27,43,25,40,32,42,28,56,17,11,10,18,25,5,45,16db 37,67,61,28,20,69,70,34,74,55,33,4,57,69,12,66,53,2,47,40,72,34,35,20,27,71,1,6
51、db 8,32,40,52,58,11,9,79,77,5,45,77,11,7,42,22,21,71,35,29,78,22,14,37,38,47,58,28db 78,49,31,22,50,63,39,61,51,56,48,76,7,10,75,62,67,38,3,61,24,60,56,54,34,8,33,50db 59,53,1,26,14,13,37,24,19,54,15,60,57,21,70,54,75,63,23,58,49,71,5,26,60,12,26db 15,68,69,43,8,75,41,6,74,65,64,3,73,78,64,32,9,51,72,55,19,66,49,21,62,46,36,29db 0,3,46,16,72,27,59,20,46,19,38,16,45,14,41,48,41,39,52,73,30,4,52,35,67,31,13,39db 30,23,31,65,55,17,70,36,65,0,4,57,64,25,44
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代化養(yǎng)殖場(chǎng)技術(shù)員聘用合同
- 劇院大理石供應(yīng)合同
- 歷史建筑外墻保溫施工合同模板
- 國(guó)際咨詢租賃合同模板
- 語(yǔ)言學(xué)校暖氣安裝施工合同
- 溫泉度假村假山施工合同
- 旅游導(dǎo)游班主任招聘合同
- 宅基地他用權(quán)協(xié)議
- 水上運(yùn)動(dòng)泵機(jī)租賃合同
- 健身市場(chǎng)污水排放系統(tǒng)安裝合同
- 公安機(jī)關(guān)執(zhí)法執(zhí)勤規(guī)范用語(yǔ)
- 如何發(fā)揮采購(gòu)在公司高質(zhì)量發(fā)展中作用
- 2023-2024學(xué)年湖南省長(zhǎng)沙市雨花區(qū)外研版(三起)五年級(jí)上冊(cè)期末質(zhì)量檢測(cè)英語(yǔ)試卷
- 監(jiān)理質(zhì)量評(píng)估報(bào)告
- 《中國(guó)封建社會(huì)》課件
- 藥物代謝動(dòng)力學(xué)-中國(guó)藥科大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 血液科護(hù)士的營(yíng)養(yǎng)與膳食指導(dǎo)
- 短視頻實(shí)習(xí)運(yùn)營(yíng)助理
- 互聯(lián)網(wǎng)醫(yī)療服務(wù)創(chuàng)業(yè)計(jì)劃書(shū)
- 對(duì)加快推進(jìn)新型工業(yè)化的認(rèn)識(shí)及思考
- 上海交通大學(xué)2016年622物理化學(xué)(回憶版)考研真題
評(píng)論
0/150
提交評(píng)論