版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 匯編語言課程實習(xí)報告</p><p> 實習(xí)題目 打字游戲</p><p> 學(xué)生姓名 </p><p> 班級 計科1093班 </p><p> 院系 信息學(xué)院</p><p> 指導(dǎo)
2、老師 </p><p> 提交時間 </p><p><b> 成績</b></p><p><b> 目 錄</b></p><p> 1 課程實習(xí)任務(wù)……………………………………………………………………… 1</p><p
3、> 2 基本知識…………………………………………………………………………….1</p><p> 2.1 匯編語言程序結(jié)構(gòu)……………………………………………………………2</p><p> 2.2 關(guān)鍵指令分析…………………………………………………………………2</p><p> 2.3 匯編語言上機(jī)過程……………………………………………………
4、………3</p><p> 3 總體分析…………………………………………………………………………….3</p><p> 3.1 程序功能分析…………………………………………………………………3</p><p> 3.2 主程序流程圖…………………………………………………………………4</p><p> 4 詳細(xì)設(shè)計……………
5、……………………………………………………………….5</p><p> 4.1 菜單模塊………………………………………………………………………5</p><p> 4.2 輸入模塊………………………………………………………………………5</p><p> 4.3 游戲模塊………………………………………………………………………6</p>&l
6、t;p> 4.4 游戲結(jié)束模塊…………………………………………………………………6</p><p> 4.5 速度設(shè)置模塊………………………………………………………………....6</p><p> 5 代碼實現(xiàn)…………………………………………………………………………….7</p><p> 5.1 主程序代碼………………………………………………
7、……………………..7</p><p> 5.2~5. 11部分子程序代碼…………………………………………………………..8</p><p> 5.12 延時子程序代碼……………………………………………………………....14</p><p> 5.13 字母下降子程序……………………………………………………………....15</p><p
8、> 5.14產(chǎn)生新字母子程序代碼……………………………………………………….16</p><p> 5.17游戲邏輯子程序代碼………………………………………………………….17</p><p> 5.18其他各子程序模塊…………………………………………………………….18</p><p> 6 調(diào)試過程……………………………………………………………
9、……………...19</p><p> 7 使用說明…………………………………………………………………………...20</p><p> 8 總結(jié)………………………………………………………………………………...20</p><p> 9 參考文獻(xiàn)………………………………………………………………………… ..20</p><p&
10、gt;<b> 課程實習(xí)任務(wù)</b></p><p><b> 設(shè)計題目:打字游戲</b></p><p><b> 基本功能:</b></p><p> 1.在屏幕上顯示菜單界面;</p><p> 2.按回車鍵出現(xiàn)由26個字母組成的亂序行;</p>
11、<p> 3.其中任一字母落下,在鍵盤上敲入該字母,如果輸入正確,字母消失;</p><p> 4.按空格鍵停止,按ESC鍵返回主菜單,按q鍵退出程序。</p><p> 用匯編語言編寫,完成設(shè)計報告。</p><p><b> 基本知識</b></p><p> 本次設(shè)計用的匯編語言基本知識如下:&
12、lt;/p><p> 2.1匯編語言程序結(jié)構(gòu)</p><p><b> 主體程序結(jié)構(gòu)框架</b></p><p> data segment ……</p><p> data ends</p><p> code segment </p><
13、p> assume cs:code, ds:data, es:extra</p><p><b> start: </b></p><p> mov ax, data</p><p> mov ds, ax ……</p><p><b> call ****</
14、b></p><p><b> ……</b></p><p> mov ax, 4c00h</p><p> int 21h </p><p> code ends</p><p> end start</p><p><b
15、> 子程序結(jié)構(gòu)框架</b></p><p> Name proc far</p><p><b> ……</b></p><p><b> Name endp</b></p><p><b> 宏定義結(jié)構(gòu)框架</b></p><p
16、> Name macro <參數(shù)> </p><p><b> ……</b></p><p><b> Endm</b></p><p><b> 關(guān)鍵指令的分析</b></p><p> 本次設(shè)計主要用到算術(shù)指令,邏輯指令,控制轉(zhuǎn)移指令等</
17、p><p> 如loop指令,用于循環(huán)執(zhí)行某條或者某塊指令集直到默認(rèn)的參數(shù)(CX)為零,</p><p> 退出循環(huán),執(zhí)行l(wèi)oop循環(huán)下的下一條指令。</p><p> Jmp無條件跳轉(zhuǎn)指令,跳轉(zhuǎn)到一個指定的標(biāo)號位置。</p><p> 條件轉(zhuǎn)移指令JZ / JNZ 、 JE / JNE等等,用于判斷相應(yīng)的標(biāo)志位是否滿足條件,若滿足則跳轉(zhuǎn)
18、,不滿足就繼續(xù)往下一條指令執(zhí)行。 </p><p> CMP比較指令,用于比較兩個數(shù)的大小,設(shè)置標(biāo)志位,通常和條件跳轉(zhuǎn)指令關(guān)聯(lián)用。 </p><p> CALL 調(diào)用指令,用于調(diào)用子程序</p><p> Int中斷指令,用于中斷操作</p><p> 此外,還有其他的一些指令,比如說加法add指令,減法指令等,本次設(shè)計用到了大量的
19、指令。</p><p> 2.3匯編語言上機(jī)過程</p><p><b> a:建立匯編源程序</b></p><p> b:編譯目標(biāo)文件(即:編譯為.obj .lst .crf文件)</p><p> c:編譯不通過,重新修改</p><p> d:連接為可執(zhí)行文件</p>
20、<p> e:運(yùn)行編譯好的可執(zhí)行文件</p><p><b> f:用調(diào)試工具調(diào)試</b></p><p><b> 總體分析</b></p><p><b> 3.1程序功能分析</b></p><p> 本次設(shè)計的是打字游戲,因此,在屏幕落下字母,輸
21、入字母,并且判斷輸入字母和落下來的字母是否相同,如果相同,則字母消失,否則字母下落到屏幕底部消失。</p><p><b> 其具體功能如下:</b></p><p> 1.按回車鍵進(jìn)入游戲,ESC鍵退出</p><p> 2.進(jìn)入速度選擇界面,h鍵高速,l鍵低速,s鍵重新設(shè)置速度,其他鍵默認(rèn)為普通速度其他鍵(包括回車鍵)</p&g
22、t;<p> 3.若進(jìn)入速度設(shè)置界面,輸入1-999的數(shù),表示速度為普通速度的百分之幾</p><p> 4.游戲中按esc退出,同時顯示游戲總共出現(xiàn)字符數(shù),所得分?jǐn)?shù),同時提示游戲是否重新開始,y返回主界面,n退出</p><p> 5.游戲過程中按space鍵暫停,再次按space鍵繼續(xù)進(jìn)行游戲</p><p> 3.2 主程序流程圖<
23、;/p><p><b> 詳細(xì)設(shè)計</b></p><p><b> 4.1菜單模塊</b></p><p> 打開軟件,進(jìn)入的是菜單界面模塊,如上圖,有兩種選擇,按enter鍵進(jìn)入游戲,按ESC鍵退出進(jìn)入程序。</p><p> 4.2 速度選擇模塊</p><p>
24、 選擇enter進(jìn)入游戲,那么首先選擇設(shè)置游戲的速度,有三種可供選擇,還可以設(shè)置適合自己的速度。</p><p><b> 4.3 游戲模塊</b></p><p> 進(jìn)入游戲,可以開始游戲,一次落下一個字母,當(dāng)鍵入一個字母正確時,字母消失,不然待字母落到底端,顯示字母。字母的不同的位置有不同的顯示顏色,在前1/3為綠色,在中間的1/3為紅色,在最后1/3為紅色
25、。在游戲過程中,可以按esc鍵退出游戲,按space鍵暫停游戲,再次按space的時候繼續(xù)游戲。</p><p><b> 4.4游戲結(jié)束模塊</b></p><p> 要退出游戲時,會顯示一共落下的字母數(shù),和玩家擊中的字母數(shù),還提示信息,是否返回主界面,如果鍵入y,則返回,n則直接退出程序</p><p> 4.5設(shè)置游戲速度模塊<
26、;/p><p> 在這里,你可以設(shè)置適合自己的速度,如圖輸入了789,則以普通速度的8倍進(jìn)行游戲。</p><p><b> 代碼實現(xiàn)</b></p><p> 5.1 主程序代碼</p><p> mov ax, data</p><p> mov ds, ax</p>
27、<p> mov es, ax</p><p> RESTART: </p><p> call Init </p><p> cmp ax,0 </p><p> je Lexit ;如果退出</p><p> call SpeedChoose </p>&l
28、t;p> call SetInterface </p><p><b> LgetTime:</b></p><p> call PlayGames</p><p> cmp al,0;是否有結(jié)束標(biāo)志</p><p> jne LgetTime </p><p> L
29、endGame: </p><p> call GameOver </p><p> CALL IsRestart</p><p> cmp al,0 </p><p> je Lexit ;如果退出</p><p> mov bx,RESTART</p><p> jmp b
30、x;重新開始</p><p><b> Lexit: </b></p><p> mov ax, 4c00h </p><p> int 21h </p><p> 5.2輸出單個數(shù)字子程序代碼</p><p> outnum proc near ;入口參數(shù):ax,傳遞ax
31、的值給dx的低八位dl以便輸出</p><p><b> mov dx,ax</b></p><p><b> or dl,30h</b></p><p> mov ah,02h</p><p><b> int 21h</b></p><p>
32、<b> ret</b></p><p> outnum endp</p><p> 5.3;計算數(shù)字位數(shù)子程序</p><p> CountNum proc near ;入口參數(shù):ax,傳遞要輸出的分?jǐn)?shù)</p><p> mov cx,1;計算輸出位數(shù)</p><p><
33、b> cmp ax,10</b></p><p> jl LendCount</p><p><b> inc cx</b></p><p> cmp ax,100</p><p> jl LendCount</p><p><b> inc cx<
34、;/b></p><p> cmp ax,1000</p><p> jl LendCount</p><p><b> inc cx </b></p><p> cmp ax,10000</p><p> jl LendCount</p><p>
35、inc cx ;保存在cx</p><p> Lendcount:</p><p><b> ret </b></p><p> CountNum endp ;出口參數(shù):cx,保存數(shù)字位數(shù)</p><p> 5.4輸出數(shù)字子程序</p><p> CoutNum pro
36、c near ;入口參數(shù):cx,call CountNum后傳遞數(shù)字位數(shù)</p><p><b> push ax</b></p><p> call CountNum ;計算數(shù)字位數(shù)</p><p> pop ax </p><p> cmp cx,5 ;5位數(shù)字</p><
37、;p> jl Lsmlth1 </p><p> mov bx,10000</p><p><b> xor dx,dx</b></p><p><b> div bx</b></p><p><b> push dx</b></p><p&
38、gt; call outnum;顯示萬位數(shù)字</p><p><b> pop ax</b></p><p> Lsmlth1:;千位數(shù)字</p><p> cmp cx,4 ;4位數(shù)字</p><p> jl Lsmallhun1</p><p><b> xor dx,d
39、x</b></p><p> mov bx,1000</p><p><b> div bx</b></p><p> push dx ;余數(shù)</p><p> call outnum ;顯示千位數(shù)字</p><p><b> pop ax</b><
40、;/p><p> Lsmallhun1: ;顯示百位數(shù)字</p><p> ; cmp ax,100 </p><p> cmp cx,3 ;3位數(shù)字</p><p> jl Lsmallten1</p><p> mov bl,100</p><p><b> div
41、bl</b></p><p><b> push ax</b></p><p> call outnum ;顯示百位</p><p><b> pop ax</b></p><p><b> mov al,ah</b></p><p>
42、; xor ah,ah ;al和ax中放的數(shù)一樣大小</p><p> Lsmallten1: ;顯示十位數(shù)字</p><p> cmp cx,2 ;3位數(shù)字</p><p> jl Lsmallone1</p><p><b> mov bl,10</b></p><p><
43、b> div bl</b></p><p><b> push ax</b></p><p> call outnum ;顯示十位</p><p><b> pop ax</b></p><p><b> mov al,ah</b></p>
44、;<p> xor ah,ah ;al和ax中放的數(shù)一樣大小 </p><p> Lsmallone1:;顯示個位數(shù)字</p><p> call outnum </p><p><b> ret</b></p><p> CoutNum endp </p><p>
45、;<b> 5.5游戲結(jié)束模塊</b></p><p> GameOver proc near ; ;游戲結(jié)束界面設(shè)置和分?jǐn)?shù)顯示</p><p> clear_screen 0,0,24,79,10011111b ;藍(lán)色背景白色前景界面 </p><p> ;--------------------------總共字符數(shù),tota
46、l</p><p> menu 07,20,score_msg1 </p><p> mov ax,total</p><p> call CountNum ;計算數(shù)字位數(shù),出口參數(shù)在cx中</p><p> mov bl,52 ;</p><p> add bl,cl ;計算數(shù)字輸出的列坐標(biāo)后面緊
47、跟chars輸出</p><p><b> push bx</b></p><p> clear_screen 07,52,07,bl,10011100b ;分?jǐn)?shù)處顏色為紅色</p><p> curse 07,52</p><p> mov ax,total </p><p> cal
48、l CoutNum ;輸出數(shù)字</p><p><b> pop bx</b></p><p> inc bl </p><p> menu 07,bl,score_msg2 ;用到上面的bl </p><p> ;------------------score ;擊中的字符數(shù)<
49、;/p><p> menu 09,20,score_msg3 </p><p> mov ax,score</p><p> call CountNum ;計算數(shù)字位數(shù),返回值在cx中 </p><p><b> mov bl,33</b></p><p> add bl,cl ;列坐標(biāo)后面
50、緊跟分?jǐn)?shù)score的輸出</p><p><b> push bx</b></p><p> clear_screen 09,33,09,bl,10011100b ;分?jǐn)?shù)處顏色為紅色</p><p> curse 09,33</p><p> mov ax,score</p><p>
51、call CoutNum ;輸出數(shù)字</p><p><b> pop bx </b></p><p><b> inc bl </b></p><p> menu 09,bl,score_msg2 </p><p> ;------------------</p>
52、<p> call CountNum ;計算數(shù)字位數(shù),返回值在cx中 </p><p><b> mov bl,53</b></p><p> add bl,cl ;列坐標(biāo)</p><p><b> push bx</b></p><p> clear_screen 11,53,
53、11,bl,10011100b ;分?jǐn)?shù)處顏色為紅色</p><p><b> pop bx </b></p><p><b> inc bl </b></p><p> menu 12,20,restart_msg ;顯示是否重新開始</p><p> menu 14,20,restar
54、t_msg1</p><p> curse 14,48</p><p> Legame: </p><p> ret </p><p> GameOver endp ;</p><p> 5.6返回主菜單模塊</p><p> IsRestart proc nea
55、r;判斷程序是否繼續(xù)</p><p> recin: ;重新輸入</p><p> curse 14,51 </p><p> mov ah,02h</p><p> mov dl,' '</p><p><b> int 21h </b></p><
56、p> curse 14,47</p><p> lea dx,char_yn</p><p> mov ah,0ah</p><p> int 21h </p><p> mov al,char_yn[2]</p><p> or al,20h</p><p> cm
57、p al,'y'</p><p><b> jne isno</b></p><p><b> mov al,1</b></p><p> jmp endre </p><p><b> isno: </b></p><
58、p> cmp al,'n' </p><p><b> jne recin</b></p><p><b> xor al,al</b></p><p><b> endre:</b></p><p><b> ret </b
59、></p><p> isrestart endp ;出口參數(shù):al,傳遞值在主程序是否退出,0為退出</p><p><b> 5.7輸入速度模塊</b></p><p> CinNum proc near </p><p><b> LreCin:</b></p>
60、<p> curse 13,27 </p><p><b> ;清除輸入垃圾值</b></p><p><b> mov cx,3</b></p><p> mov ah,02h</p><p> Lcout: mov dl,' '
61、 輸入速度設(shè)子程序-》</p><p><b> int 21h</b></p><p> loop Lcout </p><p><b> ;輸入字符串</b></p><p> curse 13,27 </p><p> lea dx,numch
62、ar</p><p> mov ah,0ah</p><p> int 21h </p><p> xor cx,cx </p><p> mov cl,numchar[1] ;輸入數(shù)字個數(shù)</p><p> lea si,numchar[2] ;輸入的最高位數(shù)字的偏移地址</p><
63、p> xor ax,ax ;輸入數(shù)字大小</p><p> mov bl,10 ;乘10再加數(shù)</p><p> L11: ;判斷輸入是否合法</p><p> mov dl,[si] </p><p> cmp dl,'0'</p><p> jl LreCin&l
64、t;/p><p> cmp dl,'9'</p><p> jg LreCin </p><p><b> ;乘10再加數(shù)</b></p><p><b> mul bl </b></p><p> sub dl,'0'</p
65、><p> xor dh,dh </p><p> add ax,dx ;加上新數(shù)</p><p><b> inc si</b></p><p><b> loop L11</b></p><p><b> cmp ax,0</b><
66、;/p><p><b> je LreCin</b></p><p> mov speednum,ax;速度值 </p><p><b> ret </b></p><p> Cinnum endp </p><p> 5.8設(shè)置速度與其界面模塊</p>
67、<p> SetSpeed proc near</p><p> clear_screen 0,0,24,79,10011111B ;藍(lán)色背景白色前景界面</p><p> menu 9,20,set_msg1</p><p> menu 11,20,set_msg2</p><p> menu 13,20,set_m
68、sg3</p><p> menu 13,30,set_msg4</p><p> call CinNum ;輸入數(shù)字</p><p><b> ret </b></p><p> SetSpeed endp </p><p> 5.9設(shè)置游戲界面模塊</p>
69、<p> SetInterface proc near </p><p> clear_screen 0,0,0,79,11111101b;分?jǐn)?shù)為暗紅色</p><p> clear_screen 1,0,8,79,11111010b ;上1/3為綠色</p><p> clear_screen 9,0,16,79,11111001b ;上1/3
70、為黃色</p><p> clear_screen 17,0,24,79,11111100b ;下1/3為紅色 </p><p> menu 0,65,goal_msg ;顯示分?jǐn)?shù)字符</p><p><b> ret</b></p><p> SetInterface endp </p><
71、p> 5.10選擇速度界面</p><p> SpeedChoose proc near</p><p> clear_screen 0d,00d,24d,79d,10011111b </p><p> menu 07,18,speed_msg1</p><p> menu 09,24,speed_msg2</p>
72、;<p> menu 11,24,speed_msg3</p><p> menu 13,24,speed_msg4</p><p> menu 15,24,speed_msg5</p><p> curse 07,46 </p><p> mov ispeed,1 ;默認(rèn)普通速度 </p><p&
73、gt; 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><p> cmp al,'s'</p><p> jne L
74、nexts</p><p> mov bset,1</p><p> call Setspeed ;設(shè)置速度</p><p> jmp LendChoose</p><p> Lnexts: cmp al,'h'</p><p> jne LisSlow</p><p&g
75、t; mov ispeed,2</p><p> jmp LendChoose </p><p> LisSlow:cmp al,'l' </p><p> jne LendChoose </p><p> mov ispeed,0 </p><p> LendChoose: re
76、t </p><p> SpeedChoose endp</p><p> 5.11初始化界面模塊</p><p> Init proc near</p><p> mov letter_y,1 ;初始化y坐標(biāo)</p><p> mov letter_x,0 ;初始化x坐標(biāo) </p>
77、<p> mov score,0 ;初始化分?jǐn)?shù),總字符數(shù) </p><p> mov total,0 ;,總字符數(shù)</p><p> mov bset,0 ;默認(rèn)沒有設(shè)置速度</p><p> mov blife,0 ;生命置空</p><p> mov ispeed,1 ;速度置為普通 </p>
78、<p> clear_screen 0d,00d,24d,79d,10011111b;主菜單界面為藍(lán)色背景,白色前景 </p><p> menu 05,18,menu0 ;菜單信息的宏調(diào)用 </p><p> menu 08,25,menu1 </p><p> menu 10,25,menu3 </p><p>
79、 menu 13,18,menu40</p><p> menu 23,48,designers</p><p> curse 12,42 </p><p> choose: ;輸入是否進(jìn)入游戲</p><p> mov bx,0; </p><p> mov ah,07h</p>
80、<p><b> int 21h</b></p><p> cmp al,0dh ;是否進(jìn)入游戲 </p><p> jne sec_judge</p><p><b> inc bx</b></p><p> cmp bx,1 ;如果進(jìn)入游戲不用判斷是否退出</p
81、><p><b> jz lendi</b></p><p> sec_judge: </p><p> cmp al,27;不進(jìn)入游戲,是否退出</p><p><b> je lendi</b></p><p> jmp choose;不允許非法輸入</p&g
82、t;<p><b> Lendi:</b></p><p> push bx;將bx的值給ax,便于主程序判斷是否進(jìn)入游戲 </p><p> pop ax </p><p><b> ret</b></p><p> Init endp </p&g
83、t;<p> 5.12延時子程序模塊</p><p> Delay proc near ;延時子程序 </p><p> pushReg ;速度比例越高,延時越小(延時=普通延時/比例)</p><p> cmp bset,0 </p><p> je Lnotset ;沒有設(shè)置速度</p><
84、p><b> xor dx,dx</b></p><p> mov ax,16000 ;</p><p> mov bx,speednum ;除以比例</p><p><b> div bx </b></p><p> ;乘100系數(shù)放內(nèi)層循環(huán),防止ax越界</p>
85、<p> mov cx,ax ;-------------------------->(16000/比例)*10*1000,16000為普通速度值</p><p><b> jmp L1</b></p><p> Lnotset: </p><p> mov cx,6000 ;快速
86、 </p><p> cmp ispeed,2 ;選擇快速 6000*10*1000 </p><p><b> je L1 </b></p><p> add cx,10000 ;普通 (10000+6000)*10)*1000</p><p> cmp
87、ispeed,1</p><p><b> je L1 </b></p><p> add cx,20000 ;慢速 (20000+6000)*10*1000</p><p><b> L1: </b></p><p> ;--------------第一層------------
88、---- </p><p> mov ax,cx ;用ax先存放cx的值,第一層</p><p> ;===========================================</p><p> mov cx,10 ;第二層</p><p> cmp bset,0</p><p> je L
89、12 ;沒有設(shè)置速度的情況下</p><p> add cx,990 ;相當(dāng)于從10 *100到了1000</p><p> L12: push cx ;先把第二層的cx壓棧 </p><p> ;*****************************************************</p><p>
90、 mov cx,1000 ;第三層,不設(shè)置速度的情況下循環(huán)一萬次,</p><p> Ldelay: nop </p><p> loop Ldelay ;第三層循環(huán)結(jié)束</p><p> ;****************************************************</p><p> pop cx ;
91、第二層循環(huán)繼續(xù)</p><p><b> loop L12 </b></p><p> ;============================================ </p><p> mov cx,ax ;恢復(fù)第一層循環(huán)的cx </p><p> loop L1 ;第
92、一層循</p><p> ;-------------------------------------- </p><p><b> popReg</b></p><p><b> ret </b></p><p> Delay endp</p><p> 5.1
93、3字母下降模塊</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</p>
94、<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><
95、p> Lnext1: cmp letter_y,24 ;到達(dá)游戲界面底部</p><p><b> jl Lnext2</b></p><p><b> inc al</b></p><p><b> Lnext2: </b></p><p> cmp al,
96、0 ;是否該顯示新字母</p><p> jne Lnewletter</p><p> mov ch,letter_y ;字母下一行顯示</p><p> mov cl,letter_x</p><p> mov dl,char</p><p> call LetterShow</p>&l
97、t;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</p><
98、;p> mov cl,letter_x</p><p> mov dl,char</p><p> call LetterShow </p><p> Lendown: </p><p><b> ret </b></p><p> LetterDown
99、 endp</p><p> 5.14產(chǎn)生新字母模塊</p><p> GenNewPos proc near </p><p> mov letter_y,1 </p><p> inc ch_index ;新字母的偏移量 </p><p> cmp ch_index,ch_count ;是否到了
100、字母數(shù)組邊界</p><p><b> jl Lx </b></p><p> mov ch_index,0 </p><p> Lx: inc x_index ;新x坐標(biāo) </p><p> cmp x_index,x_count ;是否到了xpos數(shù)組邊界</p><p>
101、 jl Lngreater </p><p> mov x_index,0</p><p> Lngreater: </p><p> mov bx,ch_index </p><p> mov al,letters[bx] ;新字母</p><p> mov char,al </p>
102、<p> mov bx,x_index</p><p> mov al,xpos[bx] ;新位置</p><p> mov letter_x,al</p><p><b> ret </b></p><p> GenNewPos endp</p><p> 5.15字母
103、顯示模塊</p><p> LetterShow proc near</p><p> pushReg </p><p> mov dh,25 ;光標(biāo)行</p><p> mov bh,0 ;光標(biāo)頁 </p><p> curse ch,cl </p><p> mo
104、v ah,02h ;顯示字符</p><p> int 21h </p><p> mov ah,02h</p><p> mov dl,80 ;光標(biāo)列</p><p><b> int 10h</b></p><p> curse 25,80 ;顯示完字母,馬上重置光標(biāo)位
105、置</p><p><b> popReg</b></p><p><b> ret</b></p><p> LetterShow endp</p><p> 5.16顯示四位數(shù)字模塊</p><p> PrintScore proc near </p&g
106、t;<p><b> ;萬位數(shù)字 </b></p><p> mov ax,score</p><p> cmp ax,10000</p><p> jl Lsmlth </p><p> mov bx,10000</p><p><b> xor dx,
107、dx</b></p><p><b> div bx</b></p><p> mov ax,dx </p><p><b> ;萬位數(shù)字暫不顯示</b></p><p> Lsmlth:;千位數(shù)字 </p><p> cmp score,1000<
108、;/p><p> jl Lsmallhun</p><p><b> xor dx,dx</b></p><p> mov bx,1000</p><p><b> div bx</b></p><p> push dx ;余數(shù)</p><p>
109、 call outnum ;顯示千位數(shù)字</p><p> pop ax </p><p> Lsmallhun: ;顯示百位數(shù)字</p><p> mov bl,100</p><p><b> div bl</b></p><p> push ax ;余數(shù)</p&
110、gt;<p> call outnum ;顯示百位數(shù)字</p><p><b> pop ax</b></p><p><b> mov al,ah</b></p><p> ;顯示個位和十位數(shù)字</p><p><b> call p </b>&l
111、t;/p><p><b> ret </b></p><p> PrintScore endp </p><p><b> 5.17游戲模塊</b></p><p> PlayGames Proc near</p><p> menu 00,00,tips&l
112、t;/p><p> cmp score,1000</p><p> jl Lrightshow </p><p> curse 0,76 ;顯示分?jǐn)?shù) </p><p> jmp Lendsetpos</p><p> Lrightshow:</p><p> curse 0,77 ;顯
113、示分?jǐn)?shù)</p><p> Lendsetpos: </p><p> call PrintScore ;輸出分?jǐn)?shù) </p><p> mov ah,0bh ;是否有字符輸入</p><p><b> int 21h</b></p><p> inc al </p>
114、<p> jne Lnochar ;沒有字符</p><p> mov ah,07h</p><p> int 21h </p><p> cmp al,char ;是否和當(dāng)前字符相同</p><p> jne LnotHit</p><p> mov blife,0 ;擊中當(dāng)前字符 &
115、lt;/p><p><b> inc score</b></p><p> jmp Lnochar</p><p><b> LnotHit:</b></p><p> cmp al,' '</p><p><b> jnz next</
116、b></p><p><b> mov cx,2</b></p><p> stop:inc cx</p><p> curse 0,64</p><p> mov ah,07h</p><p><b> int 21h</b></p><
117、p> cmp al,' '</p><p><b> jz next</b></p><p><b> cmp al,27</b></p><p><b> jz next</b></p><p><b> loop stop</
118、b></p><p><b> next: </b></p><p> cmp al,27;esc 鍵退出</p><p> jne Lnochar</p><p><b> xor ax,ax</b></p><p> jmp Lendplay
119、</p><p><b> Lnochar:</b></p><p> call LetterDown </p><p> call Delay</p><p><b> mov ax,1</b></p><p><b> Lendplay:</b&
120、gt;</p><p><b> ret </b></p><p> PlayGames endp</p><p> 5.18計算2位整數(shù)并輸出模塊</p><p> p proc near </p><p> mov ah,00h ;將al補(bǔ)充為ax</p>
121、<p><b> mov bl,10</b></p><p><b> div bl</b></p><p> mov bh,ah ;余數(shù)存入ah</p><p> mov dl,al ;商存入al</p><p><b> or dl
122、,30h</b></p><p> mov ah,02h</p><p><b> int 21h</b></p><p> mov dl,bh </p><p><b> or dl,30h</b></p><p>&l
123、t;b> int 21h</b></p><p><b> ret</b></p><p><b> p endp</b></p><p> 5.19各宏定義模塊</p><p> pushReg macro;寄存器入棧</p><p><b
124、> push ax</b></p><p><b> push bx</b></p><p><b> push cx</b></p><p><b> push dx</b></p><p><b> endm </b><
125、;/p><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
126、 ax</b></p><p><b> endm </b></p><p> curse macro cury,curx;設(shè)置光標(biāo)宏</p><p><b> pushReg </b></p><p> mov ah,02h </p><p> m
127、ov 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> endm </b&g
128、t;</p><p> clear_screen macro op1,op2,op3,op4,color ;清屏宏定義 </p><p><b> pushReg</b></p><p> mov ax,0600h </p><p> mov bh,color </p>&
129、lt;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></p><p><b> curse 0,0</b
130、></p><p><b> popReg </b></p><p><b> endm </b></p><p> menu macro cury,curx,op3 ;菜單顯示宏定義 </p><p> mov ah,02h </p><p>
131、 mov bh,00h</p><p> mov dh,cury</p><p> mov dl,curx </p><p><b> int 10h </b></p><p> ;mov ah,02h</p><p> mov ah,09h </p><p>
132、; lea dx,op3 </p><p><b> int 21h </b></p><p><b> endm</b></p><p><b> 6.調(diào)試過程</b></p><p> 調(diào)試時我是按一下步驟進(jìn)行的: </p><p> A
133、調(diào)用DEBUG,裝入程序</p><p> B反匯編程序,記錄代碼段與數(shù)據(jù)段首地址</p><p> C觀察寄存器初始狀態(tài) </p><p> D以單步工作方式T開始運(yùn)行程序 </p><p> E觀察用戶程序數(shù)據(jù)段初始內(nèi)容</p><p> F繼續(xù)以單步工作方式運(yùn)行程序,G連續(xù)工作方式運(yùn)行程序</p&
134、gt;<p> G不能達(dá)到預(yù)想效果時,修改程序,再調(diào)試</p><p> 由于,一開始沒下意識要記住整個調(diào)試過程,所以對于調(diào)試部分,沒有記錄下來。但是每次按照思路寫下來的子程序都經(jīng)過調(diào)試運(yùn)行達(dá)到自己預(yù)想的效果。設(shè)計從一布置下來就開始做,所以,寫的代碼的時間比較長,程序基本可以達(dá)到預(yù)想的效果,沒有遇到什么問題。</p><p><b> 7.使用說明</b
135、></p><p> 1.本游戲在win32系統(tǒng)運(yùn)行</p><p> 2.按回車鍵進(jìn)入游戲,ESC鍵退出</p><p> 3.進(jìn)入速度選擇界面,h鍵高速,l鍵低速,s鍵重新設(shè)置速度,其他鍵默認(rèn)為普通速度其他鍵(包括回車鍵)</p><p> 4.若進(jìn)入速度設(shè)置界面,輸入1-999的數(shù),表示速度為普通速度的百分之幾</p
136、><p> 5.游戲中按esc退出,同時顯示游戲總共出現(xiàn)字符數(shù),所得分?jǐn)?shù),同時提示游戲是否重新開始,y返回主界面,n退出</p><p> 6.游戲過程中按space鍵暫停,再次按space鍵繼續(xù)進(jìn)行游戲</p><p><b> 8.總結(jié)</b></p><p> 通過這次課程設(shè)計是我收獲不少,設(shè)計剛開始我們的手頭
137、資料少得可憐,通過網(wǎng)絡(luò)我知道了找到打字游戲的原理,形成了自己設(shè)計的方案,按照自己的思路一步步地做下去,不懂的時候,不斷查閱資料。本來不懂在圖書館書架上找書的我,這次學(xué)會了查找書本。由于老師有穿插了一些動態(tài)顯示的內(nèi)容,安排設(shè)計的時間比較長,本次的設(shè)計很順利就完成了,基本上沒遇到什么問題,只是覺得有點不耐煩,有時要設(shè)置光標(biāo)的位置。同時,也認(rèn)識到了自己的不足,很多指令都只能在用的時候翻書,而沒有把常用的都記住。對于自己了解的算法思想還少之甚少
138、,以后要更多地看程序,領(lǐng)悟別人的思想,自己多動手,增強(qiáng)自己編程的能力。</p><p><b> 9.參考文獻(xiàn)</b></p><p> [1]《匯編語言》李珍香 劉紅梅 趙潤林主編 中國水利水電出版社</p><p> [2]《匯編語言程序設(shè)計—從DOS到Windows》 張雪蘭等主編 清華大學(xué)出版社</p><p&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語言課程設(shè)計報告---打字游戲
- 匯編課程設(shè)計打字游戲
- 匯編語言課程設(shè)計
- 匯編語言課程設(shè)計
- 匯編語言課程設(shè)計報告
- 匯編語言課程設(shè)計報告
- 匯編語言課程設(shè)計安排
- 匯編語言課程設(shè)計報告
- 匯編語言課程設(shè)計報告a
- 匯編語言推箱子課程設(shè)計
- 匯編語言課程設(shè)計----電子鬧鐘
- 匯編語言程序設(shè)計-課程設(shè)計
- 匯編語言程序設(shè)計課程設(shè)計
- 匯編語言動畫設(shè)計課程設(shè)計
- 微機(jī)原理與匯編語言課程設(shè)計
- 匯編語言課程設(shè)計磁盤文件管理
- 匯編語言課程設(shè)計_提取系統(tǒng)時間
- 匯編語言課程設(shè)計《定時顯示系統(tǒng)》
- 匯編語言課程設(shè)計--代碼轉(zhuǎn)換程序
- 《匯編語言》課程設(shè)計---用匯編語言進(jìn)行音樂動畫功能的實現(xiàn)
評論
0/150
提交評論