2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  題 目: 指法練習(xí)程序 </p><p><b>  初始條件: </b></p><p>  1.從屏幕上方隨機(jī)落下可顯示字符,字符的出現(xiàn)位置亦是隨機(jī)的;</p>

2、;<p>  2.在字符下落的過程中可輸入任意鍵,若鍵入與下落字符相匹配的鍵,則該字符消失并發(fā)出蜂鳴聲,同時(shí)計(jì)分;</p><p>  3.按ESC 鍵結(jié)束練習(xí)并顯示命中數(shù);</p><p><b>  4.按Q 鍵退出。</b></p><p>  要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求

3、)</p><p><b>  設(shè)計(jì)任務(wù)及要求分析</b></p><p><b>  方案比較及認(rèn)證說明</b></p><p><b>  系統(tǒng)原理闡述</b></p><p>  硬件設(shè)計(jì)課題需要說明:硬件原理,電路圖,采用器件的功能說明</p><p

4、>  軟件設(shè)計(jì)課題需要說明:軟件思想,流程圖,源程序及程序注釋</p><p><b>  調(diào)試記錄及結(jié)果分析</b></p><p><b>  總結(jié)</b></p><p><b>  參考資料</b></p><p>  附錄:芯片資料或程序清單,軟件演示屏幕拷貝圖

5、或硬件實(shí)物圖</p><p><b>  時(shí)間安排:</b></p><p>  1月10日~1月12日:收集資料,方案選擇</p><p>  1月13日~1月17日:整體流程,程序細(xì)節(jié)</p><p>  1月18日~1月20日:調(diào)試程序,報(bào)告撰寫</p><p>  1月20:交設(shè)計(jì)報(bào)告,程

6、序演示,答辯</p><p>  指導(dǎo)教師簽名: 年 月 日</p><p>  系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b>  摘要</b></p><p>  本程序首先出現(xiàn)開始界面,然后按ENTER鍵進(jìn)入,這時(shí)

7、會(huì)出現(xiàn)速度選擇界面進(jìn)行選擇速度,然后進(jìn)入游戲界面,這時(shí)其中任一字母落下,在鍵盤上敲入該字母,如果輸入正確,字母消失,同時(shí)揚(yáng)聲器發(fā)聲;按ESC鍵彈出得分結(jié)果界面;按‘Q’鍵退出。從設(shè)計(jì)任務(wù)及要求的分析、方案比較及認(rèn)證說明、系統(tǒng)原理闡述、軟件設(shè)計(jì)、程序調(diào)試以及心得體會(huì)六部分來對(duì)該程序的設(shè)計(jì)進(jìn)行詳細(xì)解釋和說明,并且結(jié)合了流程圖和實(shí)際界面截圖。從構(gòu)思,編寫,調(diào)試到完整的程序?qū)崿F(xiàn)設(shè)計(jì)任務(wù)。每一部分都做了深入的分析和說明,同時(shí)也從主題上對(duì)程序進(jìn)行了

8、分析。</p><p>  關(guān)鍵詞:功能模塊 核心代碼 子程序 調(diào)試 運(yùn)行結(jié)果</p><p><b>  目 錄</b></p><p>  1設(shè)計(jì)任務(wù)及要求的分析1</p><p>  2 方案比較及認(rèn)證說明1</p><p>  3 系統(tǒng)原理闡述1</p><p

9、><b>  4 軟件設(shè)計(jì)2</b></p><p>  4.1軟件設(shè)計(jì)的思想2</p><p>  4.2主程序及其功能說明2</p><p>  4.2.1主程序的流程圖3</p><p>  4.2.2主程序功能說明4</p><p>  4.3初始化子程序及其功能說明8&

10、lt;/p><p>  4.3.1初始化子程序的流程圖9</p><p>  4.3.2初始化子程序功能說明9</p><p>  4.4速度選擇子程序及其功能說明10</p><p>  4.4.1速度選擇子程序的流程圖10</p><p>  4.4.2速度選擇子程序功能說明11</p><

11、;p>  4.5顯示時(shí)鐘子程序及其功能說明13</p><p>  4.5.1顯示時(shí)鐘子程序的流程圖13</p><p>  4.5.2顯示時(shí)鐘子程序功能說明13</p><p>  4.6開始打字子程序及其功能說明15</p><p>  4.6.1開始打字子程序的流程圖15</p><p>  4.

12、6.2開始打字子程序功能說明15</p><p>  4.7顯示打字結(jié)果子程序及其功能說明19</p><p>  4.7.1顯示打字結(jié)果子程序的流程圖19</p><p>  4.7.2顯示打字結(jié)果子程序功能說明19</p><p>  5 調(diào)試記錄及結(jié)果分析21</p><p>  5.1調(diào)試記錄21&

13、lt;/p><p>  5.2運(yùn)行結(jié)果22</p><p><b>  6 總結(jié)24</b></p><p><b>  參考文獻(xiàn)25</b></p><p><b>  附錄26</b></p><p><b>  指法練習(xí)程序</

14、b></p><p>  1設(shè)計(jì)任務(wù)及要求的分析</p><p>  這次課程設(shè)計(jì)的任務(wù)是寫一個(gè)程序,運(yùn)行可執(zhí)行程序后,從屏幕上方隨機(jī)落下可顯示字符,字符的出現(xiàn)位置亦是隨機(jī)的;在字符下落的過程中可輸入任意鍵,若鍵入與下落字符相匹配的鍵,則該字符消失并發(fā)出蜂鳴聲,同時(shí)計(jì)分;并且在程序運(yùn)行過程中,若按ESC 鍵,則結(jié)束練習(xí)并顯示命中數(shù),若按Q 鍵則退出。</p><p

