樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)匯編_第1頁(yè)
樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)匯編_第2頁(yè)
樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)匯編_第3頁(yè)
樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)匯編_第4頁(yè)
樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)匯編_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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、學(xué) 號(hào): 0120910340913課 程 設(shè) 計(jì)課程名稱匯編語言程序設(shè)計(jì)題 目樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)學(xué) 院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí)0909班姓 名王世創(chuàng)指導(dǎo)教師伍新華2011年12月30日目 錄課程設(shè)計(jì)任務(wù)書11、實(shí)驗(yàn)內(nèi)容及要求12、實(shí)驗(yàn)原理12.1 通用發(fā)聲程序原理12.2 樂曲的頻率和節(jié)拍33、方案設(shè)計(jì)及說明4 3.1 設(shè)計(jì)實(shí)現(xiàn)及功能4 3.2 流程圖44、詳細(xì)設(shè)計(jì)6 4.1 程序段說明64.2 主要的宏和過程實(shí)現(xiàn)6 DISPLAY顯示宏.6 4.2.2 ADDRESS顯示宏.6 4.2.3 MUSIC顯示宏.7 4.2.4 GENSOUND通用發(fā)聲程序.8 4.2

2、.5 WAITF延時(shí)程序.9 4.2.5 EXIT退出.105、調(diào)試過程及實(shí)驗(yàn)結(jié)果分析10 5.1 調(diào)試過程10 5.5實(shí)驗(yàn)結(jié)果116、設(shè)計(jì)心得與改進(jìn)方案12 6.1注意事項(xiàng)12 6.2 改進(jìn)方案13 6.3 心得體會(huì)137、參考文獻(xiàn)138、程序清單14課程設(shè)計(jì)任務(wù)書學(xué)生姓名: 王世創(chuàng) 專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院0909 指導(dǎo)教師: 伍新華 工作單位:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 題目: 樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)初始條件:理論:完成了匯編語言程序設(shè)計(jì)課程,對(duì)微機(jī)系統(tǒng)結(jié)構(gòu)和80系列指令系統(tǒng)有了較深入的理解,已掌握了匯編語言程序設(shè)計(jì)的基本方法和技巧。實(shí)踐:完成了匯編語言程序設(shè)計(jì)的4個(gè)實(shí)驗(yàn),熟悉了匯編語言

3、程序的設(shè)計(jì)環(huán)境并掌握了匯編語言程序的調(diào)試方法。要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)進(jìn)一步理解和掌握程序直接控制I/O方式,掌握計(jì)算機(jī)發(fā)聲程序的設(shè)計(jì)。具體的設(shè)計(jì)任務(wù)及要求:1采用位觸發(fā)方式編寫程序,使計(jì)算機(jī)發(fā)出音響并演奏樂曲(例如兩只老虎等)。1) 進(jìn)一步理解程序直接控制I/O方式和位觸發(fā)方式控制聲音的工作原理。2) 一首樂曲是由不同頻率和節(jié)拍的音調(diào)組成,因此控制脈沖的頻率和持續(xù)時(shí)間是編寫樂曲程序的關(guān)鍵。根據(jù)已知的音符頻率對(duì)照表,設(shè)置樂曲的頻率表和節(jié)拍時(shí)間表;3) 編寫程序并調(diào)試通過。2了解定時(shí)器的工作原理,掌握利用定時(shí)器產(chǎn)生聲音的方法,使計(jì)算機(jī)演奏

