版權(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> 學(xué)生姓名: 專業(yè)班級(jí): </p><p> 指導(dǎo)教師: 工作單位: </p><p> 題 目: 打字練習(xí)</p><p><b> 初始
2、條件:</b></p><p> 掌握匯編語言程序設(shè)計(jì)方法,所設(shè)計(jì)的程序運(yùn)行后可通過鍵盤控制,滿足系統(tǒng)功能,并實(shí)現(xiàn)該系統(tǒng)設(shè)計(jì)方案。在DOS,windows,匯編軟件環(huán)境下運(yùn)行。</p><p> 要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p> 1. 程序運(yùn)行后,鍵盤輸入不同進(jìn)行不同處理:<
3、/p><p> a)‘E’表示退出;</p><p> b)‘I’表示插入,‘L’表示瀏覽,‘Q’表示查詢,‘D’表示刪除,‘M’表示修改,‘C’表示統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù)。</p><p> 2. 課程設(shè)計(jì)說明書應(yīng)包括:</p><p><b> a)設(shè)計(jì)任務(wù)及要求</b></p><p><
4、;b> b)方案比較及認(rèn)證</b></p><p> c)程序設(shè)計(jì)基本思想,程序流程圖,部分源程序及注解</p><p> d)調(diào)試記錄及結(jié)果分析</p><p><b> e)參考資料</b></p><p> f)附錄:全部源程序清單</p><p><b&g
5、t; g)總結(jié)</b></p><p><b> 時(shí)間安排:</b></p><p> 2011年元月07日--元月09日 選題、查閱資料和方案設(shè)計(jì)</p><p> 2011年元月10日--元月14日 編程</p><p> 2011年元月15日--元月16日 調(diào)試程序,改進(jìn)與提高&
6、lt;/p><p> 2011年元月17日 撰寫課程設(shè)計(jì)報(bào)告(有調(diào)試過程及結(jié)果的截屏)</p><p> 2011年元月18日 答辯和交課程設(shè)計(jì)報(bào)告</p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 系主任(或責(zé)任教師)簽名:
7、 年 月 日</p><p><b> 目錄</b></p><p><b> 1設(shè)計(jì)目的3</b></p><p><b> 2概要設(shè)計(jì)4</b></p><p> 2.1 系統(tǒng)總體分析4</p><
8、p> 2.2主模塊框圖及說明4</p><p><b> 3詳細(xì)設(shè)計(jì)6</b></p><p> 3.1 主模塊及子模塊說明6</p><p> 3.2 各模塊詳細(xì)設(shè)計(jì)6</p><p> 3.2.1主界面模塊6</p><p> 3.2.2隨機(jī)字母產(chǎn)生模塊8<
9、/p><p> 3.2.3字母落下模塊10</p><p> 3.2.4暫停模塊11</p><p> 3.2.5返回主界面模塊12</p><p><b> 4程序調(diào)試13</b></p><p> 4.1 運(yùn)行界面分析13</p><p> 4.2 調(diào)
10、試過程及分析15</p><p><b> 5心得體會(huì)16</b></p><p> 5.1 設(shè)計(jì)體會(huì)16</p><p> 5.2 系統(tǒng)改進(jìn)16</p><p><b> 參考文獻(xiàn)27</b></p><p><b> 打字練習(xí)程序</b
11、></p><p><b> 1設(shè)計(jì)目的</b></p><p> 這次課設(shè)的任務(wù)是寫一個(gè)程序,運(yùn)行可執(zhí)行程序后,出現(xiàn)主界面,按回車鍵出現(xiàn)由26個(gè)字母組成的亂序行,這時(shí)其中任一字母落下,在鍵盤上敲入該字母,如果輸入正確,字母消失;按回車鍵進(jìn)入打字練習(xí);按ESC鍵返回主界面;按space鍵暫停;按‘E’退出。通過課程設(shè)計(jì),主要達(dá)到以下目的:(1)增進(jìn)對(duì)匯編
12、語言的認(rèn)識(shí),加強(qiáng)用匯編語言編程的能力;</p><p> ?。?)掌握匯編語言的中斷調(diào)用功能的應(yīng)用,可以用匯編語言調(diào)用各種中斷調(diào)用功能,并由此實(shí)現(xiàn)對(duì)硬件的控制等;</p><p> ?。?)了解和掌握匯編語言程序設(shè)計(jì)過程、方法及實(shí)現(xiàn),為以后微機(jī)原理課程的學(xué)習(xí)打下良好基礎(chǔ);</p><p> ?。?)通過課程設(shè)計(jì)可以使我們更加了解書上的知識(shí),了解書上的語句并且能夠應(yīng)用
13、自己的程序中;(5)掌握屏幕輸出顯示的設(shè)計(jì)方法。</p><p><b> 2概要設(shè)計(jì)</b></p><p> 2.1 系統(tǒng)總體分析</p><p> 根據(jù)題目要求可以看到有以下幾部分來實(shí)現(xiàn)打字練習(xí):</p><p> (1)由26字母亂序組成一行顯示行;</p><p> (2)
14、字母自動(dòng)落下;</p><p> (3)從鍵盤輸入的字母與落下字母相同則該字母消失,并且下一個(gè)字母自動(dòng)接著落下;</p><p> (4)按下“Esc”鍵則程序返回到主界面;</p><p> (5)按空格鍵游戲暫停;</p><p> (6)在主界面按“E”則程序退出。</p><p> 打字練習(xí)的主要功能
15、由以上六部分組成,每一部分之間的聯(lián)系都是比較緊密的。對(duì)于以上幾個(gè)部分,最主要的部分就是第二三兩個(gè)部分,這是打字練習(xí)的重點(diǎn),需要詳細(xì)設(shè)計(jì)其所需要的功能。</p><p> 2.2主模塊框圖及說明</p><p> 程序的核心模塊是打字,各個(gè)模塊功能的實(shí)現(xiàn)主要是通過鍵盤輸入指令來融合的,主要流程是先到主界面,然后選擇你想要進(jìn)行的指令:ENTER進(jìn)入打字界面開始打字,“E”退出程序,空格在打
16、字練習(xí)時(shí)執(zhí)行暫停的功能,ESC是從打字界面返回到主界面。核心模塊的程序流程大體如下面的流程圖圖2-1。</p><p> 圖2-1 主程序流程圖</p><p><b> 3詳細(xì)設(shè)計(jì)</b></p><p> 3.1 主模塊及子模塊說明</p><p> 主界面是程序的初始入口,也是其他功能模塊的接入點(diǎn)。主模塊是
17、打字模塊,也是核心模塊,主要通過各個(gè)鍵盤符來控制各個(gè)子模塊之間的協(xié)調(diào)。子模塊分為判斷輸入字符判斷模塊(這當(dāng)中包含兩個(gè)小的子模塊:主界面輸入字符判斷和打字模塊輸入字符判斷)、暫停模塊、退出模塊(這當(dāng)中包含兩個(gè)小的子模塊:打字界面返回主界面模塊和主界面退出程序模塊)。</p><p> 3.2 各模塊詳細(xì)設(shè)計(jì)</p><p> 3.2.1主界面模塊</p><p>
18、 當(dāng)程序運(yùn)行后,我們首先要進(jìn)行選擇,是要繼續(xù)進(jìn)行即進(jìn)入打字練習(xí)程序還是終止練習(xí)退出程序。所以,在這里我們需要設(shè)置一個(gè)程序,該程序要判斷鍵盤鍵入的字符,我們不妨規(guī)定ESC鍵和ENTER鍵分別為終止程序的控制鍵和進(jìn)入打字練習(xí)程序的控制鍵,即當(dāng)檢驗(yàn)到鍵盤輸入ESC后,退出程序;當(dāng)鍵盤輸入為ENTER時(shí)進(jìn)入打字練習(xí)程序。</p><p><b> 單元程序如下:</b></p>&
19、lt;p> ZK db "WELCOME TO PLAY THIS GAME!$" </p><p> no db "date:2013/01/16$"</p><p> meg db "Press Enter key to continue...$"</p><p> me
20、g1 db "When a letter is dropping,please hit it!$"</p><p> meg2 db "Press Space key to pause!$"</p><p> meg3 db "Press ESC key to return main interface!$"</p>
21、;<p> meg4 db "Press letter 'E' to exit!$";設(shè)置主界面的顯示內(nèi)容</p><p><b> ...</b></p><p> clear_screen 00d,00d,24d,79d ;清屏宏定義 </p><p&
22、gt; Init_game 00d,00d,0ah,dl,80d,nextsign1 </p><p> Init_game 24d,00d,0ah,dl,80d,nextsign2</p><p> Init_game 00d,00d,0ah,dh,25d,nextsign3</p><p> Init_game 00d,79d,0ah,dh,
23、25d,nextsign4</p><p> menu 05d,15d,ZK ;菜單信息的宏調(diào)用</p><p> menu 07h,15d,no </p><p> menu 09d,15d,meg</p><p> menu 11d,15d,meg1</p><
24、p> menu 13d,15d,meg2</p><p> menu 15d,15d,meg3</p><p> menu 17d,15d,meg4</p><p> put: mov ah,02h ;設(shè)置光標(biāo)位置</p><p> mov bh,00h</p><p>
25、mov dh,22d</p><p> mov dl,33d</p><p><b> int 10h</b></p><p> mov ah,01h ;從鍵盤輸入任意字符</p><p><b> int 21h</b></p><p>
26、 cmp al,0dh</p><p> je speed3 ;輸入為ENTRY進(jìn)入打字練習(xí)</p><p> cmp al,45h</p><p> jne put ;輸入為“E”退出程序</p><p> mov ah,4ch</p><p><b> int 21h</
27、b></p><p> 以上代碼是清屏,并調(diào)用宏實(shí)現(xiàn)主界面的顯示,并在主界面中設(shè)置了菜單顯示后的光標(biāo)位置,以方便使用者的操作。</p><p><b> in_cycle:</b></p><p> add cx,01h</p><p> cmp cx,1000</p><p>
28、jne in_cycle </p><p><b> push dx</b></p><p> mov ah,06h ;從鍵盤輸入字符</p><p> mov dl,0ffh</p><p><b> int 21h</b></p><p><b>
29、; pop dx</b></p><p> jz pass </p><p> cmp al,1bh ;如果鍵入ESC,則返回主菜單</p><p> je to_start1</p><p> cmp al," " ;如果鍵入SPACE,則游戲暫停</p>
30、<p><b> je pause</b></p><p> cmp al,[di] ;輸入字母正確!則字母消失</p><p> je disappear</p><p> to_start1: ;返回主菜單</p><p><b> jmp start
31、</b></p><p> 上述程序段中用到了中斷INT21,利用中斷的有關(guān)規(guī)定,先將01H存入到AH當(dāng)中,則AL中即為由鍵盤鍵入的字符。在此,先通過CMP指令來判斷輸入的字符是否是ENTER鍵(ENTER鍵的ASCII碼為十六進(jìn)制的0DH),如果是的話,程序?qū)⑻D(zhuǎn)到程序disappear,disappear是定義的又一個(gè)程序,該程序即為打字練習(xí)程序的核心部分。如果不是ENTER的話,將執(zhí)行下一條指
32、令,即判斷鍵盤鍵入的是否為E鍵,此功能由CMP AL,51H來實(shí)現(xiàn),其中51H是E鍵的ACSII碼的十六進(jìn)制的表示。如果是E鍵的話,程序?qū)⑼顺龃蜃志毩?xí)程序。如果鍵盤鍵入的既不是ENTER也不是E鍵的話,程序?qū)⒗^續(xù)等待鍵盤的輸入,直到輸入的按鍵為ENTER和E當(dāng)中的一個(gè)為止。</p><p> 3.2.2隨機(jī)字母產(chǎn)生模塊</p><p> 當(dāng)用戶選擇繼續(xù)運(yùn)行程序且進(jìn)入打字練習(xí)界面時(shí),則程
33、序需要首先為用戶輸出一列隨機(jī)的字符序列,這時(shí)程序就需要自動(dòng)的調(diào)用產(chǎn)生隨機(jī)字符序列的程序。程序段如下:</p><p> letters db "qwertyuiopasdfghjklzxcvbnm" </p><p> db "qwertyuiopasdfghjklzxcvbnm"</p><p> db "
34、;qwertyuiopasdfghjklzxcvbnm"</p><p> letters_bak db "qwertyuiopasdfghjklzxcvbnm" </p><p> db "qwertyuiopasdfghjklzxcvbnm" </p><p> db "qwertyuio
35、pasdfghjklzxcvbnm" ;定義待“下落”的字符</p><p> letter_counter db 0 </p><p> begin: clear_screen 01d,01d,23d,78d ;清屏宏調(diào)用 </p><p> Init_game 23d,01d,01h,dl,78d,nexts
36、ign5</p><p> mov ah,02h </p><p> mov bh,00h</p><p> mov dh,01h</p><p> mov dl,01h</p><p><b> int 10h</b></p><p> mov cx,00
37、h </p><p> lea si,letters</p><p> 上述的程序段中,begin實(shí)現(xiàn)了輸出的字符的隨機(jī)顯示,這個(gè)隨機(jī)是我們要事先通過自己隨機(jī)定義一段由26個(gè)字母組成的序列,然后由begin來調(diào)用,從而間接來實(shí)現(xiàn)隨即字母的產(chǎn)生。Begin段利用了INT10,其功能是設(shè)置屏幕顯示方式,靈活的利用INT10豐富的指令功能,可以巧妙的設(shè)計(jì)出想要的程序來。INT10中斷
38、規(guī)定,DH和DL共同控制著字符輸出的位置,其中DH為字符輸出的行標(biāo),DL為字符輸出的列標(biāo),通過改變DH和DL的值,可以改變字符在命令符輸出屏幕上的位置;如果AH=09H時(shí),則AL=字符,BL則是控制著輸出的字符屬性或顏色;計(jì)數(shù)器CX中存放的則是重復(fù)輸出字符的個(gè)數(shù)。</p><p> 3.2.3字母落下模塊</p><p> 程序進(jìn)入打字功能,自動(dòng)落下字母,等待鍵盤輸入字符,以此來判斷輸
39、入者想什么,如果鍵盤輸入與預(yù)期的相符合則程序自動(dòng)執(zhí)行相關(guān)功能。如果輸入字符與落下字符相同,程序執(zhí)行當(dāng)前字母消失和產(chǎn)生下一落下字母的功能,字母落下功能的實(shí)現(xiàn)是通過逐行替換的方法實(shí)現(xiàn)的,字母在當(dāng)前行出現(xiàn)會(huì)有一個(gè)延遲時(shí)間,當(dāng)過了這個(gè)延遲時(shí)間時(shí),程序執(zhí)行當(dāng)前位置清空操作,并在下一行顯示上一行的字母。代碼如下:</p><p> hit: mov ah,02h ; 在光標(biāo)位置顯示字符和屬性</p>
40、<p> mov bh,00h</p><p> mov dh,01h</p><p> mov dl,present_position</p><p><b> int 10h</b></p><p> mov al,[di] ; 出現(xiàn)下一個(gè)新字母的數(shù)法</p><p>
41、<b> add al,7</b></p><p> cmp al,7ah</p><p> ja convey_letter</p><p> mov ah,0ah</p><p> mov bh,00h</p><p> mov cx,01h</p><p>
42、;<b> int 10h</b></p><p> mov [di],al</p><p> add letter_counter,01h</p><p> jmp nextcycle</p><p> convey_letter: </p><p> sub al,7ah<
43、;/p><p> add al,61h</p><p> mov ah,0ah</p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b></p><p> mov [di],al</p&g
44、t;<p> add letter_counter,01h</p><p> jmp nextcycle </p><p> clear_screen 01,01,23,78</p><p> mov ah,02h</p><p> mov bh,00h</p><p> mov dh,11d
45、</p><p> mov dl,20d</p><p><b> int 10h</b></p><p><b> inc dh</b></p><p><b> inc dh</b></p><p> mov ah,02h</p>
46、;<p> mov bh,00h</p><p><b> int 10h</b></p><p> disappear: ;擊中字母后輸出空格</p><p><b> pop cx</b></p><p><b> pop cx<
47、/b></p><p> mov ah,0ah</p><p> mov al," "</p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b></p><p>&l
48、t;b> jmp hit </b></p><p><b> 3.2.4暫停模塊</b></p><p> 如果輸入空格,則程序執(zhí)行暫停功能,暫停功能的實(shí)現(xiàn)是通過以下方法實(shí)現(xiàn)的:當(dāng)從鍵盤輸入空格時(shí),程序收到暫停信號(hào),執(zhí)行跳轉(zhuǎn),跳轉(zhuǎn)到一個(gè)死循環(huán)模塊,就是無限顯示當(dāng)前屏幕,不做其他任何操作,直到鍵盤再次輸入空格時(shí),程序收到暫停結(jié)束指令,跳轉(zhuǎn)回到主
49、程序模塊,繼續(xù)執(zhí)行主模塊的功能。代碼如下:</p><p> pass: pop cx</p><p><b> inc cx</b></p><p> cmp cx,speed</p><p><b> je print</b></p><p> jmp o
50、ut_cycle</p><p> pause: push dx ;宏定義暫停處理</p><p> mov ah,06h</p><p> mov dl,0ffh</p><p><b> int 21h</b></p><p><b> pop dx<
51、;/b></p><p> cmp al," "</p><p><b> jne pause</b></p><p><b> jmp pass</b></p><p> 3.2.5返回主界面模塊</p><p> 如果鍵盤輸入ESC,程
52、序結(jié)束當(dāng)前運(yùn)行,返回到程序的主界面,然后等待主界面中鍵盤的輸入,這又跳回到主界面模塊。相關(guān)代碼包含在3.2.1主界面功能代碼段當(dāng)中。</p><p><b> 4程序調(diào)試</b></p><p> 4.1 運(yùn)行界面分析</p><p> 程序運(yùn)行后的主界面如圖4-1,主界面第一行是歡迎語,第二行為程序制作的日期。接下來是操作說明。<
53、/p><p> 圖4-1 程序主界面</p><p> 當(dāng)用戶按下ENTER鍵時(shí),程序自動(dòng)跳入到圖4-2的界面,字母隨機(jī)落下,用戶便可以開始打字練習(xí)了。練習(xí)只要按照說明來做就可以了。</p><p><b> 圖4-2 打字界面</b></p><p> 當(dāng)用戶按下“E”鍵時(shí),程序回到主界面如圖圖4-1,當(dāng)用戶按下的
54、既不是ENTRY,也不是“E”鍵時(shí),程序仍然保留在主界面,如圖圖4-3。</p><p> 圖4-3 按下非ENTRY、非“E”界面</p><p> 當(dāng)鍵盤輸入字母與屏幕落下字母相同時(shí),字母消失;不相同時(shí),字母沒有消失,直到碰到下面“地面”。</p><p> 打字過程按下空格鍵,則打字練習(xí)暫停,對(duì)其他鍵無反應(yīng),再次按下空格鍵,又恢復(fù)打字練習(xí)。</p&
55、gt;<p> 圖4-4 按space鍵暫停/繼續(xù)</p><p> 4.2 調(diào)試過程及分析</p><p> 開始在網(wǎng)上找到的源程序代碼能夠滿足題目的大多數(shù)要求,但是在主界面按下除ENTRY以外的任何鍵時(shí),程序都會(huì)退出來,在源程序中找到對(duì)應(yīng)的退出語句時(shí),發(fā)現(xiàn)判斷退出的分支語句沒起到作用,后來根據(jù)流程圖,合理地調(diào)整了一下退出語句中的分支結(jié)構(gòu),調(diào)試后,程序能夠?qū)崿F(xiàn)在主界面
56、按下“E”鍵退出打字練習(xí)程序的功能。</p><p> 當(dāng)程序正在運(yùn)行時(shí),如果之前已按下空格鍵暫停,則此時(shí)按下ESC退不出去,必須再次按下空格讓程序開始運(yùn)行才能退出。這是因?yàn)榘聪驴崭矜I時(shí),程序跳轉(zhuǎn)到一個(gè)死循環(huán)模塊,無限顯示當(dāng)前屏幕,直到鍵盤再次輸入空格。</p><p><b> 5心得體會(huì)</b></p><p><b> 5
57、.1 設(shè)計(jì)體會(huì)</b></p><p> 課程設(shè)計(jì)對(duì)我們多數(shù)初學(xué)匯編的學(xué)生來說,確實(shí)是一座高峰。翻越他是需付出努力的。我也是在探索了好久才弄明白一點(diǎn)點(diǎn)皮毛,在此做個(gè)小總結(jié),也許對(duì)自己今后的學(xué)習(xí)有些借鑒作用。在整個(gè)程序的編寫中,調(diào)試占了很大部分的時(shí)間,要想寫好匯編程序,必須認(rèn)真對(duì)待代碼的每一個(gè)細(xì)節(jié)。通過這次實(shí)際動(dòng)手能力的培養(yǎng),我進(jìn)一步熟悉了匯編的結(jié)構(gòu)和使用法,基本達(dá)到了借助工具資料,能獨(dú)立閱讀較長(zhǎng)的程
58、序代碼。我覺得學(xué)習(xí)匯編的一個(gè)較大好處就是可以了解電腦中每一個(gè)字節(jié)數(shù)據(jù)的來龍去脈,我覺得學(xué)習(xí)匯編可以發(fā)揮一下自己的空間想象力。通過這次課程設(shè)計(jì),我也掌握了不少在互聯(lián)網(wǎng)上搜索程序源代碼的方法。</p><p><b> 5.2 系統(tǒng)改進(jìn)</b></p><p> 這次課程設(shè)計(jì),其主題內(nèi)容都以滿足課程實(shí)際的要求,各功能都能相應(yīng)的完成,即寫一個(gè)程序,運(yùn)行可執(zhí)行程序后,出現(xiàn)
59、主界面,按回車鍵出現(xiàn)由26個(gè)字母組成的亂序行,這時(shí)其中任一字母落下,在鍵盤上敲入該字母,如果輸入正確,字母消失;按回車鍵進(jìn)入打字練習(xí);按ESC鍵返回主界面;按空格鍵暫停;按‘E’退出,但是感覺整個(gè)程序界面不夠細(xì)致,不夠人性化,如果自己時(shí)間充裕,相信可以將界面做得更好一些。</p><p><b> 附錄</b></p><p><b> 程序清單:<
60、;/b></p><p> Init_game macro L1,L2,L3,L4,L5,L6</p><p> mov cx,00h</p><p><b> mov dh,L1</b></p><p><b> mov dl,L2</b></p><p>&
61、lt;b> L6:</b></p><p> mov ah,02h ;定義操作數(shù)L6</p><p> mov bh,00h</p><p><b> int 10h</b></p><p><b> push cx</b></p><p&
62、gt; mov ah,0ah</p><p><b> mov al,L3</b></p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b></p><p><b> pop cx&
63、lt;/b></p><p><b> inc cx</b></p><p><b> inc L4</b></p><p><b> cmp cx,L5</b></p><p><b> jne L6</b></p><
64、p><b> endm</b></p><p> clear_screen macro L1,L2,L3,L4 ;清屏宏定義</p><p> mov ah,06h</p><p> mov al,00h</p><p> mov bh,07h</p><p><b>
65、 mov ch,L1</b></p><p><b> mov cl,L2</b></p><p><b> mov dh,L3</b></p><p><b> mov dl,L4</b></p><p><b> int 10h</b&g
66、t;</p><p> mov ah,02h</p><p> mov bh,00h</p><p> mov dh,00h</p><p> mov dl,00h</p><p><b> int 10h</b></p><p><b> endm&
67、lt;/b></p><p> menu macro L1,L2,L3 ;菜單顯示宏定義</p><p> mov ah,02h</p><p> mov bh,00h</p><p><b> mov dh,L1</b></p><p><b> mov dl,L2&
68、lt;/b></p><p><b> int 10h</b></p><p> mov ah,09h</p><p><b> lea dx,L3</b></p><p><b> int 21h</b></p><p><b>
69、; endm</b></p><p> data segment ;使用數(shù)據(jù)段存儲(chǔ)字符</p><p> ZK db "WELCOME TO PLAY$"</p><p> no db "date:2013/01/16$"</p><p> meg d
70、b "press Enter key to continue.......$"</p><p> meg1 db "when a letter is dropping,please hit it!$"</p><p> meg2 db "press space key to pause!$"</p><p&
71、gt; meg3 db "press ESC key to return main interface!$"</p><p> meg4 db "press letter 'E' to exit!$"</p><p> speed dw 600d</p><p> letters db "qw
72、ertyuiopasdfghjklzxcvbnm"</p><p> db "qwertyuiopasdfghjklzxcvbnm"</p><p> db "qwertyuiopasdfghjklzxcvbnm"</p><p> letters_bak db "qwertyuiopasdfghjk
73、lzxcvbnm" </p><p> db "qwertyuiopasdfghjklzxcvbnm"</p><p> db "qwertyuiopasdfghjklzxcvbnm";定義待“下落”的字符</p><p> letter_counter db 0</p><p
74、> life_flag db 78 dup(0)</p><p> position_flag db 78 dup(0)</p><p> present_position db 1</p><p><b> data ends</b></p><p> stack segment para stack
75、'stack'</p><p> db 64 dup(0)</p><p> stack ends</p><p> code segment</p><p> main proc far</p><p> assume cs:code,ds:data,ss:stack</p>
76、<p><b> start: </b></p><p> mov ax,data ;字符移動(dòng)段</p><p><b> mov ds,ax</b></p><p> mov letter_counter,00h </p><p> mov presen
77、t_position,1</p><p> lea si,position_flag</p><p> mov ah,00h</p><p> mov cx,00h</p><p> init_postion_flag: ;字符位置</p><p> mov [si],ah</p>&
78、lt;p><b> inc si</b></p><p><b> inc cx</b></p><p> cmp cx,78d</p><p> jne init_postion_flag ;跳轉(zhuǎn)字符位置</p><p> lea di,letters</p>&
79、lt;p> lea si,letters_bak</p><p> mov cx,00h</p><p> init_letters: ;更換字符</p><p> mov ah,[si]</p><p> mov [di],ah</p><p><b> inc s
80、i</b></p><p><b> inc di</b></p><p><b> inc cx</b></p><p> cmp cx,78d</p><p> jne init_letters</p><p> mov ah,00h</p&g
81、t;<p> lea si,life_flag</p><p> mov cx,00h</p><p> init_life_flag:</p><p> mov [si],ah</p><p><b> inc si</b></p><p><b> inc
82、cx</b></p><p> cmp cx,78d</p><p> jne init_life_flag</p><p> mov cx,00h</p><p> mov ah,01h</p><p> or ch,00010000b</p><p><b>
83、; int 10h</b></p><p> clear_screen 00d,00d,24d,79d ;清屏宏定義 </p><p> Init_game 00d,00d,0ah,dl,80d,nextsign1</p><p> Init_game 24d,00d,0ah,dl,80d,nextsign2</p>
84、<p> Init_game 00d,00d,0ah,dh,25d,nextsign3</p><p> Init_game 00d,79d,0ah,dh,25d,nextsign4</p><p> menu 05d,15d,ZK ;菜單信息的宏調(diào)用</p><p> menu 07h,15d,no<
85、;/p><p> menu 09d,15d,meg</p><p> menu 11d,15d,meg1</p><p> menu 13d,15d,meg2</p><p> menu 15d,15d,meg3</p><p> menu 17d,15d,meg4</p><p><
86、;b> put:</b></p><p> mov ah,02h ;設(shè)置光標(biāo)位置</p><p> mov bh,00h</p><p> mov dh,22d</p><p> mov dl,33d</p><p><b> int 10h</
87、b></p><p> mov ah,01h ;從鍵盤輸入任意字符</p><p><b> int 21h</b></p><p> cmp al,0dh</p><p> je speed3 ;輸入為ENTRY進(jìn)入打字練習(xí)</p>
88、<p> cmp al,45h</p><p> je exit ;輸入為“E”退出程序</p><p><b> exit:</b></p><p> mov ah,4ch</p><p><b> int 21h</b></p>
89、<p><b> speed3: </b></p><p> mov ax,speed+12</p><p> mov speed,ax</p><p><b> jmp begin</b></p><p><b> begin:</b></p&g
90、t;<p> clear_screen 01d,01d,23d,78d ;清屏宏調(diào)用</p><p> Init_game 23d,01d,01h,dl,78d,nextsign5</p><p> mov ah,02h</p><p> mov bh,00h</p><p> mov dh,01h</p>
91、<p> mov dl,01h</p><p><b> int 10h</b></p><p> mov cx,00h</p><p> lea si,letters</p><p> nextletter:</p><p> mov ah,02h
92、 ;顯示字母</p><p> mov dl,[si]</p><p><b> int 21h</b></p><p><b> inc si</b></p><p><b> inc cx</b></p><p> cmp cx,78
93、d</p><p> je nextcycle</p><p> jmp nextletter</p><p> from_front:</p><p> sub present_position,78d</p><p> jmp gobackto_si</p><p> find_
94、zero:</p><p> cmp letter_counter,78d</p><p> je recycle</p><p> cmp present_position,78d</p><p> je from_one</p><p> mov ah,00h</p><p>&l
95、t;b> nextsi:</b></p><p> add present_position,01h</p><p><b> inc si</b></p><p> cmp [si],ah</p><p> je gobackto_di</p><p> cmp p
96、resent_position,78d</p><p> je from_one</p><p> jmp nextsi</p><p><b> from_one:</b></p><p> mov present_position,01h</p><p> jmp gobackto_
97、si</p><p> recycle: ;字符循環(huán)</p><p> mov letter_counter,00h</p><p> mov present_position,01d</p><p> lea si,position_flag</p><p> m
98、ov cx,00h</p><p> mov ah,00h</p><p><b> clearsi: </b></p><p> mov [si],ah</p><p><b> inc cx</b></p><p> cmp cx,78d</p>
99、<p> je nextcycle</p><p><b> inc si</b></p><p> jmp clearsi</p><p> nextcycle:</p><p> lea di,letters</p><p> lea si,position_flag&l
100、t;/p><p> add present_position,31d</p><p> cmp present_position,78</p><p> ja from_front</p><p> gobackto_si:</p><p> add si,word ptr present_position<
101、;/p><p><b> dec si</b></p><p> mov ah,[si]</p><p> cmp ah,01h</p><p> je find_zero</p><p> gobackto_di:</p><p> mov ah,01h</
102、p><p> mov [si],ah</p><p> add di,word ptr present_position</p><p><b> dec di</b></p><p> mov dl,present_position</p><p> mov ah,02h</p>
103、;<p> mov bh,00h</p><p> mov dh,01h</p><p><b> int 10h</b></p><p> mov cx,00h</p><p><b> nextrow:</b></p><p><b>
104、 push cx</b></p><p> mov cx,00h</p><p> out_cycle: ; 延遲</p><p><b> push cx</b></p><p> mov cx,00h</p><p><b> in_c
105、ycle:</b></p><p> add cx,01h</p><p> cmp cx,1000</p><p> jne in_cycle</p><p><b> push dx</b></p><p> mov ah,06h ;從鍵盤輸入字符</p&g
106、t;<p> mov dl,0ffh</p><p><b> int 21h</b></p><p><b> pop dx</b></p><p><b> jz pass</b></p><p> cmp al,1bh ;如果鍵入ESC,則
107、返回主菜單</p><p> je to_start1</p><p> cmp al," " ;如果鍵入SPACE,則游戲暫停</p><p><b> je pause</b></p><p> cmp al,[di] ;輸入字母正確!則字母消失</p><
108、;p> je disappear</p><p><b> pass: </b></p><p><b> pop cx</b></p><p><b> inc cx</b></p><p> cmp cx,speed</p><p&g
109、t;<b> je print</b></p><p> jmp out_cycle</p><p><b> pause: </b></p><p> push dx ;宏定義暫停處理</p><p> mov ah,06h</p><p> mo
110、v dl,0ffh</p><p><b> int 21h</b></p><p><b> pop dx</b></p><p> cmp al," "</p><p><b> jne pause</b></p><p>
111、;<b> jmp pass</b></p><p> to_start1: ;返回主菜單</p><p><b> jmp start</b></p><p> print: ;顯示字符</p><p> mov ah,0ah ;
112、在當(dāng)前光標(biāo)位置寫空格</p><p> mov al," "</p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b></p><p><b> inc dh</b><
113、/p><p> mov ah,02h ;改變光標(biāo)位置</p><p> mov bh,00h</p><p><b> int 10h</b></p><p> mov ah,0ah ;在當(dāng)前光標(biāo)位置寫字母</p><p> mov al,[di]</p>
114、<p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b></p><p><b> pop cx</b></p><p><b> inc cx</b></p><p>
115、 cmp cx,21d</p><p> je print_next_letter</p><p> jmp nextrow ;下一行</p><p> disappear: ;擊中字母后輸出空格</p><p><b> pop cx</b></p><p
116、><b> pop cx</b></p><p> mov ah,0ah</p><p> mov al," "</p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b&g
117、t;</p><p><b> jmp hit</b></p><p> print_next_letter: ;下一字符“下落”</p><p> lea si,life_flag</p><p> add si,word ptr present_position</p><p&
118、gt;<b> dec si</b></p><p> mov ah,0ah</p><p> mov al," "</p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b>
119、;</p><p><b> inc dh</b></p><p> mov ah,02h</p><p> mov bh,00h</p><p><b> int 10h</b></p><p> mov ah,0ah</p><p>
120、mov al," "</p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b></p><p><b> mov ah,1</b></p><p> mov [si],ah&
121、lt;/p><p> hit: ; 在光標(biāo)位置顯示字符和屬性</p><p> mov ah,02h</p><p> mov bh,00h</p><p> mov dh,01h</p><p> mov dl,present_position</p><p><
122、;b> int 10h</b></p><p> mov al,[di] ; 出現(xiàn)下一個(gè)新字母的數(shù)法</p><p><b> add al,7</b></p><p> cmp al,7ah</p><p> ja convey_letter</p><p> m
123、ov ah,0ah</p><p> mov bh,00h</p><p> mov cx,01h</p><p><b> int 10h</b></p><p> mov [di],al</p><p> add letter_counter,01h</p><p
124、> jmp nextcycle</p><p> convey_letter:</p><p> sub al,7ah</p><p> add al,61h</p><p> mov ah,0ah</p><p> mov bh,00h</p><p> mov cx,01
125、h</p><p><b> int 10h</b></p><p> mov [di],al</p><p> add letter_counter,01h</p><p> jmp nextcycle</p><p> clear_screen 01,01,23,78</p&g
126、t;<p> mov ah,02h</p><p> mov bh,00h</p><p> mov dh,11d</p><p> mov dl,20d</p><p><b> int 10h</b></p><p><b> inc dh</b>
127、;</p><p><b> inc dh</b></p><p> mov ah,02h</p><p> mov bh,00h</p><p><b> int 10h</b></p><p><b> notkey:</b></p&
128、gt;<p> mov ah,07h</p><p><b> int 21h</b></p><p> cmp al,0dh</p><p> je to_start</p><p> cmp al,1bh</p><p><b> je over</b
129、></p><p> jmp notkey</p><p><b> to_start:</b></p><p> clear_screen 00,00,24,79</p><p><b> jmp start</b></p><p><b> ov
130、er: </b></p><p> clear_screen 01,01,23,78</p><p> mov ah,02h</p><p> mov bh,00h</p><p> mov dh,11d</p><p> mov dl,15h</p><p><
131、b> int 10h</b></p><p> mov ah,02h</p><p> mov bh,00h</p><p> mov dh,13d</p><p> mov dl,15h</p><p><b> int 10h</b></p><
132、;p> mov ah,07h</p><p><b> int 21h</b></p><p> mov ah,07h</p><p><b> int 21h</b></p><p> clear_screen 00,00,24,79</p><p> m
133、ov ax,4c00h</p><p><b> int 21h</b></p><p><b> main endp</b></p><p><b> code ends</b></p><p><b> end start</b></p&
134、gt;<p><b> 參考文獻(xiàn)</b></p><p> [1]彭虎.微機(jī)原理與接口技術(shù).(第三版)北京:電子工業(yè)出版社,2011</p><p> [2]王爽.匯編語言.清華大學(xué)出版社,2008</p><p> [3]沈美明.IBM—PC匯編語言程序設(shè)計(jì).清華大學(xué)出版社,2008</p><p&g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)原理課程設(shè)計(jì)--打字計(jì)時(shí)練習(xí)
- 微機(jī)原理課程設(shè)計(jì)----打字練習(xí)程序
- 微機(jī)原理課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì).rar
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 2017微機(jī)原理課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì).rar
- 微機(jī)原理課程設(shè)計(jì).rar
- 微機(jī)原理課程設(shè)計(jì).rar
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 《微機(jī)原理》課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)課程設(shè)計(jì)----微機(jī)內(nèi)存擴(kuò)充卡
- 微機(jī)原理課程設(shè)計(jì)課程設(shè)計(jì)----微機(jī)內(nèi)存擴(kuò)充卡
- 微機(jī)原理串口通信課程設(shè)計(jì)
- 微機(jī)原理電子秒表課程設(shè)計(jì)
- vb課程設(shè)計(jì)--打字練習(xí)應(yīng)用程序
- 微機(jī)原理課程設(shè)計(jì)--圖形畫法
- 模擬電梯微機(jī)原理課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論