15、>  根據(jù)題目要求可以看到有以下幾部分來實(shí)現(xiàn)打字練習(xí):1.隨機(jī)顯示字母,字母出現(xiàn)的位置隨機(jī)。2.字母自動(dòng)落下。3.從鍵盤輸入的字母與落下字母相同則該字母消失,同時(shí)下一個(gè)字母自動(dòng)接著落下,并且揚(yáng)聲器發(fā)聲。4程序開始統(tǒng)計(jì)得分和總字符數(shù)5.按下“Ese”鍵則程序顯示得分和總字符數(shù)返。6.在主界面按“Q”則程序退出。打字練習(xí)的主要功能由以上六部分組成,每一部分之間的聯(lián)系都是比較緊密的。對(duì)于以上及部分,最主要的部分就是中間的四個(gè)部分,這是打

16、字練習(xí)的重點(diǎn),需要詳細(xì)設(shè)計(jì)其所需要的功能。</p><p>  2方案比較及認(rèn)證說明</p><p>  對(duì)于隨機(jī)顯示字母和字母出現(xiàn)的隨機(jī)位置,有兩種不同的產(chǎn)生方式。</p><p>  方式1:可以將字母隨機(jī)的排在一個(gè)字符串中,然后通過查表的方式來顯示不同的字母,字母出現(xiàn)位置的隨機(jī)也可以這樣。</p><p>  方式2:通過數(shù)學(xué)上產(chǎn)生隨機(jī)

17、數(shù)的算法來實(shí)現(xiàn)字母出現(xiàn)位置的隨機(jī),從而根據(jù)字母的位置來選擇不同的隨機(jī)字母。</p><p>  方式1只需要在開始將字母隨機(jī)的排在一個(gè)字符串中,然后將字母出現(xiàn)位置也隨機(jī)的排列在內(nèi)存中就行了,這種方式調(diào)用起來方便和快捷;方式2需要用匯編語(yǔ)言對(duì)隨機(jī)算法進(jìn)行描述,從而不斷的產(chǎn)生隨機(jī)數(shù),較為復(fù)雜。最后,綜和各自的優(yōu)缺點(diǎn),本程序選擇了方式1。</p><p><b>  3系統(tǒng)原理闡述&l

18、t;/b></p><p>  從設(shè)計(jì)任務(wù)及要求可以得知編寫此匯編程序的基本原理,編寫一個(gè)主程序和若干個(gè)子程序(初始化子程序、提示信息子程序、速度設(shè)定子程序、開始打字子程序,顯示打字結(jié)果子程序)來完成設(shè)計(jì)任務(wù)所要求的功能,使程序模塊化和功能化,讓程序看起來簡(jiǎn)潔,明了。</p><p>  主程序完成的功能為:首先調(diào)用初始化子程序,對(duì)系統(tǒng)參數(shù)進(jìn)行初始化和主界面初始化,然后調(diào)用字母下降速

19、度選擇和設(shè)定子程序?qū)ψ帜赶陆邓俣冗M(jìn)行設(shè)定,其次調(diào)用系統(tǒng)時(shí)鐘子程序顯示當(dāng)前時(shí)間,然后調(diào)用開始游戲子程序開始打字和計(jì)分。若想中斷打字過程,并看自己的成績(jī),可按esc鍵進(jìn)行游戲結(jié)束時(shí)分?jǐn)?shù)顯示子程序的調(diào)用,窗口會(huì)顯示打字情況。初始化子程序?qū)φ麄€(gè)程序中用到的參數(shù)進(jìn)行初值設(shè)定,并顯示開始界面和提示信息。速度選擇和設(shè)定子程序?qū)嶋H上是延時(shí)環(huán)節(jié),字母下落速度越快則延時(shí)越少,反之亦然。系統(tǒng)時(shí)鐘子程序是采用中斷調(diào)用系統(tǒng)時(shí)鐘并顯示在打字游戲窗口,讓用戶可以隨時(shí)

20、知道打字所花費(fèi)的時(shí)間,人機(jī)交互友好,體現(xiàn)人性化設(shè)計(jì)。開始游戲子程序會(huì)調(diào)用字母下落子程序和隨機(jī)字母和隨機(jī)位置產(chǎn)生子程序,不斷的落下字母讓用戶進(jìn)行打字游戲,并隨時(shí)顯示用戶的得分情況。字母下落子程序通過不斷的本行寫空格和下一行寫當(dāng)前字母來實(shí)現(xiàn)字母的下落。隨機(jī)字母和隨機(jī)位置產(chǎn)生子程序通過查表的方法來實(shí)現(xiàn)隨機(jī)字母和隨機(jī)位置的產(chǎn)生。</p><p>  游戲結(jié)束時(shí)分?jǐn)?shù)顯示子程序會(huì)顯示本次用戶的打字情況。本程序有多個(gè)子程序和主

21、程序構(gòu)成,主程序不斷地調(diào)用子程序來進(jìn)行打字游戲。</p><p><b>  4軟件設(shè)計(jì)</b></p><p>  4.1 軟件的設(shè)計(jì)思想</p><p>  根據(jù)設(shè)計(jì)任務(wù)及要求,可以得到匯編語(yǔ)言的基本思想為編寫一個(gè)主程序和若干個(gè)子程序,各子程序分別為:初始化子程序、速度設(shè)定子程序、顯示時(shí)鐘子程序、開始打字子程序,顯示打字結(jié)果子程序,在程序運(yùn)