4、樂曲(例如兩只老虎等)。編寫程序并調(diào)試通過。在完成設(shè)計(jì)任務(wù)后,按要求撰寫課程設(shè)計(jì)說明書;對(duì)課程設(shè)計(jì)說明書的具體要求請(qǐng)見課程設(shè)計(jì)指導(dǎo)書。閱讀資料:1)IBMPC匯編語言程序設(shè)計(jì)實(shí)驗(yàn)教程3.1節(jié)2)IBMPC匯編語言程序設(shè)計(jì)(第2版)10.4節(jié),10.5節(jié)時(shí)間安排:設(shè)計(jì)安排一周:周1、周2:完成系統(tǒng)分析及設(shè)計(jì)。周3、周4:完成程序調(diào)試,和驗(yàn)收。周5:撰寫課程設(shè)計(jì)報(bào)告。指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)1實(shí)驗(yàn)內(nèi)容及要求1進(jìn)一步理解和掌握程序直接控制I/O方式,掌握計(jì)算機(jī)發(fā)聲程序的設(shè)計(jì)。具體的設(shè)計(jì)任務(wù)及要求:1) 進(jìn)一步理解程序直接控制I/O方式和位觸

5、發(fā)方式控制聲音的工作原理。2) 一首樂曲是由不同頻率和節(jié)拍的音調(diào)組成,因此控制脈沖的頻率和持續(xù)時(shí)間是編寫樂曲程序的關(guān)鍵。根據(jù)已知的音符頻率對(duì)照表,設(shè)置樂曲的頻率表和節(jié)拍時(shí)間表;3) 編寫程序并調(diào)試通過。2了解定時(shí)器的工作原理,掌握利用定時(shí)器產(chǎn)生聲音的方法,使計(jì)算機(jī)演奏樂曲(例如兩只老虎等)。編寫程序并調(diào)試通過2.實(shí)驗(yàn)原理2.1 通用發(fā)聲程序原理 PC機(jī)發(fā)聲系統(tǒng)以8254的2號(hào)計(jì)數(shù)器為核心。系統(tǒng)初始化時(shí),2號(hào)計(jì)數(shù)器I作在“方波發(fā)生器”方式,初值為二進(jìn)制數(shù),寫入順序?yàn)橄鹊秃蟾?,CLK2為1193182MHz,當(dāng)計(jì)數(shù)初值為533H時(shí),OUT2輸出的方波大約為900Hz,經(jīng)過簡(jiǎn)單的濾波之后,送至揚(yáng)聲器

6、。改變1.4號(hào)計(jì)數(shù)器的計(jì)數(shù)初值就可以使揚(yáng)聲器發(fā)出不同頻率的音響。ROM BIOS 中有個(gè)BEEP子程序,這能根據(jù)BL中組出的時(shí)間計(jì)數(shù)值控制8254定時(shí)器,產(chǎn)生持續(xù)時(shí)間為1個(gè)或幾個(gè)0.5秒,頻率為896HZ的聲音,我們可以利用并修改BEEP,使其產(chǎn)生任一頻率的聲音。為此我們需要做兩點(diǎn)修改,首先,BEEP程序只能產(chǎn)生896HZ的聲音,我們的通用發(fā)聲程序應(yīng)能產(chǎn)生任一頻率的聲音。其次,BEEP產(chǎn)生聲音的持續(xù)時(shí)間(音長(zhǎng))只能是0.5秒的倍數(shù),我們希望聲音的持續(xù)時(shí)間更易于調(diào)整,例如可以是10ms的倍數(shù)。我們知道BEEP能將計(jì)數(shù)值533H送給定時(shí)器2產(chǎn)生896HZ的聲音的,那么產(chǎn)生其它頻率聲音的時(shí)間計(jì)數(shù)值應(yīng)

7、為:533H896給定頻率=123280H給定頻率發(fā)聲程序包括3個(gè)步驟: (1)在8253中的42端口送一個(gè)控制字0B6H(10110110B),該控制字對(duì)定時(shí)器2進(jìn)行初始化,使定時(shí)器2準(zhǔn)備接收計(jì)數(shù)初值。(2)在8253中的42H端口(Timer2)裝入一個(gè)16位的計(jì)數(shù)值(533H895/頻率),以建立將要產(chǎn)生的聲音頻率。(3)把輸出端口61H的PB0、PB1兩位置1,發(fā)出聲音。對(duì)于發(fā)音部分。PC機(jī)上的大多數(shù)輸入/輸出(I/O)都是由主板上的8255(或8255A)可編程序外圍接口芯片(PPI)管理的。PPI包括3個(gè)8位寄存器,兩個(gè)用于輸入功能,一個(gè)用于輸出功能。輸入寄存器分配的I/O端口號(hào)為

