版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 1 設(shè)計(jì)任務(wù)及要求</b></p><p><b> 1.1 設(shè)計(jì)任務(wù)</b></p><p> 采用匯編語(yǔ)言設(shè)計(jì)一個(gè)運(yùn)行于計(jì)算機(jī)的小鳥動(dòng)畫程序。在屏幕上顯示一只小鳥,當(dāng)按下按鍵S時(shí),小鳥開始飛行;當(dāng)按下按鍵B時(shí),小鳥開始發(fā)聲;當(dāng)按下按鍵P時(shí),小鳥暫停飛行和鳴叫;而按下按鍵C時(shí),小鳥繼續(xù)飛行并且鳴叫;按下Q鍵時(shí),
2、退出程序。</p><p><b> 1.2 設(shè)計(jì)要求</b></p><p><b> 設(shè)計(jì)任務(wù)及要求分析</b></p><p><b> 方案比較及認(rèn)證說明</b></p><p><b> 系統(tǒng)原理闡述</b></p><
3、;p> 軟件設(shè)計(jì)課題需要說明:軟件思想,流程圖,源程序及程序注釋</p><p><b> 調(diào)試記錄及結(jié)果分析</b></p><p><b> 總結(jié)</b></p><p><b> 參考資料</b></p><p> 附錄:芯片資料或程序清單,軟件演示屏幕拷
4、貝圖或硬件實(shí)物圖</p><p><b> 2 方案比較及論證</b></p><p><b> 2.1 方案比較</b></p><p> 在小鳥動(dòng)畫程序設(shè)計(jì)中主要分為兩個(gè)部分:一個(gè)部分是小鳥圖像形成與移動(dòng)部分,另一個(gè)部分是小鳥發(fā)聲鳴叫部分,只要相應(yīng)地設(shè)計(jì)出這兩個(gè)部分之后,將二者結(jié)合起來,就可以完成任務(wù)要求。<
5、;/p><p> 首先討論小鳥圖像形成及移動(dòng)部分的方案。通過查閱資料,形成小鳥圖像有兩種方法:一種是字符形成小鳥圖像(即文本方式);另一種是像素點(diǎn)形成小鳥圖像(即圖形方式)。</p><p> 方案一:用字符形成小鳥圖像,主要是利用BIOS中的INT 10H中斷,即顯示器中斷,INT 10H中的09H號(hào)功能是在光標(biāo)制定位置處寫字符和屬性。程序結(jié)構(gòu)圖大致如下:</p><
6、p> MOV AH,09H ;置光標(biāo)</p><p> MOV AL,‘字符’ ;字符ASCII碼</p><p> MOV BL,7 ;字符屬性</p><p> MOV BH,0 ;第0頁(yè)</p><p> MOV CX,數(shù)量值 ;字符重復(fù)個(gè)數(shù)<
7、;/p><p><b> INT 10H</b></p><p> 方案二:用圖形方式形成小鳥圖像,是利用像素來產(chǎn)生彩色圖案,它也是利用BIOS中的INT 10H的功能00H來設(shè)置圖形方式。程序結(jié)構(gòu)大致如下面所示:</p><p> MOV AH,00H ;請(qǐng)求設(shè)置方式</p><p> MOV A
8、L,0CH ;彩色圖形</p><p> INT 10H ;調(diào)用中斷服務(wù)</p><p> 以上是關(guān)于小鳥圖像顯示的兩個(gè)方案。</p><p> 小鳥發(fā)聲程序也是一個(gè)比較重要的環(huán)節(jié),中間涉及到揚(yáng)聲器發(fā)聲部分。而在關(guān)于揚(yáng)聲器發(fā)聲時(shí),主要有兩種方式,分別是以位觸發(fā)和定時(shí)器控制。下面就這兩種不同的方式確定兩個(gè)不同的設(shè)計(jì)方案。
9、 </p><p> 方案一:發(fā)聲采用位觸發(fā)方式。程序直接控制PPI(8255可編程序外圍接口芯片)的輸出控制寄存器(I/O端口為61H)的第一位,使該位按所需的頻率進(jìn)行1和0的交替變化,從而產(chǎn)生一串脈沖控制波形,這些脈沖經(jīng)過放大后驅(qū)動(dòng)揚(yáng)聲器發(fā)出聲音。</p><p> 可以利用軟件延時(shí)來控制所產(chǎn)生的脈沖波形的長(zhǎng)度和脈寬,就可以實(shí)現(xiàn)產(chǎn)生不同頻率和不同音長(zhǎng)的聲音。軟件實(shí)現(xiàn)的程序如下:
10、IN AL,61H MOV AH,AL AND AL,0FCH ;關(guān)斷定時(shí)器通道2的門控 SOUND:XOR AL,2 ;觸發(fā)61H端口第1位 OUT 61H,AL MOV CX,DX ;(DX)=控制脈沖的計(jì)數(shù)值 WAIT: LOOP WAIT ;延時(shí)循環(huán) DEC BX ;(BX)=脈沖持續(xù)的時(shí)間 JNZ SOUND MOV AL,AH OUT 61H,AL ;恢復(fù)
11、61H端口 在本方案中,通過程序的方法來控制PB1,使其在1和0之間按一定的頻率變,從而產(chǎn)生一串脈沖??刂泼}沖寬度的計(jì)數(shù)值的算法如下: 計(jì)數(shù)值=2801*100/音頻 如果音頻為f,則脈沖周期1/f一個(gè)半波的時(shí)間為1/2f秒,而1/2f秒的延時(shí)可簡(jiǎn)單地通過LOOP指令的循環(huán)來取得,由于2801次LOOP指令循環(huán)執(zhí)行所需時(shí)間是10MS,所以一秒鐘時(shí)間約執(zhí)行2801*100次LOOP
12、指令</p><p> MOV BX,100WAIT: MOV CX,2801 DELAY: LOOP DELAY</p><p> DEC BX </p><p> JNZ WAIT </p><p> 算出了脈沖寬度,再通過高低電平的不斷變換,就可實(shí)現(xiàn)不同頻率的脈沖方波。把此方波經(jīng)濾波放大即可驅(qū)動(dòng)揚(yáng)聲器發(fā)聲了。
13、 </p><p> 方案二:利用定時(shí)器發(fā)聲。這里是通過硬件即8253定時(shí)器產(chǎn)生聲音。 </p><p> CPU通過對(duì)定時(shí)器的通道2進(jìn)行編程,使其I/O寄存器接收一個(gè)控制聲音頻率的16位計(jì)數(shù)值,端口61H的最低位控制通道2門控的開斷,以產(chǎn)生特殊的音響。當(dāng)定時(shí)器接收的計(jì)數(shù)值為533H時(shí),能產(chǎn)生896Hz的聲音,因此產(chǎn)生其他頻率的計(jì)數(shù)值就可由下式計(jì)算:計(jì)數(shù)值=533H×896&
14、#247; f=1234DCH÷ f 在送出頻率計(jì)數(shù)值之前,還要給方式寄存器送一個(gè)方式值,該數(shù)決定對(duì)哪一個(gè)通道編程,采用什么模式,送入通道的計(jì)數(shù)值是一字節(jié)還是兩字節(jié),是二進(jìn)制碼還是BCD碼。其位組合的格式如下: 當(dāng)通道2用于發(fā)聲時(shí),采用的是模式3,在模式3下,輸出線為“1”和為“0”的時(shí)間各占計(jì)數(shù)時(shí)間的一半,因而產(chǎn)生一系列間隔均勻的脈沖。 產(chǎn)生指定頻率聲音的程序段如下:</p><p&
15、gt; PUSH AX;保存ax的值</p><p> MOV AL,0B6H ;給2號(hào)定時(shí)器的43端口送入一個(gè)特定的數(shù)0B6H</p><p> OUT 43H,AL</p><p> MOV AX,34DCH</p><p><b> DIV BX</b></p&
16、gt;<p> OUT 42H,AL ;給42H端口裝入一個(gè)16位的計(jì)時(shí)常數(shù)(533H*896/頻率)</p><p> MOV AL,AH</p><p> OUT 42H,AL</p><p> IN AL,61H;獲取61h端口的當(dāng)前值</p><p> ORAL,03H;
17、把61h端口低二位置1,即打開蜂鳴器</p><p> OUT61H,AL;輸出數(shù)據(jù)到61h端口</p><p> POPAX;恢復(fù)ax的值</p><p> 2.2 方案論證選擇</p><p> 在顯示小鳥圖像的兩個(gè)方案中,方案一具有數(shù)據(jù)量少,操作簡(jiǎn)單的特點(diǎn),但顯示的圖形與實(shí)際物體有偏差;方案二中顯示的圖像形象逼真,
18、但它的數(shù)據(jù)量極其大,操作起來有點(diǎn)困難。</p><p> 鑒于以上的比較,在小鳥顯示圖像這個(gè)環(huán)節(jié)決定采用方案一,以減小操作量。</p><p> 而對(duì)于小鳥發(fā)聲區(qū)別在于以不同的方式來驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。經(jīng)對(duì)比可知,兩種方案都各有優(yōu)缺點(diǎn)。在方案1中,其優(yōu)點(diǎn)是電路簡(jiǎn)單,所用的器件芯片少,主要芯片只有需一片8255,產(chǎn)生方波是通過軟件來實(shí)現(xiàn)的,易于修改和維護(hù)。然而它也存在一定的缺點(diǎn),就是系統(tǒng)不斷
19、地通過軟件來產(chǎn)生方波,系統(tǒng)資源被占用,無法再做其它事。與方案1相比,方案2增加了一個(gè)8253芯片和一個(gè)與門,雖然電路比方案1復(fù)雜,但通過定時(shí)器產(chǎn)生方波,實(shí)現(xiàn)起來比較簡(jiǎn)單,而且也不會(huì)出現(xiàn)系統(tǒng)資源被全部占用的情況。 </p><p> 所以經(jīng)過分析,小鳥發(fā)聲程序選擇方案二進(jìn)行設(shè)計(jì)。</p><p><b> 3 系統(tǒng)原理闡述</b>&
20、lt;/p><p><b> 3.1 工作原理</b></p><p> 在小鳥動(dòng)畫程序中,所要完成的任務(wù)是小鳥能夠在屏幕上顯示并且能夠移動(dòng),另一個(gè)任務(wù)是小鳥能夠發(fā)出聲音,這兩個(gè)問題涉及到不到的硬件配置。下面將依次介紹其工作原理。</p><p> 小鳥在屏幕上顯示與移動(dòng)的原理:通過查閱書籍了解到DOS中的一些關(guān)于顯示器的中斷,首先是如何在屏
21、幕中顯示出小鳥圖像。上一節(jié)已將闡述了采用字符圖形方式來顯示小鳥圖像。具體程序如下:</p><p> MOV AH,09H ;在當(dāng)前光標(biāo)位置處寫字符和屬性</p><p> MOV AL,01H ;字符的ASCII碼值</p><p> LEA BX,SHULIANG</p><p> MOV DX,FLAG</
22、p><p><b> ADD BX,DX</b></p><p> MOV CL,[BX] ;CX為寫入的字符數(shù)</p><p><b> MOV CH,0</b></p><p> MOV BH,0 ;寫入的頁(yè)數(shù)</p><p> MOV BL,16
23、H ;字符屬性</p><p><b> INT 10H</b></p><p> 實(shí)現(xiàn)小鳥移動(dòng)的原理是:小鳥向左移動(dòng),首先將前一幀小鳥圖像進(jìn)行清屏,并且將形成小鳥圖像的每個(gè)字符的列號(hào)減一,這樣就實(shí)現(xiàn)了小鳥的移動(dòng)。但是為了保證小鳥在移動(dòng)中能夠在人眼的視覺效應(yīng)中,需要進(jìn)行延時(shí),這樣就可以能夠連續(xù)觀察到小鳥的飛行過程。小鳥的移動(dòng)程序如下:</p>
24、<p> MOV YANSHI,5</p><p> CALL Delay ;進(jìn)行延時(shí)</p><p> MOV AH,02H</p><p><b> MOV DX,0</b></p><p><b> MOV BH,0</b></p><p>
25、<b> INT 10H</b></p><p> MOV AH,09H ;清除前一幀圖像 </p><p> MOV AL,' '</p><p> MOV CX,1700</p><p> MOV BL,07H</p><p><b> INT 10
26、H</b></p><p> 在任務(wù)要求中,要按下按鍵‘P’暫停,按下按鍵‘C’繼續(xù),按下按鍵‘Q’時(shí)退出,這些功能只需要調(diào)用BIOS中的INT 16H的鍵盤中斷,來檢查鍵盤的輸入,并且根據(jù)條件進(jìn)行無條件跳轉(zhuǎn)。程序如下:</p><p> MOV AH,0H ;讀取一個(gè)字符</p><p><b> INT 16H</b&g
27、t;</p><p> CMP AL,'Q'</p><p><b> JZ TUICHU</b></p><p> CMP AL,'C'</p><p> JNZ DENGDAI</p><p> 實(shí)現(xiàn)小鳥發(fā)聲程序的原理:利用8253定時(shí)器來驅(qū)動(dòng)揚(yáng)聲器,
28、PC機(jī)中有三種不同的定時(shí)器。0號(hào)定時(shí)器用來作為日常通用的時(shí)鐘,它每秒約發(fā)出18次中斷一修正時(shí)間;1號(hào)定時(shí)器用于DMA(直接存儲(chǔ)器存取)傳送數(shù)據(jù),連接到揚(yáng)聲器上的是2號(hào)定時(shí)器,它實(shí)際上是一個(gè)振蕩電路,此電路向揚(yáng)聲器發(fā)送指定頻率的脈沖,當(dāng)輸出端口61H控制揚(yáng)聲器為接通狀態(tài)時(shí),就發(fā)出了一定頻率的聲音。</p><p> 利用8253定時(shí)器發(fā)出聲音大概包括以下三個(gè)步驟:</p><p> 1.
29、在2號(hào)定時(shí)器中的43H端口送一個(gè)特定的書0B6H(10110110B),此數(shù)對(duì)定時(shí)器的方式寄存器進(jìn)行初始化,使定時(shí)器2準(zhǔn)備接收計(jì)時(shí)常數(shù)。</p><p> 2.在2號(hào)定時(shí)器的42H端口裝入一個(gè)16位的計(jì)時(shí)常數(shù)(533H*896/頻率),以建立將要產(chǎn)生的聲音頻率。</p><p> 3.把輸出端口61H的0,1兩位置1,發(fā)出聲音。</p><p><b>
30、; 其發(fā)聲程序如下:</b></p><p> MOV AL,0B6H</p><p> OUT 43H,AL</p><p> MOV AX,34DCH</p><p> MOV DX,12H</p><p> DIV BX</p><
31、p> OUT 42H,AL</p><p> MOV AL,AH</p><p> OUT 42H,AL</p><p> IN AL,61H</p><p> OR AL,03H</p><p> OUT 61H,AL</p><
32、;p> 3.2 系統(tǒng)組成框圖</p><p> 在小鳥成像這一環(huán)節(jié)中主要是利用PC內(nèi)部的DOS和BIOS中斷,所以對(duì)其電路圖很難描繪出來。但在小鳥發(fā)聲程序中,主要利用8255和定時(shí)器8253來驅(qū)動(dòng)揚(yáng)聲器發(fā)聲,因此,可以將其電路圖表示出來,揚(yáng)聲器驅(qū)動(dòng)圖如下。</p><p> 3-1 PC機(jī)上揚(yáng)聲器驅(qū)動(dòng)電路</p><p> 原理圖分析:PC機(jī)上的大多數(shù)
33、輸入/輸出(I/O)都是由主板上的8255(或8255A)可編程序外圍接口芯片(PPI)管理的。PPI包括3個(gè)8位寄存器,兩個(gè)用于輸入功能,一個(gè)用于輸出功能。輸入寄存器分配的I/O端口號(hào)為60H和62H,輸出寄存器分配的I/O端口號(hào)為61H。由PPI輸出寄存器中的0、1兩位來選擇揚(yáng)聲器的驅(qū)動(dòng)方式。</p><p> 連接到揚(yáng)聲器上的是定時(shí)器2,GATE與端口61H的PB0相連,當(dāng)PB0=1時(shí),GATE2獲得高電
34、平,使定時(shí)器2可以在模式3(方波)下工作。定時(shí)器2的OUT2與端口61H的PB1通過一個(gè)與門與揚(yáng)聲器的驅(qū)動(dòng)電路相連。當(dāng)PB1=1時(shí),允許OUT2的輸出信號(hào)到達(dá)揚(yáng)聲器電路。因此,只有PB0和PB1同時(shí)為“1”時(shí),才能驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。</p><p> 就整個(gè)電路而言,接好電路后,通過軟件編程不斷地采集從8255口中輸入的信號(hào),而按鍵都接在8255的A口上,只要有按鍵按下,就會(huì)采集到一個(gè)數(shù)據(jù),根據(jù)這個(gè)數(shù)據(jù)與事先編好
35、的表對(duì)應(yīng),得到一個(gè)計(jì)數(shù)值,把這個(gè)計(jì)數(shù)值送給8253的通道2,8253的通道2工作的方式3下,這樣就可以產(chǎn)生滿足頻率要求的發(fā)聲方波。這個(gè)方波經(jīng)驅(qū)動(dòng)放大就可以使揚(yáng)聲器發(fā)出相應(yīng)的聲音。 所以8255在這里完成兩個(gè)任務(wù),它不僅從A口中采集到數(shù)據(jù),而且B口的PB1和PB0兩個(gè)位要控制發(fā)聲。8253的主要任務(wù)就是產(chǎn)生所要求發(fā)聲的不同頻率的方波。</p><p> 以上就是關(guān)于小鳥動(dòng)畫程序的原理解析。</p>
36、<p> 4 軟件思想與流程圖</p><p> 4.1 程序功能描述</p><p> 程序開始,顯示出小鳥的圖像,并且顯示提示信息,對(duì)緩沖區(qū)初始化。按鍵掃描,將按鍵值送入到AL中,當(dāng)按下S鍵時(shí),小鳥飛行;按下B鍵時(shí),小鳥鳴叫;按下P鍵時(shí),小鳥停止飛行并且停止鳴叫;而按下Q鍵時(shí),退出程序。</p><p> 4.2 程序流程圖:</p>
37、;<p><b> 主程序:</b></p><p> 主程序的流程圖如下圖所示。從主程序的流程圖中可以得出其工作流程。首先,顯示小鳥圖像和緩沖區(qū)的提示,并且判定是否有按鍵輸入和按鍵是否是‘S’鍵,如果是,小鳥飛行;如果不是,則繼續(xù)停止在初始化的位置處。判定鍵盤輸入是否是‘B’,如果是,則小鳥繼續(xù)飛行而且鳴叫,如果不是,則小鳥只是繼續(xù)飛行。當(dāng)為按鍵‘B’時(shí)之后,再來判定鍵盤
38、輸入是否為‘P’,如果是,則小鳥停止飛行而且還停止鳴叫;當(dāng)按鍵不是‘P’時(shí),小鳥則繼續(xù)飛行和鳴叫。以后再來判定鍵盤是否為‘C’或‘Q’,當(dāng)為‘C’時(shí),小鳥則恢復(fù)飛行和鳴叫;如果不是,小鳥則繼續(xù)暫停;當(dāng)為‘Q’時(shí),則退出程序。</p><p> 4-1 主程序流程圖</p><p><b> 子程序流程圖:</b></p><p> 4-2
39、 子程序流程圖</p><p> 5 調(diào)試記錄及結(jié)果分析</p><p><b> 5.1 電路連接</b></p><p> 一般無須連接電路,如果想要聽到笑鳥鳴叫聲大一點(diǎn),可以把電腦里面的蜂鳴器接口用導(dǎo)線引出來,外接一個(gè)大的揚(yáng)聲器,效果可能好一點(diǎn)。</p><p><b> 5.2 調(diào)試步驟<
40、/b></p><p> 1)運(yùn)行MF2KP匯編軟件,在里面編輯源程序,編輯完成之后,生成.ASM文件,保存該該文件;</p><p> 2)接著仍用上面的軟件進(jìn)行編譯,連接,運(yùn)行生成.EXE文件;</p><p> 3)運(yùn)行所生成的EXE文件即可產(chǎn)生所需要的結(jié)果。</p><p> 程序正常運(yùn)行截圖如下面的幾幅圖像所示。當(dāng)點(diǎn)擊
41、開.EXE文件之后,形成下面的小鳥靜止圖像。</p><p> 圖5-1 初始化圖像</p><p> 當(dāng)按下按鍵S時(shí),小鳥飛行圖像如下圖所示。</p><p> 圖5-2 小鳥飛行圖像</p><p> 因?yàn)樵谛▲B發(fā)聲程序結(jié)果不好顯示,故省略這一步驟。當(dāng)鍵盤輸入為P時(shí),小鳥暫停圖像如下面所示。</p><p>
42、; 圖5-3 小鳥暫停圖像</p><p> 當(dāng)鍵盤輸入按鍵為C時(shí),小鳥繼續(xù)飛行,其演示結(jié)果如下圖所示。</p><p> 圖5-4 小鳥繼續(xù)飛行圖像</p><p> 當(dāng)鍵盤輸入為Q時(shí),退出程序。</p><p> 5.3 調(diào)試中出現(xiàn)的問題、原因及排除方法</p><p> 在編程調(diào)試的過程中,遇到了很多
43、麻煩,總結(jié)起來有以下幾點(diǎn):</p><p> 問題1:寄存器不夠用怎么辦?</p><p> 原因:使用了太多的寄存器,AX、BX、CX、DX。</p><p> 解決辦法:使用外部變量定義,定義外部變量的方法為:</p><p> 變量名數(shù)據(jù)類型 ?</p><p> 問題2:寄存器的值變幻無常,怎么辦?
44、</p><p> 原因:程序結(jié)構(gòu)過于復(fù)雜,使用寄存器比較頻繁,以及使用了BIOS中斷程序,這樣會(huì)導(dǎo)致其它與之相關(guān)寄存器的值的改變。</p><p> 解決辦法:堆棧是保護(hù)環(huán)境的主要工具,一旦用錯(cuò),后過將很嚴(yán)重,比如我們?cè)谡{(diào)試程序的過程中,遇到過這樣的問題:在一個(gè)函數(shù)的開始,我先用PUSH把所有寄存器入棧了,在函數(shù)的執(zhí)行中,我又把一個(gè)寄存器PUSH到棧中保存,卻忘記了在執(zhí)行POP指令
45、之前把它恢復(fù)出來!這樣就造成了所有的寄存器的值都的生了變化,包括數(shù)據(jù)和代碼段寄存器,這樣不出問題才怪呢?!所以,要記住,PUSH了一個(gè)變量之后在新的PUSH來臨之前如果又有POP別的變量的語(yǔ)句,一定會(huì)出問題!解決的辦法只有一個(gè),把PUSH和POP對(duì)上號(hào)。</p><p> 問題3:要顯示的字符串過多,但又不想重復(fù)寫代碼,既要美觀,又要易讀,怎么辦?</p><p> 原因:過于頻繁的調(diào)
46、用中斷顯示字符串,導(dǎo)致程序過于龐大和復(fù)雜,可讀性差。</p><p> 解決辦法:解決這種問題的最好方法是直接把顯示部分寫成子過程,但是子過程在傳遞參數(shù)的時(shí)候不方便,所以就用宏定義,宏定義可以很方便的傳遞參數(shù),不僅使得程序美觀好看,而且可讀性好,程序代碼緊湊。</p><p> 問題4:跳轉(zhuǎn),轉(zhuǎn)移指令跳出的范圍太大,編譯出現(xiàn)錯(cuò)誤怎么辦?</p><p> 原
47、因:程序結(jié)構(gòu)過于復(fù)雜,龐大。</p><p> 解決辦法:使用過程,也就是子程序設(shè)計(jì),直接把一個(gè)要頻繁要用到的函數(shù)</p><p> 打包成一個(gè)子過程,然后用CALL調(diào)用子過程就可以了,這樣就可以避免使用跳轉(zhuǎn)和轉(zhuǎn)移指令了。</p><p> 比如開啟揚(yáng)聲器子過程:</p><p><b> ;開啟揚(yáng)聲器</b>&
48、lt;/p><p> spk_on procnear</p><p> pushax;保存ax的值</p><p> inal,61h;獲取61h端口的當(dāng)前值</p><p> oral,03h;把61h端口低二位置1,即打開蜂鳴器</p><p> out61h,al
49、;輸出數(shù)據(jù)到61h端口</p><p> popax;恢復(fù)ax的值</p><p><b> ret</b></p><p> spk_on endp</p><p><b> 調(diào)用子過程如下:</b></p><p> callspk_on
50、;關(guān)閉蜂鳴器</p><p> 問題5:匯編里面怎樣進(jìn)行查表處理?</p><p> 原因:還不夠牢固的掌握匯編編程</p><p> 解決辦法:匯編里面進(jìn)行查表處理的我只掌握了一種簡(jiǎn)單的設(shè)計(jì),直接用下標(biāo)</p><p> 例如:在查表中,首先要記住兩點(diǎn),一是表的首個(gè)偏移地址送入寄存器BX中,另一個(gè)是需要查找的字符一定要送入寄存
51、器AL中。只有這樣,才能正確的查找到所需要的數(shù)據(jù)。</p><p><b> 心得與體會(huì)</b></p><p> 由于之前在實(shí)驗(yàn)室時(shí)曾經(jīng)用單片機(jī)做過一個(gè)電子相冊(cè),所以對(duì)視頻成像還是有一些了解,再就是在課堂上認(rèn)真聽講,理論知識(shí)學(xué)習(xí)的比較好,因此很快就能用匯編語(yǔ)言將小鳥的圖像在屏幕上顯示出來。但是,當(dāng)我做到小鳥發(fā)聲這個(gè)子程序時(shí),查閱了大量資料,調(diào)試了大量的程序,還是
52、不能夠在個(gè)人PC上實(shí)現(xiàn)正確的發(fā)聲。由于中間還有一堂自動(dòng)控制原理的考試,因此感到很焦急。最后只有向石老師和研究生學(xué)長(zhǎng)請(qǐng)教之后,才勉勉強(qiáng)強(qiáng)完成了任務(wù)。雖然畫出的小鳥不是很像,并且比別人多花了許多時(shí)間才完成任務(wù),但是當(dāng)可以在自己的電腦上敲擊按鍵實(shí)現(xiàn)小鳥的飛行,暫停,鳴叫的功能時(shí),,內(nèi)心的喜悅之情還是油然而生。</p><p> 通過將近一個(gè)半星期的摸索和編程,查資料,終于把程序完成了??梢院敛豢鋸埖恼f我的匯編編程技術(shù)
53、有一個(gè)質(zhì)的飛躍,因?yàn)檎n堂上僅僅學(xué)習(xí)的是理論知識(shí),很少去應(yīng)用,不能夠真正的檢驗(yàn)出我的匯編語(yǔ)言編程能力。在這次《微機(jī)原理與接口技術(shù)》的課程設(shè)計(jì)中,我的體會(huì)就是:要提高自己的編程能力,你必須親自去體驗(yàn)、去設(shè)計(jì)、編輯、編譯、調(diào)試、運(yùn)行。每一個(gè)程序員都是在失敗、嘗試、失敗、嘗試與收獲中成長(zhǎng)起來的。而課程設(shè)計(jì)給了我一個(gè)很好的機(jī)會(huì),將理論和實(shí)踐很好的結(jié)合起來了,使我的知識(shí)更加結(jié)構(gòu)化和系統(tǒng)化,而且還可以學(xué)到一些課堂上不講或是一語(yǔ)帶過的知識(shí),增加我的課外
54、理論知識(shí)。同時(shí)我也可以從中獲取很多的樂趣,原來匯編語(yǔ)言的功能是如此的強(qiáng)大,感覺很好玩,很有意思。還有很重要的一點(diǎn)就是在調(diào)試程序時(shí)要講究心平氣和,而我恰恰是比較急躁的一個(gè)人,這次的課程設(shè)計(jì)程序調(diào)試過程中,很好的磨礪了我那急躁的性格,教會(huì)我學(xué)會(huì)冷靜地去處理問題,相反,越毛躁越容易出問題,惡性循環(huán),問題也就難以去順利地解決。</p><p> 總之,通過這次課程設(shè)計(jì),自己的課堂上的理論知識(shí)得到了鞏固,而且也增長(zhǎng)了不少
55、,各方面的能力都得到了一定的提高。有人曾對(duì)我說過“對(duì)一件事情感興趣是即使在沒有任何外界壓力下也依然孜孜不倦的去學(xué)習(xí)它,運(yùn)用它”,我想我還會(huì)繼續(xù)和匯編語(yǔ)言打交道,更深一步去挖掘它。</p><p> 最后,感謝石老師的幫助和指導(dǎo)。通過您的答疑,我少走了很多彎路,很好地完成了任務(wù)。謝謝您!</p><p><b> 參考文獻(xiàn)</b></p><p&
56、gt; [1] 朱定華著.微機(jī)原理、匯編與接口技術(shù)[M].北京:清華大學(xué)出版社.2007年</p><p> [2] 馬春燕.微機(jī)原理接口技術(shù)實(shí)驗(yàn)與學(xué)習(xí)輔導(dǎo)[M].北京:電子工業(yè)出版社.2007年</p><p> [3] 周佩玲、彭虎、傅忠謙編著.微機(jī)原理與接口技術(shù)[M]. 北京:電子工業(yè)出版社.2007年</p><p> [4] 沈美明、溫冬嬋著.IB
57、M-PC匯編語(yǔ)言程序設(shè)計(jì)[M].北京:電子科技大學(xué)出版社.2006年</p><p> [5] 張雪蘭、譚毓安、李元章著.匯編語(yǔ)言程序設(shè)計(jì)——從DOS到WINDOWS[M].北京:清華大學(xué)出版社.2006年 </p><p> [6] 余朝琨著.IBM-PC機(jī)匯編語(yǔ)言程序設(shè)計(jì)[M].廈門:廈門大學(xué)出版社.2001年 </p><p><b> 附錄:
58、</b></p><p> 1. DOS/BIOS功能調(diào)用,文件列表清單</p><p><b> 1、掃描鍵盤按鍵</b></p><p><b> 功能號(hào):0</b></p><p> 用 途:掃描鍵盤按鍵鍵值</p><p><b>
59、參 數(shù):AH=0</b></p><p> 調(diào) 用:INT 16H</p><p> 返 回:AL = 按鍵的ASCII碼</p><p> 2、退出系統(tǒng),返回DOS</p><p><b> 功能號(hào):4CH</b></p><p> 用 途:讀取時(shí)鐘計(jì)數(shù)值</p>
60、;<p> 參 數(shù):AH=4CH</p><p> 調(diào) 用:INT 21H</p><p><b> 返 回:無</b></p><p> 3、在當(dāng)前光標(biāo)位置寫字符和屬性</p><p><b> 功能號(hào):09H</b></p><p> 用途:在當(dāng)
61、前光標(biāo)位置寫字符和屬性</p><p> 參數(shù): AH=9,BH=頁(yè)號(hào),AL=字符的ASCII碼,BL=字符屬性,CX=寫入字符數(shù)</p><p> 調(diào)用:INT 10H</p><p><b> 返回:無</b></p><p><b> 4、清除屏幕</b></p><
62、;p><b> 功能號(hào):06H</b></p><p> 用途:清除當(dāng)前屏幕中的內(nèi)容</p><p> 參數(shù):AL=‘ ’,CX=起始點(diǎn)橫縱坐標(biāo),DX=終止點(diǎn)橫縱坐標(biāo),BH=空白行的屬性</p><p> 調(diào)用:INT 10H</p><p><b> 返回:無</b></p&
63、gt;<p> 5、設(shè)置光標(biāo)到指定位置</p><p><b> 功能號(hào):02H</b></p><p> 用途:將光標(biāo)顯示在指定位置</p><p> 參數(shù):DL=列號(hào),DH=行號(hào),BH=頁(yè)號(hào)</p><p> 調(diào)用:INT 10H</p><p><b>
64、返回:無</b></p><p><b> 6、字符串輸出</b></p><p><b> 功能號(hào):09H</b></p><p> 用途:將一串以‘$’結(jié)尾的字符串輸出</p><p> 參數(shù):DS:DX=字符串的首地址,定義要顯示的字符串,字符串以‘$’結(jié)尾</p&g
65、t;<p> 調(diào)用:INT 21H</p><p><b> 返回:無</b></p><p> 2. 程序源代碼及注釋</p><p> DATA SEGMENT</p><p> ZONGZUOBIAO DB 13,13,11,10,10,9,20,6,9,5,3,2,1,9,19,9,10,
66、11,11,11,12,13,14</p><p> HENGZUOBIAO DB 1,2,3,4,5,6,6,7,7,8,9,10,11,12,12,13,14,15,16,17,18,19,20</p><p> SHULIANG DB 2,4,6,7,7,8,3,1,14,18,20,20,23,7,4,6,5,4,4,4,3,2,1</p><p>&l
67、t;b> FLAG DW 0</b></p><p> YIDONG DB 0</p><p> YANSHI dw 0</p><p> TISHI db 'press S to start,B to bound,P to pause, C to continue, Q to quit' ,'$'</
68、p><p><b> DATA ENDS</b></p><p> STACK SEGMENT</p><p> DW 200 dup(0)</p><p> STACK ENDS</p><p> CODE SEGMENT</p><p> ASSUME CS:C
69、ODE,DS:DATA,SS:STACK</p><p><b> START:</b></p><p> MOV AX,DATA</p><p><b> MOV DS,AX</b></p><p> MOV AH,0 ;0號(hào)功能</p><p> MO
70、V AL,03H ;設(shè)置80×25的彩色文本方式</p><p><b> INT 10H</b></p><p> MOV AH,02H ;顯示提示信息</p><p><b> MOV DH,24</b></p><p><b> MOV DL,10<
71、;/b></p><p><b> MOV BH,0</b></p><p><b> INT 10H </b></p><p> LEA DX,TISHI</p><p> MOV AH,09H</p><p><b> INT 21H</
72、b></p><p> MOV FLAG,0</p><p> MOV YIDONG,40</p><p><b> ;描繪小鳥圖像</b></p><p><b> LOOP4: </b></p><p> MOV AH,02H ;設(shè)置光標(biāo)位置&l
73、t;/p><p> LEA BX,HENGZUOBIAO</p><p> MOV CX,FLAG </p><p><b> ADD BX,CX</b></p><p> MOV DH,[BX] ;DH代表行號(hào)</p><p> LEA BX,ZONGZUOBIAO</p&g
74、t;<p><b> ADD BX,CX</b></p><p> MOV DL,[BX] ;DL代表列號(hào)</p><p> ADD DL,YIDONG </p><p> MOV BH,0 ;表示頁(yè)號(hào)</p><p><b> INT 10H </b>
75、</p><p> MOV AH,09H ;在當(dāng)前光標(biāo)位置處寫字符和屬性</p><p> MOV AL,01H ;設(shè)置字符ASCII碼</p><p> LEA BX,SHULIANG</p><p> MOV DX,FLAG</p><p><b> ADD BX,DX</
76、b></p><p> MOV CL,[BX] ;CX代表寫入字符數(shù)</p><p><b> MOV CH,0</b></p><p><b> MOV BH,0</b></p><p> MOV BL,16H ;字符屬性</p><p><
77、;b> INT 10H </b></p><p><b> INC FLAG</b></p><p> CMP FLAG,22 ;表示要寫23次</p><p> JNA LOOP4 </p><p><b> ;判斷操作步驟</b></p><
78、;p><b> LOOP5:</b></p><p> MOV AH,01H</p><p><b> INT 16H</b></p><p> CMP AL,'Q'</p><p><b> JZ TUICHU</b></p>&
79、lt;p> CMP AL,'S'</p><p><b> JNZ LOOP5</b></p><p> MOV YIDONG,40</p><p><b> LOOP3:</b></p><p> MOV FLAG,0</p><p><
80、;b> ;小鳥飛行程序</b></p><p><b> LOOP2: </b></p><p> MOV AH,02H ;置光標(biāo)位置</p><p> LEA BX,HENGZUOBIAO</p><p> MOV CX,FLAG</p><p><b
81、> ADD BX,CX</b></p><p> MOV DH,[BX]</p><p> LEA BX,ZONGZUOBIAO</p><p><b> ADD BX,CX</b></p><p> MOV DL,[BX]</p><p> ADD DL,YIDON
82、G ;縱坐標(biāo)(相當(dāng)于列)加上40</p><p> MOV BH,0 ;選擇在第0頁(yè)</p><p><b> INT 10H </b></p><p> MOV AH,09H ;在當(dāng)前光標(biāo)位置處寫字符和屬性</p><p> MOV AL,01H ;字符的ASCII碼值</
83、p><p> LEA BX,SHULIANG</p><p> MOV DX,FLAG</p><p><b> ADD BX,DX</b></p><p> MOV CL,[BX] ;cx為寫入的字符數(shù)</p><p><b> MOV CH,0</b><
84、/p><p> MOV BH,0 ;寫入的頁(yè)數(shù)</p><p> MOV BL,16H ;字符屬性</p><p><b> INT 10H </b></p><p><b> INC FLAG</b></p><p> CMP FLAG,22&l
85、t;/p><p> JNA LOOP2 </p><p> MOV AH,01H ;檢驗(yàn)有沒有字符輸入</p><p><b> INT 16H</b></p><p> JZ JIXU ;表示沒有鍵盤操作時(shí)ZF=1,跳轉(zhuǎn)到繼續(xù)飛行</p><p><b> MO
86、V AH,0H</b></p><p><b> INT 16H</b></p><p> CMP AL,'Q' ;當(dāng)按鍵為Q時(shí),退出程序</p><p><b> JZ TUICHU</b></p><p> CMP AL,'B'</
87、p><p> JZ Fasheng</p><p> CMP AL,'P' ;當(dāng)按鍵為P時(shí),則跳到等待子程序處</p><p> JZ Dengdai</p><p><b> JNZ JIXU </b></p><p><b> ;發(fā)聲程序</b&g
88、t;</p><p><b> Fasheng:</b></p><p> MOV AL,0B6H</p><p> OUT 43H,AL</p><p> MOV AX,34DCH</p><p> MOV DX,12H</p><
89、p> DIV BX</p><p> OUT 42H,AL</p><p> MOV AL,AH</p><p> OUT 42H,AL</p><p> IN AL,61H</p><p> OR AL,03H</p><
90、p> OUT 61H,AL</p><p><b> MOV AH,0H</b></p><p><b> INT 16H</b></p><p> CMP AL,'P'</p><p> JZ DENGDAI</p><p>
91、 JMP FASHENG</p><p> ;按鍵為P時(shí)等待程序</p><p> DENGDAI: ;如果按下P表示一個(gè)死循環(huán),直到按下Q或者C</p><p> MOV AH,0H ;讀取一個(gè)字符</p><p><b> INT 16H</b></p><p&
92、gt; CMP AL,'Q'</p><p><b> JZ TUICHU</b></p><p> CMP AL,'C'</p><p> JNZ DENGDAI</p><p> ;按鍵為C時(shí)繼續(xù)程序 </p><p><b> JIX
93、U: </b></p><p> mov YANSHI,5</p><p> CALL Delay</p><p> MOV AH,02H</p><p><b> MOV DX,0</b></p><p><b> MOV BH,0</b><
94、;/p><p><b> INT 10H</b></p><p> MOV AH,09H ;清除前一幀圖像 </p><p> MOV AL,' '</p><p> MOV CX,1700</p><p> MOV BL,07H</p><p>
95、;<b> INT 10H</b></p><p> DEC YIDONG</p><p> CMP YIDONG,3 ;飛行到縱坐標(biāo)為3處時(shí)將重新從開始出飛行</p><p><b> JA LOOP3</b></p><p> MOV YIDONG,40</p><
96、;p> JMP LOOP3 </p><p><b> ;延時(shí)子程序</b></p><p> Delay Proc Far </p><p><b> push DX</b></p><p><b> push CX</b></p>&l
97、t;p> XOR AX,AX</p><p><b> INT 1AH</b></p><p> MOV CS:Times,DX</p><p> MOV CS:Times[2],CX</p><p> Read_Time: XOR AX,AX</p><p><b
98、> INT 1AH</b></p><p> SUB DX,CS:Times</p><p> SBB CX,CS:Times[2]</p><p> CMP DX,YANSHI</p><p> JB Read_Time</p><p><b> pop CX<
99、;/b></p><p><b> pop DX</b></p><p><b> ret </b></p><p> Times dw 0,0</p><p> Delay EndP</p><p><b> TUICHU:</b&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小鳥動(dòng)畫程序課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)---動(dòng)畫心匯編程序設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 《微機(jī)原理》課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)----打字練習(xí)程序
- 微機(jī)原理課程設(shè)計(jì)---字符串動(dòng)畫顯示
- 微機(jī)原理課程設(shè)計(jì)報(bào)告21
- 微機(jī)原理課程設(shè)計(jì)-圖形變換程序
- 微機(jī)原理課程設(shè)計(jì)--加密解密程序設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)--代碼轉(zhuǎn)換程序設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)報(bào)告--秒表設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)----進(jìn)制轉(zhuǎn)換程序設(shè)計(jì)
- 微機(jī)原理-課程設(shè)計(jì)電風(fēng)扇程序設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)報(bào)告(電子秒表)
- 微機(jī)原理課程設(shè)計(jì)簡(jiǎn)易的編碼解碼程序
- 微機(jī)原理課程設(shè)計(jì)--中斷實(shí)現(xiàn)雙機(jī)通訊程序
評(píng)論
0/150
提交評(píng)論