22、行時(shí)主程序分別調(diào)用各個(gè)子程序來完成匯編語(yǔ)言程序的編制和打字游戲的不斷進(jìn)行。因?yàn)楦鱾€(gè)子程序是相互獨(dú)立的,所以可以讓這些子程序分別獨(dú)立的完成某一特定的功能,然后再依靠主程序來調(diào)用這些不同的功能模塊,這樣通過增加子程序逐漸增加系統(tǒng)的功能,最終主程序?qū)⑺械男」δ苣K連接在一起,從而達(dá)到設(shè)計(jì)任務(wù)所要求的功能。這樣,將一個(gè)大功能簡(jiǎn)化為一個(gè)個(gè)小功能,可以大大減小編寫程序的難度,并且這樣進(jìn)行模塊化設(shè)計(jì)大大增加了程序的可閱讀性和移植性,在以后要用到相同

23、的功能時(shí)可以將其移植過來,還大大簡(jiǎn)化了程序的設(shè)計(jì),避免了重復(fù)勞動(dòng)。</p><p>  4.2 主程序及其功能說明</p><p>  4.2.1主程序的流程圖</p><p><b>  圖1 主程序流程圖</b></p><p>  4.2.2主程序的功能說明</p><p>  由圖1可知主

24、程序是程序的脈絡(luò)主線,程序的運(yùn)行就是圍繞著主程序的執(zhí)行而運(yùn)行的同時(shí)也是其他子程序的接入點(diǎn)。主模塊是打字游戲的核心模塊,主要通過各個(gè)鍵盤符來控制各個(gè)子模塊之間的協(xié)調(diào),完成打字游戲的運(yùn)行。子模塊主要包括:初始化子模塊、速度設(shè)定子模塊、顯示時(shí)鐘子模塊、開始打字子模塊,顯示打字結(jié)果子模塊。其中初始化子模塊包括顯示初始界面菜單,初始化程序參數(shù),判斷是否進(jìn)入游戲;速度設(shè)定子模塊包括速度選擇子程序和速度設(shè)置子程序。顯示時(shí)鐘子模塊包括取系統(tǒng)時(shí)鐘和顯示兩

25、個(gè)子程序。開始打字子模塊包括顯示分?jǐn)?shù)子程序,當(dāng)敲入字符與下落相符時(shí)揚(yáng)聲器發(fā)聲子程序,字母下落子程序,產(chǎn)生新的字母和新的位置子程序,延時(shí)子程序。這些程序有機(jī)的組合在一起,完成整個(gè)打字游戲的運(yùn)行。主程序如下所示。</p><p>  pushReg macro</p><p><b>  push ax</b></p><p><b> 

26、 push bx</b></p><p><b>  push cx</b></p><p><b>  push dx</b></p><p><b>  endm </b></p><p><b>  ;寄存器出棧</b></p>

27、;<p>  popReg macro</p><p><b>  pop dx </b></p><p><b>  pop cx </b></p><p><b>  pop bx </b></p><p><b>  pop ax</b>

28、;</p><p><b>  endm </b></p><p>  ;**設(shè)置光標(biāo)宏** </p><p>  curse macro cury,curx</p><p><b>  pushReg </b></p><p>  mov ah,02h </p&

29、gt;<p>  mov bh,00h</p><p>  mov dh,cury</p><p>  mov dl,curx</p><p><b>  int 10h</b></p><p><b>  popReg</b></p><p><b>

30、;  endm </b></p><p>  ;清屏宏定義 </p><p>  clear_screen macro op1,op2,op3,op4,color </p><p><b>  pushReg</b></p><p>  mov ax,0600h ;清屏程序&l

31、t;/p><p>  mov bh,color </p><p>  mov ch,op1 </p><p>  mov cl,op2 </p><p>  mov dh,op3 </p><p>  mov dl,op4 </p><p><b>  int 10h </b>

32、</p><p><b>  curse 0,0</b></p><p><b>  popReg </b></p><p><b>  endm </b></p><p><b>  ;菜單顯示宏定義 </b></p><p>

33、;  menu macro cury,curx,op3 </p><p>  ; curse cury,curx</p><p>  mov ah,02h </p><p>  mov bh,00h</p><p>  mov dh,cury</p><p>  mov dl,curx </p>

34、;<p><b>  int 10h </b></p><p>  ;mov ah,02h</p><p>  mov ah,09h </p><p>  lea dx,op3 </p><p><b>  int 21h </b></p><p><b

35、>  endm</b></p><p>  data segment</p><p>  ; add your data here! </p><p>  ;隨機(jī)的字母 </p><p>  letters db 'etfpzybjsyoqirfxtdaphbfdbchrrmjwzxkhuieqtwfqzugl

36、nvmlmotogaitlbpfuhgdzwxwqiproeagndclrjyvnzcyjywdquvpmneknvkesbhlagsoxivscmskkujcxa'</p><p>  ch_count equ $-letters ;ch_count=130 、</p><p><b>  ;隨機(jī)的x坐標(biāo)</b></p><p>

37、  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,6</p><p>  db 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,16</p><p>  db

38、 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</p><p>  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,28</p><p>  db 78,49,31,

39、22,50,63,39,61,51,56,48,76,7,10,75,62,67,38,3,61,24,60,56,54,34,8,33,50</p><p>  db 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,26</p><p>  db 15,68,69,43,8,75,41