8、60H和62H,輸出寄存器分配的I/O端口號(hào)為61H。由PPI輸出寄存器中的0、1兩位來選擇揚(yáng)聲器的驅(qū)動(dòng)方式。連接到揚(yáng)聲器上的是定時(shí)器2,從上圖可以看到,GATE2與端口61H的PB0相連,當(dāng)PB0=1時(shí),GATE2獲得高電平,使定時(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)聲器地聲。通過以下指令實(shí)現(xiàn): IN AL,61H OR AL,3 OUT 61H,AL 上面的指令用以打開揚(yáng)聲器,如要關(guān)閉揚(yáng)聲器時(shí)則為: AND AL,0F

9、CH OUT 61H,AL 當(dāng)從8255中采集到輸入的數(shù)據(jù)時(shí),需要確定相應(yīng)的頻率,所以在軟件編程時(shí)要建立一個(gè)數(shù)據(jù)表: TABLE DW 493,440,392,349,329,293,261 把相應(yīng)的頻率送到一個(gè)寄存器上,通過公式: 計(jì)數(shù)值=533H896 f=12348CH f 算出計(jì)數(shù)值,再把算得的計(jì)數(shù)值送給8253,就可產(chǎn)生所要頻率的方波。在把計(jì)數(shù)值送8253前,必須先把8253進(jìn)行初始化: MOV AL,0B6H OUT 43H,AL 使其選用通道2,工作在方式3下。就整個(gè)電路而言,接好電路后,通過軟件編程不斷地采集從8255口中輸入的信號(hào),而8個(gè)開關(guān)都接在8255的A口上,只要有開關(guān)

10、按下,就會(huì)采集到一個(gè)數(shù)據(jù),根據(jù)這個(gè)數(shù)據(jù)與事先編好的表對(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ā)聲的不同頻率的方波。2.2 樂曲的頻率和節(jié)拍 樂曲是按照一定的高低、長(zhǎng)短、強(qiáng)弱組成的音調(diào)。在一首樂曲中,每個(gè)音符的音高和音長(zhǎng)和頻率和節(jié)拍有關(guān)。每個(gè)音符的頻率值和持續(xù)時(shí)間是樂曲程序發(fā)聲需要的兩個(gè)必要數(shù)據(jù)。高音階從中C(263)到高C(523)

11、, 各個(gè)音階對(duì)應(yīng)的頻率如下所示: DW 263 - C DW 294 - D DW 330 - E DW 349 - F DW 392 - G DW 440 - A DW 494 - B DW 523 - C如果知道了樂曲的曲譜,就可以將每個(gè)音符的頻率和持續(xù)時(shí)間定義為兩個(gè)數(shù)據(jù)表,然后通過調(diào)用子程序?qū)⒈碇袛?shù)據(jù)取出,通過揚(yáng)聲器發(fā)聲。例如MERRY CHRISTMAS頻率表和節(jié)拍表如下所示:CHST_F dw 7 dup(330),392,262,294,330,4 dup(349),2 dup(330),330,294,294,262,294,392 dw 7 dup(330),392,262,2

12、94,330,4 dup(349),2 dup(330),392,392,349,294,262,0 CHST_T dw 2 dup(25,25,50),4 dup(25),100,2 dup(25,25,50) dw 4 dup(25),2 dup(50),2 dup(25,25,50) dw 4 dup(25),100,2 dup(25,25,50),4 dup(25),100其中,CHST_F為頻率表,CHST_T為節(jié)拍表,兩個(gè)表中的數(shù)據(jù)一一對(duì)應(yīng),每一組代表著樂曲中的一個(gè)音符,頻率表中以0作為結(jié)束的標(biāo)志。3.方案設(shè)計(jì)及說明3.1 設(shè)計(jì)實(shí)現(xiàn)及功能了解了樂曲演奏的原理,就可以開始設(shè)計(jì)方案。