40、,6,74,65,64,3,73,78,64,32,9,51,72,55,19,66,49,21,62,46,36,29</p><p>  db 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,39</p><p>  db 30,23,31,65,55,17,70,36,65,0

41、,4,57,64,25,44,17 </p><p>  x_count equ $-xpos ;x_count=239</p><p><b>  ;歡迎界面 </b></p><p>  menu0 db "Welcome to play !$" </p><p>  menu1 db &#

42、39;1.Press Enter to game!',0dh,0ah,'$' </p><p>  menu3 db '2.Press Esc to exit!',0dh,0ah,'$' </p><p>  menu40 db 'Hint: when you exit from the game ,',0dh,0a

43、h,'$' </p><p>  menu41 db ' you will kown how much you get ',0dh,0ah,'$' </p><p><b>  ;版權(quán)界面</b></p><p>  copyright_msg db 'Portions Copyri

44、ght 2011 zhang chong. All rights reserved.',0dh,0ah,'$' </p><p><b>  ;速度選項(xiàng)</b></p><p>  speed_msg1 db 'choose speed:$'</p><p>  speed_msg2 db '1.

45、Press "h"--high speed$'</p><p>  speed_msg3 db '2.Press "l"--low speed$'</p><p>  speed_msg4 db '3.othes--orditional$' </p><p>  speed_msg5 d

46、b 'Speed is ungelivable? Press "s" to set$'</p><p><b>  ;輸入速度值</b></p><p>  set_msg1 db 'Please Input a num(=x) between 1 to 999$' </p><p>  se

47、t_msg2 db 'as x percent of the orditional speed$'</p><p>  set_msg3 db 'x=$'</p><p>  set_msg4 db '%$'</p><p><b>  ;時(shí)間和分?jǐn)?shù) </b></p><p&g

48、t;  time_msg db 'Time:$'</p><p>  goal_msg db 'Your score:$' </p><p><b>  ;結(jié)束界面顯示</b></p><p>  score_msg1 db 'Congratulation! There are total $'&

49、lt;/p><p>  score_msg2 db 'chars.$'</p><p>  score_msg3 db 'You have hit $'</p><p>  score_msg4 db 'And you have tapped keyboard for $'</p><p>  sc

50、ore_msg5 db 'times.$' </p><p>  score_msg6 db'The hit rate is:$'</p><p>  score_msg7 db'%'</p><p><b>  ;是否重新開始提示</b></p><p>  restar

51、t_msg db 'Do you want to continue? (y/n):$'</p><p>  char db 0 ;字母</p><p>  ch_index dw 0 ;字母的索引</p><p>  x_index dw 0 ;位置的索引</p><p>  blife db 0 ;字

52、母是否還在</p><p>  letter_y db 1 ;字母y坐標(biāo)</p><p>  letter_x db 0 ;字母x坐標(biāo)</p><p>  ispeed db 1 ;速度選擇,0慢速,1普通,2快速</p><p>  score dw 0 ;得分即擊中次數(shù)</p><p>  tot

53、al dw 0 ;總共字母數(shù)</p><p>  nhit dw 0 ;擊鍵次數(shù)</p><p>  second db 0ffh ;時(shí)間的當(dāng)前秒數(shù)</p><p>  numchar db 4,?,4 dup(0) ;輸入數(shù)字 </p><p>  speednum dw 0 ;速度值</p&g

54、t;<p>  bset db 0 ;是否重設(shè)數(shù)字</p><p>  char_yn db 2,0,2 dup(0) ;是否繼續(xù)的符號(hào)(Y/N)</p><p><b>  data ends</b></p><p>  stack segment</p><p>  dw

55、 128 dup(0)</p><p>  stack ends</p><p>  code segment</p><p>  assume cs:code,ds:data,ss:stack </p><p><b>  start:</b></p><p>  ; set segment

56、registers:</p><p>  mov ax, data</p><p>  mov ds, ax</p><p>  mov es, ax</p><p>  RESTART: </p><p>  call Init ; 初始化</p><p><b> 

57、 cmp ax,0</b></p><p><b>  je Lexit</b></p><p>  call SpeedChoose ;速度選擇</p><p>  call SetInterface ;速度設(shè)置界面</p><p>  ; add your code here</p><

58、;p><b>  ;輸出一句話</b></p><p><b>  LgetTime:</b></p><p>  call ShowTime </p><p>  call PlayGames </p><p><b>  ;是否有結(jié)束標(biāo)志</b></p>

59、;<p><b>  cmp al,0</b></p><p>  jne LgetTime </p><p>  LendGame: </p><p>  call GameOver </p><p>  CALL IsRestart</p><p><b>

60、;  cmp al,0</b></p><p><b>  je Lexit </b></p><p><b>  ;重新開始</b></p><p>  mov bx,RESTART</p><p><b>  jmp bx</b></p><

61、p><b>  Lexit: </b></p><p>  mov ax, 4c00h ; exit to operating system.</p><p>  int 21h </p><p>  4.3 初始化子程序及其功能說明</p><p>  4.3.1初始化子程序的流程圖</p>&

62、lt;p>  圖2 初始化子程序流程圖</p><p>  4.3.2初始化子程序功能說明</p><p>  初始化子模塊包括初始化程序參數(shù),顯示初始界面菜單,判斷是否進(jìn)入游戲。首先初始化字母出現(xiàn)的位置,初始化得分和各種標(biāo)志的值,然后顯示初始界面菜單,通過一個(gè)比較指令和堆棧操作來判斷是否進(jìn)入游戲。其源程序如下。</p><p>  ;初始化界面和判斷是否進(jìn)入

63、游戲</p><p>  Init proc near</p><p>  mov letter_y,1 ;初始化y坐標(biāo)</p><p>  mov letter_x,0 ;初始化x坐標(biāo) </p><p>  ;初始化分?jǐn)?shù),擊鍵次數(shù)和總字符數(shù)</p><p>  mov score,0 </p>

64、<p>  mov nhit,0</p><p>  mov total,0</p><p>  mov bset,0 ;默認(rèn)沒有設(shè)置速度</p><p>  mov blife,0 ;生命置空</p><p>  mov ispeed,1 ;速度置為普通 </p><p>  clear_scre

65、en 0d,00d,24d,79d,11 ;青色包括時(shí)間和分?jǐn)?shù);24*80(0開始) </p><p>  menu 05,20,menu0 ;菜單信息的宏調(diào)用 </p><p>  menu 07,20,menu1 </p><p>  menu 09,20,menu3 </p><p>  menu 13,20,menu40

66、 </p><p>  menu 15,22,menu41 </p><p>  menu 23,08,copyright_msg </p><p><b>  ;輸入是否進(jìn)入游戲</b></p><p>  mov bx,0; </p><p>  mov ah,01h</p>

67、;<p><b>  int 21h</b></p><p>  cmp al,0dh </p><p><b>  jne Lendi</b></p><p><b>  inc bx</b></p><p>  Lendi:push bx <

68、/p><p>  pop ax </p><p><b>  ret</b></p><p>  Init endp </p><p>  4.4 速度選擇子程序及其功能說明</p><p>  4.4.1速度選擇子程序的流程圖</p><p>  圖3 速度選

69、擇子程序</p><p>  4.4.2速度選擇子程序功能說明</p><p>  速度選擇子程序初始默認(rèn)速度為正常速度,然后檢測(cè)鍵盤輸入,若輸入為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,

70、此標(biāo)志會(huì)讓字母下降時(shí)延時(shí)時(shí)間增長(zhǎng),即讓字母下降速度變慢。速度選擇子程序的源程序如下。</p><p><b>  ;選擇速度</b></p><p>  SpeedChoose proc near</p><p>  clear_screen 0d,00d,24d,79d,11 ;青色包括時(shí)間和分?jǐn)?shù);24*80(0開始) </p&

71、gt;<p>  menu 07,24,speed_msg1</p><p>  menu 09,24,speed_msg2</p><p>  menu 11,24,speed_msg3</p><p>  menu 13,24,speed_msg4</p><p>  menu 17,20,speed_msg5 </p

72、><p>  mov ispeed,1 ;默認(rèn)普通速度 </p><p>  mov bset,0 ;默認(rèn)沒有設(shè)置速度</p><p>  mov ah,01h</p><p><b>  int 21h </b></p><p>  or al,20h ;轉(zhuǎn)為小寫 </p>&l

73、t;p>  cmp al,'s'</p><p>  jne Lnexts</p><p>  mov bset,1</p><p>  call Setspeed ;設(shè)置速度</p><p>  jmp LendChoose</p><p>  Lnexts: cmp al,'h&#

74、39;</p><p>  jne LisSlow</p><p>  mov ispeed,2</p><p>  jmp LendChoose </p><p>  LisSlow:cmp al,'l' </p><p>  jne LendChoose </p><p&g

75、t;  mov ispeed,0 </p><p>  LendChoose: ret </p><p>  SpeedChoose endp</p><p>  SetSpeed proc near</p><p>  clear_screen 0,0,24,79,10 ;橙黃色界面</p><p>  men

76、u 9,20,set_msg1</p><p>  menu 11,20,set_msg2</p><p>  menu 13,20,set_msg3</p><p>  menu 13,27,set_msg4</p><p>  call CinNum ;輸入數(shù)字</p><p><b>  ret

77、 </b></p><p>  SetSpeed endp</p><p><b>  ;輸入速度比例</b></p><p>  CinNum proc near </p><p><b>  ;輸入數(shù)字</b></p><p><b>  Lr

78、eCin:</b></p><p>  curse 13,23 </p><p><b>  ;清除輸入垃圾值</b></p><p><b>  mov cx,3</b></p><p>  mov ah,02h</p><p>  Lcout: mov dl

79、,' '</p><p><b>  int 21h</b></p><p>  loop Lcout </p><p><b>  ;輸入字符串</b></p><p>  curse 13,23 </p><p>  lea dx,numchar</

80、p><p>  mov ah,0ah</p><p><b>  int 21h </b></p><p>  xor cx,cx </p><p>  mov cl,numchar[1] ;輸入數(shù)字個(gè)數(shù)</p><p>  lea si,numchar[2] </p><p&

81、gt;  xor ax,ax ;輸入數(shù)字大小</p><p>  mov bl,10 ;乘10再加數(shù)</p><p><b>  L11: </b></p><p><b>  ;判斷輸入是否合法</b></p><p>  mov dl,[si] </p><p

82、>  cmp dl,'0'</p><p>  jl LreCin</p><p>  cmp dl,'9'</p><p>  jg LreCin </p><p><b>  ;乘10再加數(shù)</b></p><p><b>  mul bl

83、 </b></p><p>  sub dl,'0'</p><p>  xor dh,dh </p><p>  add ax,dx ;加上新數(shù) </p><p><b>  inc si</b></p><p><b>  loop L11

84、</b></p><p><b>  cmp ax,0</b></p><p><b>  je LreCin</b></p><p>  mov speednum,ax ;速度值 </p><p><b>  ret </b></p><p&g