13、首先,明確整個(gè)程序的結(jié)構(gòu)及各個(gè)程序段的結(jié)構(gòu)和功能,然后設(shè)計(jì)流程圖。按照要求,程序需要完成的功能如下所示:1. 程序需要通過定時(shí)器原理完成播放樂曲的功能,這是最基本的功能。2. 程序應(yīng)該有判斷用戶輸入是否符合規(guī)定,如果輸入不正確,應(yīng)該有所提示。并且能再次輸入。3.2 流程圖開始顯示提示信息接收鍵盤輸入是“Q”?是“A”?是“B”?退出程序?qū)⒁魳饭?jié)拍頻率地址導(dǎo)入ADDRESS調(diào)用MUSIC,播放音樂顯示錯(cuò)誤提示是是是否否否圖表 1 主程序流程圖說明:在進(jìn)入主界面的時(shí)候有3個(gè)選項(xiàng),分別是 A:music:Merry Christmas B:music:the boat on Taihu lake Q

14、: exit 通過選擇不同的選項(xiàng)進(jìn)入其子界面來實(shí)現(xiàn)不同的功能。4.詳細(xì)設(shè)計(jì)41 程序段說明1) DATA為數(shù)據(jù)段,其中存放在程序中所要顯示的提示選擇信息,還有樂曲的頻率表和節(jié)拍表,和鍵盤控制發(fā)聲對(duì)應(yīng)的音符表。2) CODE為代碼段,由于在整個(gè)程序中各個(gè)子程序都定義為NEAR,所以只需要有一個(gè)代碼段,各個(gè)子程序的定義及實(shí)現(xiàn)都放在其中。3) STACK為長(zhǎng)度為200的堆棧4.2主要的宏和過程的實(shí)現(xiàn)4.2.1 DISPLAY顯示宏為將事先定義的數(shù)據(jù)段字符串顯示在屏幕上,定一個(gè)參數(shù)為b的宏。將b的地址傳到DX。隨后調(diào)用DOS09號(hào)功能調(diào)用。將字符串顯示到屏幕。調(diào)用DISPLAY的實(shí)例為: DISPLA

15、Y INFO1 DISPLAY INFO2 DISPLAY INFO3 DISPLAY MUSLIST在此段代碼中,程序顯示提示作用的字符串和歌曲列表。DISPLAY宏具體實(shí)現(xiàn)如下:DISPLAY MACRO b LEA DX,b MOV AH,9 INT 21H ENDM4.2.2 ADDRESS音樂地址宏歌曲包含節(jié)拍和頻率。此處定義的音樂地址宏包含兩個(gè)參數(shù),將歌曲頻率地址導(dǎo)入SI將歌曲節(jié)拍導(dǎo)入BP。當(dāng)選擇不同的歌曲時(shí),主程序調(diào)用該宏,將用戶要求的歌曲的頻率和節(jié)拍導(dǎo)入,以便在MUSIC中實(shí)現(xiàn)發(fā)聲。音樂地址宏實(shí)現(xiàn)如下:ADDRESS MACRO A,B LEA SI,A LEA BP,DS:B