85、t;  Cinnum endp </p><p>  4.5 顯示時(shí)鐘子程序及其功能說明</p><p>  4.5.1 顯示時(shí)鐘子程序的流程圖</p><p>  圖4 顯示時(shí)鐘子程序的流程圖</p><p>  4.5.2 顯示時(shí)鐘子程序的功能說明</p><p>  顯示時(shí)鐘子程序首先通過DOS中斷中的取系統(tǒng)時(shí)

86、鐘中斷,獲得當(dāng)前系統(tǒng)時(shí)鐘的時(shí)、分、秒值,然后將秒值與程序定義的秒值標(biāo)志進(jìn)行比較,若兩者不想等,則將系統(tǒng)當(dāng)前的時(shí)鐘輸出,若秒值沒有變化,則直接退出程序。此部分源程序如下。</p><p><b>  ;顯示時(shí)間</b></p><p>  showTime proc near </p><p>  mov ah,2ch

87、 ;取時(shí)間</p><p><b>  int 21h</b></p><p>  cmp second,dh ;秒變化則再次輸出,秒不變化則繼續(xù)等待 </p><p>  jz LreShow </p><p>  curse 0,5 </p><p&

88、gt;  mov al,ch </p><p>  call p ;輸出“小時(shí)” </p><p>  mov ah,02h</p><p>  mov dl,':'</p><p><b>  int 21h</b></p&g

89、t;<p><b>  mov al,cl</b></p><p>  call p ;輸出“分鐘” </p><p>  mov dl,':'</p><p><b>  int 21h</b></p><p><b>

90、;  mov al,dh</b></p><p>  call p ;輸出“秒鐘” </p><p>  LreShow: ret </p><p>  ShowTime endp</p><p>  ;計(jì)算2位整數(shù),主要用于時(shí)間和分?jǐn)?shù)輸出</p><p> 

91、 p proc near </p><p>  mov ah,00h ;將al補(bǔ)充為ax</p><p><b>  mov bl,10</b></p><p><b>  div bl</b></p><p>  mov bh,ah

92、;余數(shù)存入ah</p><p>  mov dl,al ;商存入al</p><p><b>  or dl,30h</b></p><p>  mov ah,02h</p><p><b>  int 21h</b></p><p>  mo

93、v dl,bh </p><p><b>  or dl,30h</b></p><p><b>  int 21h</b></p><p><b>  ret</b></p><p><b>  p endp </b>

94、</p><p>  4.6開始打字子程序及其功能說明</p><p>  4.6.1 開始打字子程序的流程圖</p><p>  圖5 開始打字子程序的流程圖</p><p>  4.6.2 開始打字子程序的功能說明</p><p>  開始打字子程序的程序段中,首先調(diào)用顯示分?jǐn)?shù)子程序?qū)Ξ?dāng)前得分進(jìn)行動(dòng)態(tài)顯示,然后檢測(cè)

95、是否有字符從鍵盤輸入,若沒有則直接調(diào)用下落子程序和延時(shí)子程序,讓字母按正常方式下落。若有字符從鍵盤輸入則判斷和當(dāng)前顯示字母是否相同,相同則對(duì)相關(guān)標(biāo)志進(jìn)行處理,不相同則判斷是否和esc鍵相同,相同則退出程序并顯示得分情況,最后除了退出程序外,其他情況都要經(jīng)過字母下落子程序和延時(shí)子程序,在字母下落子程序中,會(huì)根據(jù)相關(guān)標(biāo)志值的情況,判斷是顯示新字符,還是繼續(xù)當(dāng)前字符的下落,下落的快慢是由延時(shí)的長(zhǎng)短決定的。在本程序中,有很多INT10的指令。靈

96、活的利用INT10豐富的指令功能,可以巧妙的設(shè)計(jì)出想要的程序來。INT10中斷規(guī)定,DH和DL共同控制著字符輸出的位置,其中DH為字符輸出的行標(biāo),DL為字符輸出的列標(biāo),通過改變DH和DL的值,可以改變字符在命令符輸出屏幕上的位置,從而實(shí)現(xiàn)字符下落。開始打字子程序的源程序如下,。</p><p>  PlayGames Proc near</p><p>  cmp score,1000&

97、lt;/p><p>  jl Lrightshow </p><p>  curse 0,76 ;顯示分?jǐn)?shù) </p><p>  jmp Lendsetpos</p><p>  Lrightshow:</p><p>  curse 0,77 ;顯示分?jǐn)?shù)</p><p>  Lendsetpos

98、: </p><p>  call PrintScore ;輸出分?jǐn)?shù) </p><p>  mov ah,0bh ;是否有字符輸入</p><p><b>  int 21h</b></p><p>  inc al </p><p>  jne Lnochar ;沒有字符</p

99、><p>  mov ah,07h</p><p>  int 21h </p><p>  inc nhit ;擊鍵次數(shù)加一</p><p>  cmp al,char ;是否和當(dāng)前字符相同</p><p>  jne LnotHit</p><p>  call SOUND ;按鍵正確則發(fā)

100、</p><p>  mov blife,0 ;擊中當(dāng)前字符 </p><p><b>  inc score</b></p><p>  jmp Lnochar</p><p>  LnotHit:cmp al,27;esc 鍵退出</p><p>  jne Lnochar</p>

101、<p>  dec nhit ;退出不算擊鍵</p><p><b>  xor ax,ax</b></p><p>  jmp Lendplay </p><p><b>  Lnochar:</b></p><p>  call LetterDown </p>

102、<p>  call Delay</p><p><b>  mov ax,1</b></p><p><b>  Lendplay:</b></p><p><b>  ret </b></p><p>  PlayGames endp</p>&

103、lt;p><b>  ;顯示四位數(shù)字?jǐn)?shù)字</b></p><p>  PrintScore proc near </p><p><b>  ;萬(wàn)位數(shù)字 </b></p><p>  mov ax,score</p><p>  cmp ax,10000</p><p

104、>  jl Lsmlth </p><p>  mov bx,10000</p><p><b>  xor dx,dx</b></p><p><b>  div bx</b></p><p>  mov ax,dx </p><p><b>  ;萬(wàn)位數(shù)字

105、暫不顯示</b></p><p>  Lsmlth:;千位數(shù)字 </p><p>  cmp score,1000</p><p>  jl Lsmallhun</p><p><b>  xor dx,dx</b></p><p>  mov bx,1000</p>&

106、lt;p><b>  div bx</b></p><p>  push dx ;余數(shù)</p><p>  call outnum ;顯示千位數(shù)字</p><p><b>  pop ax</b></p><p>  Lsmallhun: ;顯示百位數(shù)字</p><p>

107、;  mov bl,100</p><p><b>  div bl</b></p><p>  push ax ;余數(shù)</p><p>  call outnum ;顯示百位數(shù)字</p><p><b>  pop ax</b></p><p><b>  mov

108、 al,ah</b></p><p>  ;顯示個(gè)位和十位數(shù)字</p><p><b>  call p </b></p><p><b>  ret </b></p><p>  PrintScore endp </p><p><b> 

109、 字母下降一層</b></p><p>  LetterDown proc near </p><p>  mov ch,letter_y</p><p>  mov cl,letter_x</p><p>  mov dl,' '</p><p>  call LetterShow&l

110、t;/p><p>  inc letter_y ;下降一格</p><p><b>  mov al,0</b></p><p>  cmp blife,0 ;生命值為0</p><p>  jne Lnext1</p><p><b>  inc al</b></p

111、><p>  Lnext1: cmp letter_y,24 ;到達(dá)游戲界面底部</p><p><b>  jl Lnext2</b></p><p><b>  inc al</b></p><p>  Lnext2: cmp al,0 ;是否該顯示新字母</p><p&g

112、t;  jne Lnewletter</p><p><b>  ;字母下一行顯示</b></p><p>  mov ch,letter_y</p><p>  mov cl,letter_x</p><p>  mov dl,char</p><p>  call LetterShow<

113、/p><p>  jmp Lendown </p><p>  Lnewletter: </p><p>  mov blife,1</p><p>  inc total ;總字符數(shù)加1</p><p>  call GenNewPos</p><p>  mov ch,letter_y</

114、p><p>  mov cl,letter_x</p><p>  mov dl,char</p><p>  call LetterShow </p><p>  Lendown: </p><p><b>  ret </b></p><p>  Letter

115、Down endp</p><p>  4.7 顯示打字結(jié)果子程序及其功能說明</p><p>  4.7.1顯示打字結(jié)果子程序的流程圖</p><p>  圖6 顯示打字結(jié)果子程序的流程圖</p><p>  4.7.2顯示打字結(jié)果子程序的功能說明</p><p>  顯示打字結(jié)果子程序通過不斷的調(diào)用計(jì)算數(shù)字位數(shù)子程

116、序,顯示數(shù)字子程序來將總字符數(shù)、總擊鍵數(shù)、得分?jǐn)?shù),顯示在屏幕上,當(dāng)然字符前面也有一些提示信息,它們是通過調(diào)用宏來實(shí)現(xiàn)字符串現(xiàn)實(shí)的,并且通過調(diào)用INT10的相關(guān)中斷改變字符串顯示的顏色和數(shù)字顯示的顏色。其源程序如下所示。</p><p>  GameOver proc near ;游戲結(jié)束顯示分</p><p>  clear_screen 0,0,24,79,14 ;橙黃色界面 &l

117、t;/p><p><b>  ;總共的字符數(shù) </b></p><p>  ;---------------total</p><p>  menu 07,20,score_msg1 </p><p>  mov ax,total</p><p>  call CountNum ;計(jì)算數(shù)字位數(shù)

118、,返回值在cx中</p><p><b>  mov bl,52</b></p><p>  add bl,cl ;x坐標(biāo) </p><p><b>  push bx</b></p><p>  clear_screen 07,52,07,bl,12 ;分?jǐn)?shù)處顏色為紅色</p>&l

119、t;p>  curse 07,52</p><p>  mov ax,total </p><p>  call CoutNum ;輸出數(shù)字</p><p><b>  pop bx</b></p><p>  inc bl </p><p>  menu 07,bl

120、,score_msg2</p><p>  ;------------------score </p><p><b>  ;擊中的字符數(shù)</b></p><p>  menu 09,20,score_msg3 </p><p>  mov ax,score</p><p>  call Cou

121、ntNum ;計(jì)算數(shù)字位數(shù),返回值在cx中 </p><p><b>  mov bl,33</b></p><p>  add bl,cl ;x坐標(biāo)</p><p><b>  push bx</b></p><p>  clear_screen 09,33,09,bl,12 ;分?jǐn)?shù)處顏色為紅色&

122、lt;/p><p>  curse 09,33</p><p>  mov ax,score</p><p>  call CoutNum ;輸出數(shù)字</p><p><b>  pop bx </b></p><p><b>  inc bl </b></p>