16、 ENDM4.2.3 MUSIC宏在ADDRESS中,程序已經(jīng)將歌曲的首個(gè)頻率地址和首個(gè)節(jié)拍地址分別導(dǎo)入SI、BP。為了檢測(cè)歌曲是否結(jié)束,在MUSIC中,首先將SI傳遞到DI,DI與-1相減,如等于0,則得出該頻率定義為-1 。在歌曲頻率表定義中將-1定為該歌曲結(jié)束標(biāo)志,此時(shí)MUSIC跳出結(jié)束。若該頻率不為-1。調(diào)用通用發(fā)生程序GENSOUND,將該音符按照頻率和節(jié)拍表發(fā)聲。發(fā)聲后SI、BP分別加2,跳轉(zhuǎn)到下一個(gè)音符的頻率和節(jié)拍,繼續(xù)檢測(cè)歌曲是否結(jié)束。如頻率不為0,繼續(xù)將該音符發(fā)聲,并循環(huán)此過程。具體實(shí)現(xiàn)方法如下:MUSIC PROC NEAR PUSH DS SUB AX,AX PUSH A

17、X FREG: MOV DI,SI CMP DI,0 JE END_MUS MOV BX,DS:BP CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG END_MUS: RET MUSIC ENDP4.2.4 通用發(fā)聲程序GENSOUND該發(fā)生程序是在修改BEEP發(fā)聲程序的基礎(chǔ)上,以實(shí)現(xiàn)為8088/86編寫一個(gè)任意頻率和任意持續(xù)時(shí)間的通用發(fā)聲程序。該程序包括以下三個(gè)步驟:(1)在8253/54 中的43端口送一個(gè)控制字0B6H(10110110B),該控制字對(duì)定時(shí)器2進(jìn)行初始化,使得定時(shí)器2準(zhǔn)備接受計(jì)數(shù)初值。(2)在8253/54中的42H端口裝入一個(gè)16位計(jì)數(shù)

18、值,已建立將要產(chǎn)生的聲音頻率。(3)把輸出端口61H的0、1兩位置1,發(fā)出聲音。具體實(shí)現(xiàn)如下:GENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H OUT 43H,AL MOV DX,12H MOV AX,348ch DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H MOV AH,AL OR AL,3 OUT 61H,AL WAIT1: MOV CX,3314 call waitf DELAY1: DEC BX JNZ WAIT1 MOV AL,AH OUT

19、61H,AL POP DI POP DX POP CX POP BX POP AX RET GENSOUND ENDP該GENSOUND程序能產(chǎn)生1965535Hz的聲音,這個(gè)頻率的下限是使除法不產(chǎn)生溢出的最小值。其上限65535是多余的,因?yàn)槿四苈牭降穆曇糇罡哳l率為20000Hz。此外一般情況下,GENSOUND程序產(chǎn)生的聲音不單單和頻率有關(guān),還和CPU有關(guān)。CPU工作頻率越高,時(shí)延越短,產(chǎn)生的聲音越急促。為了使程序產(chǎn)生一個(gè)與CPU工作頻率無關(guān)的合適時(shí)延,在MUSCI中調(diào)用了一個(gè)時(shí)間延時(shí)程序WAITF。4.2.5 WAITF延時(shí)程序80x86的各種處理器采取了666MHz的工作頻率,loop

20、指令的執(zhí)行時(shí)間在這些處理器上也不相同。為了建立一個(gè)與處理器無關(guān)的延時(shí),IBM采用了一種利用硬件產(chǎn)生時(shí)間延時(shí)的方法,即通過監(jiān)控端口61H和PB4,使PB4每15.08微秒觸發(fā)一次,一產(chǎn)生一個(gè)固定不變的時(shí)間基準(zhǔn)。在IBM PC AT BIOS 的WAITF子程序,就是一個(gè)產(chǎn)生Nx15.08微秒時(shí)間演示的程序。調(diào)用WAITF子程序時(shí),CX寄存器必須裝入15.08微秒的倍數(shù)N。利用WAITF子程序能獲得任意的時(shí)間延時(shí),而不必在考慮CPU的型號(hào)和工作頻率。具體實(shí)現(xiàn)如下:waitf proc near push ax waitf1: in al,61h and al,10h cmp al,ah je wa