123、<p>  menu 09,bl,score_msg2</p><p>  ;------------------nhit </p><p><b>  ;擊鍵的次數(shù)數(shù)</b></p><p>  menu 11,20,score_msg4 </p><p>  mov ax,nhit</p>

124、<p>  call CountNum ;計(jì)算數(shù)字位數(shù),返回值在cx中 </p><p><b>  mov bl,53</b></p><p>  add bl,cl ;x坐標(biāo)</p><p><b>  push bx</b></p><p>  clear_screen 11,5

125、3,11,bl,12 ;分?jǐn)?shù)處顏色為紅色</p><p>  curse 11,53</p><p>  mov ax,nhit</p><p>  call CoutNum ;輸出數(shù)字</p><p><b>  pop bx </b></p><p><b>  inc bl &l

126、t;/b></p><p>  menu 11,bl,score_msg5</p><p><b>  ;顯示是否重新開始</b></p><p>  menu 15,20,restart_msg </p><p>  Legame: </p><p>  ret <

127、;/p><p>  GameOver endp</p><p>  5調(diào)試記錄及結(jié)果分析</p><p><b>  5.1 調(diào)試記錄</b></p><p>  在調(diào)試字母下落這部分程序的時(shí)候,編譯器顯示沒有錯(cuò)誤,但是運(yùn)行程序時(shí)不管中途有沒有輸入按鍵,始終是一個(gè)字母下落到底,意識(shí)到可能是邏輯錯(cuò)了,然后我對(duì)這段程序畫了詳細(xì)的

128、流程圖,嚴(yán)格按照流程圖的邏輯來寫,調(diào)試了幾遍終于在最后出來了,當(dāng)時(shí)感到非常高興,同時(shí)也意識(shí)到流程圖的巨大作用;還有有時(shí)講一個(gè)寄存器入了棧,但是沒有出棧,對(duì)程序的結(jié)果也造成了巨大的影響,其中一個(gè)例子就是,程序出現(xiàn)開始界面以后,我按ENTER鍵進(jìn)入,但是始終無(wú)法進(jìn)入,導(dǎo)致我懷疑這部分邏輯是不是也有問題,最后我逐句的分析發(fā)現(xiàn)原來是寄存器沒有出棧。最后界面顯示結(jié)果如下圖所示。</p><p><b>  5.2

129、 運(yùn)行結(jié)果</b></p><p>  程序運(yùn)行后的開始界面如圖7,主界面第一行是歡迎語(yǔ),最后一行是作者,然后中間是操作說明,為使用者說明該程序的使用方法。背景設(shè)置為黑色,字體為藍(lán)色。</p><p><b>  圖7 開始界面</b></p><p>  程序運(yùn)行后的速度選擇界面如圖8所示,其中前三行為快速和慢速選擇界面,第三行為

130、普通速度選擇。最后一行為速度設(shè)置。</p><p><b>  圖8 速度選擇界面</b></p><p>  程序運(yùn)行后的字母下落界面如圖9所示,其中左上角顯示的是當(dāng)前時(shí)間,每隔一秒變化一次,右上角顯示的是用戶得分情況,在字母下降過程中若用戶按下相同的鍵,則當(dāng)前字母消失,出現(xiàn)新的字母,同時(shí)揚(yáng)聲器發(fā)聲。如圖10所示。</p><p>  圖9

131、 字母下落界面</p><p>  圖10 按下相同鍵之后的顯示</p><p>  程序運(yùn)行后的結(jié)果顯示界面如圖11所示其中第一行是程序總共下落的字母數(shù),第二行是用戶的得分情況,第三行為用戶按鍵次數(shù)。通過這些結(jié)果的顯示,用戶可以非常清楚的知道本次練習(xí)的情況,體現(xiàn)了人機(jī)界面的友好。</p><p>  圖11 結(jié)果顯示界面</p><p>&

132、lt;b>  6總結(jié)</b></p><p>  本次課程設(shè)計(jì)主要分為以下5個(gè)部分,初始化子模塊、速度設(shè)定子模塊、顯示時(shí)鐘子模塊、開始打字子模塊,顯示打字結(jié)果子模塊。在整個(gè)程序的編寫中,調(diào)試占了很大部分的時(shí)間,基本上每個(gè)子模塊需要調(diào)試3-4個(gè)小時(shí),而且要想寫好匯編程序,必須認(rèn)真對(duì)待代碼的每一個(gè)細(xì)節(jié),還必須熟練的掌握debug指令。通過這次實(shí)際動(dòng)手能力的培養(yǎng),我進(jìn)一步熟悉了匯編的結(jié)構(gòu)和使用法,基本

133、達(dá)到能獨(dú)立閱讀。我覺得學(xué)習(xí)匯編的一個(gè)較大好處就是可以了解電腦中每一個(gè)字節(jié)數(shù)據(jù)的來龍去脈,到底是存儲(chǔ)在那一個(gè)地方。同時(shí)在這次課程設(shè)計(jì)中我也做了一些課設(shè)任務(wù)沒有要求的部分,比如速度選擇和當(dāng)前時(shí)間顯示。</p><p>  雖然學(xué)校也開設(shè)了微機(jī)原理實(shí)驗(yàn)的課程,但在學(xué)習(xí)的時(shí)候總是感覺差點(diǎn)什么,這次做了課程設(shè)計(jì)讓我明白仿真軟件的學(xué)習(xí)是需要在實(shí)踐中進(jìn)行的。在經(jīng)過自己學(xué)習(xí),請(qǐng)教后,我能寫出自己想要的匯編程序。我認(rèn)為光靠自己一個(gè)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論