21、itf1 mov ah,al loop waitf1 pop ax ret waitf endp4.2.6EXIT退出當(dāng)程序要求退出時(shí),主程序會(huì)調(diào)用RETU進(jìn)行退出。EXIT程序內(nèi)容實(shí)際為一個(gè)BIOS功能調(diào)用。RETU: MOV AH,4CH INT 21H 5.調(diào)試過程及實(shí)驗(yàn)結(jié)果分析5.1調(diào)試過程 1: 在剛開始顯示字符串的時(shí)候,應(yīng)該加上0DH,0AH換行,而且在字符串的最后應(yīng)該以$來結(jié)尾,然后調(diào)用DOS調(diào)用 INT 21H,來顯示字符串。調(diào)試中發(fā)現(xiàn),如果一個(gè)字符串末尾不加$的話,DOS調(diào)用會(huì)直接把之后定義的字符串也同時(shí)顯示出來,直到遇到$為止。這是由內(nèi)存的分配模式所決定的,同時(shí)定義的變量在

22、內(nèi)存中會(huì)處于相鄰位置。6:在WAITF中直接將CX初始化為3314,每次調(diào)用WAITF就能產(chǎn)生10ms的延遲,但要特別注意的是,如果WAITF中用到CX,首先應(yīng)該將CX壓棧(PUSH CX),返回之前出棧(POP CX)。 5.2實(shí)驗(yàn)結(jié)果圖1歡迎界面圖2錯(cuò)誤提示 圖3退出6.設(shè)計(jì)心得與改進(jìn)方案6.1 注意事項(xiàng)1. 在程序中,各個(gè)變量及標(biāo)號(hào)應(yīng)該有統(tǒng)一且明確的命名規(guī)范,例如頻率表的命名規(guī)則為:“MUS_FREGn”,節(jié)拍表的命名規(guī)則為:“MUS_TIMEn” 這樣能使代碼的可讀性大大增強(qiáng),且在編程中也能使邏輯更加清晰,增加編程效率。2. 不能一開始就開始編寫程序,而是應(yīng)該首先分析問題,設(shè)計(jì)出程序的

23、框架流程圖,明確各個(gè)程序段的功能,這樣能使效率提高并且能增強(qiáng)持續(xù)的邏輯性和可讀性。3. 在設(shè)計(jì)中應(yīng)該考慮全面,并且兼顧到各方面的問題。不能僅僅完成布置的任務(wù),應(yīng)該努力使程序更健壯,能夠處理錯(cuò)誤的輸入并且給出提示,而且應(yīng)該有更強(qiáng)的交互能力。4. 在做課程設(shè)計(jì)的過程中難免會(huì)出現(xiàn)這樣那樣的問題,因此要保持良好的心態(tài),在遇到問題時(shí)應(yīng)該仔細(xì)想問題的起因及解決方法,不能想都不想就直接放棄或者問人,這樣就失去了做報(bào)告的意義,因?yàn)樵诮鉀Q問題的過程中可以發(fā)現(xiàn)很多以前忽視的問題。發(fā)現(xiàn)問題,解決問題是我們的主要目的。 6.2 改進(jìn)方案 在播放一首樂曲中,可以增加一個(gè)按ESC按鍵中斷當(dāng)前播放并返回到主選擇界面的功能。

24、還可以考慮加入在線音樂練習(xí)功能,可以在鍵盤上自己彈奏音樂!這個(gè)功能看到被人實(shí)現(xiàn)過。6.3 心得體會(huì)從選題到程序成形可以運(yùn) 行,我收獲了好多。這個(gè)過程中我深感自己的專業(yè)知識(shí)不足所帶來的困難,使我知道要 想寫好匯編語言的程序, 必須認(rèn)真對(duì)待代碼的每一個(gè)細(xì)節(jié), 還必須熟練的掌握debug 命令,這對(duì)程序的調(diào)試是非常重要的。通過這次實(shí)際動(dòng)手能力的培養(yǎng),我進(jìn)一步熟 悉了匯編語言的結(jié)構(gòu)和使用方法,基本達(dá)到了能獨(dú)立閱讀、編制和調(diào)試一定規(guī)模的 匯編語言程序的水平。在這次學(xué)習(xí)中加強(qiáng)了我的上機(jī)操作能力,加強(qiáng)了我對(duì)匯編這門課程的認(rèn)識(shí),增強(qiáng)了我的學(xué)習(xí)積極性。匯編語言是一種面向機(jī)器的程序設(shè)計(jì)語言,是和計(jì)算機(jī)硬件結(jié)合 最

25、密切的語言,雖然程序設(shè)計(jì)語言的發(fā)展很快,但它是用戶能夠使用的最快和最 能發(fā)揮硬件功能的唯一的一種計(jì)算機(jī)語言。在匯編語言中使計(jì)算機(jī)發(fā)聲的方法作 為一個(gè)小的實(shí)用程序,具體的顯示了匯編語言的用途。我有了在以后的其他程 序中可以更熟練的運(yùn)用此方法來控制計(jì)算機(jī)的發(fā)聲進(jìn)行匯編課程設(shè)計(jì)的想法。在日后的學(xué)習(xí)中我要加強(qiáng)匯編語言的綜合應(yīng)用程序設(shè)計(jì)方法,提高匯編語言實(shí)際應(yīng) 用能力、增加計(jì)算機(jī)各方面的知識(shí)和運(yùn)用能力。7參考文獻(xiàn)1沈美明,溫冬嬋.IBMPC匯編語言程序設(shè)計(jì)(第2版).清華大學(xué)出版社,2001年8月.2沈美明,溫冬嬋.IBMPC匯編語言程序設(shè)計(jì)實(shí)驗(yàn)教程.清華大學(xué)出版社,2003年3月.8.程序清單;* 定

26、義一個(gè)宏顯示DISPLAY MACRO b LEA DX,b MOV AH,9 INT 21H ENDM ;*音樂地址宏 ADDRESS MACRO A,B LEA SI,A LEA BP,DS:B ;10ENDM ;* DATA SEGMENT INF01 DB 0DH,0AH,Welcome!$ INF02 DB 0DH,0AH,Here are some music$INF03 DB 0DH,0AH,Please choose one$ INF04 DB 0DH,0AH,Wrong input!$ INF05 DB 0DH,0AH,Please try again!$ MUSLIST D

27、B 0DH,0AH,A:music:Merry Christmas ;20 DB 0DH,0AH,B:music:the boat on Taihu lake DB 0DH,0AH,Q: exit db 0dh,0Ah,$ ;* 音樂一圣誕節(jié)快樂MUS_FREG1 dw 7 dup(330),392,262,294,330,4 dup(349),2 dup (330),330,294,294,262,294,392 dw 7 dup(330),392,262,294,330,4 dup(349),2 dup(330),392,392,349,294,262,0MUS_TIME1 dw 2 du

28、p(25,25,50),4 dup(25),100,2 dup(25,25,50) dw 4 dup(25),2 dup(50),2 dup(25,25,50) dw 4 dup(25),100,2 dup(25,25,50),4 dup(25),100 ;* *音樂二 太湖船MUS_FREG2 DW 330,392,330,294,330,392,330,294,330 DW 330,392,330,294,262,294,330,392,294,0MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3

29、 DUP(50,25,25),100 DATA ENDS ;*STACK SEGMENT DB 200 DUP (STACK)STACK ENDSCODE SEGMENT ;60 ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV aH, 0 MOV AL,00 INT 10H DISPLAY INF01 DISPLAY INF02 DISPLAY INF03 DISPLAY MUSLIST ;70 INPUT: ;控制播放的主程序 MOV AH,01H INT 21H Q: ;60 CMP AL,Q JZ RETUA: CMP AL,A JNZ B ADDRESS MUS_FREG1,MUS_TIME1 CALL MUSIC JMP EXIT1B: CMP AL,B JNZ EXIT ;70 ADDRESS

溫馨提示

  • 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論