版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 信息科學(xué)與技術(shù)學(xué)院</b></p><p><b> 微機(jī)原理與接口技術(shù)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 題目名稱: 音樂點(diǎn)歌 </p><p> 學(xué)生姓名: 11 &
2、lt;/p><p> 學(xué) 號(hào): 111 </p><p> 專業(yè)年級(jí): 111 </p><p> 指導(dǎo)教師: 111 </p><p> 時(shí) 間:2111 </p><p><b> 一 概述</b></p><p> 匯編語言是
3、計(jì)算機(jī)能夠提供給用戶使用的最快而有效的語言,也是能夠利用計(jì)算機(jī)所有特性并能直接控制硬件的唯一語言。借助于匯編程序,計(jì)算機(jī)本身可以自動(dòng)地把 匯編源程序翻譯成用機(jī)器語言表示的目的程序,從而實(shí)現(xiàn)了程序設(shè)計(jì)工作的部分自動(dòng)化。</p><p><b> 1課程設(shè)計(jì)的目的</b></p><p> 掌握一些程序設(shè)計(jì)的基本方法,要指導(dǎo)主程序,子程序以及推棧段的使用,.了解通用發(fā)
4、聲程序.了解與掌握定時(shí).計(jì)數(shù).音樂.頻率.時(shí)間之間的關(guān)系,學(xué)會(huì)用發(fā)聲程序的設(shè)計(jì)方法,學(xué)會(huì)用匯編語言編輯音樂程序.</p><p><b> 2課程設(shè)計(jì)的要求:</b></p><p> 其中可選五首以上歌曲。</p><p><b> 可以選速度 </b></p><p> 選音調(diào)(A~G調(diào)
5、;每音調(diào)之間大約相差1.12倍,既C調(diào)比D調(diào)的頻率高1.12倍)</p><p><b> 任意暫停</b></p><p><b> 界面修飾。</b></p><p><b> 二 總體方案設(shè)計(jì)</b></p><p> 2.1主程序流程圖:</p>
6、<p> Y N</p><p> Y N </p><p> Y </p><p> 圖1 主程序流程圖</p><p> 2.2Music子程序流程圖:</p><p> 圖2 Music子程序流程圖</
7、p><p> 2.3.發(fā)聲原理圖:</p><p> 圖3 發(fā)聲原理圖</p><p><b> 發(fā)聲原理:</b></p><p> 計(jì)算機(jī)有兩種產(chǎn)生聲音的方法,一種方法是通過I/O指令向設(shè)備寄存器(端口地址為61H)的第1位交替送1和0,使與第1位相連的揚(yáng)聲器脈沖門產(chǎn)生連續(xù)的脈沖電流,驅(qū)動(dòng)揚(yáng)聲器發(fā)出聲音。另一
8、種方法是利用8254(系統(tǒng)定時(shí)器)中的2號(hào)定時(shí)器向揚(yáng)聲器發(fā)送不同頻率的脈沖,使之產(chǎn)生音調(diào)高低不同的聲音,這種產(chǎn)生聲音的方法可使計(jì)算機(jī)演奏出各種樂曲。本程序選用定時(shí)器產(chǎn)生聲音。</p><p> ROM BIOS中的BEEP子程序能根據(jù)BL中給出的時(shí)間計(jì)數(shù)值控制8254定時(shí)器,產(chǎn)生持續(xù)時(shí)間為1個(gè)或幾個(gè)0.5秒、頻率為896HZ的聲音。通過對(duì)BEEP的修改,可以使其產(chǎn)生任一頻率的聲音。用匯編語言編寫的程序GENSO
9、UND,能使PC機(jī)發(fā)出指定頻率和指定延遲時(shí)間的聲音,它是一個(gè)很好的通用發(fā)聲程序。組成樂曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂曲發(fā)聲程序所必須的兩組數(shù)據(jù),知道了音調(diào)及頻率的關(guān)系后,就可以按照樂曲的樂譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編程依次取出表中的頻率值和時(shí)間值,調(diào)用GENSOUND程序發(fā)出各種聲音。</p><p> 但GENSOUND程序產(chǎn)生的聲音不僅與輸入頻率有關(guān),而且與CPU有關(guān)。如果80X
10、86的工作頻率為8MHZ(如IBM PS/ 2-25型),則T=125ns(1 /8MHz=125ns),那么上面程序產(chǎn)生的時(shí)間延遲就要短的多。在80286中,LOOP指令只需8個(gè)執(zhí)行周期,而不是17個(gè)執(zhí)行周期,這也會(huì)使延遲時(shí)間縮短很多。因此,從PC/ AT開始,對(duì)所有的80286,80386,80486和Intel Pentium計(jì)算機(jī),IBM都提供一種利用硬件產(chǎn)生時(shí)間延遲的方法,這種方法不僅與頻率無關(guān),也與CPU無關(guān)。方法是通過監(jiān)控
11、端口61H的PB4,使PB4每15.08us觸發(fā)一次,以產(chǎn)生一個(gè)固定不變的時(shí)間基準(zhǔn)。在IBM PC AT BIOS中的WAITF子程序,就是一個(gè)產(chǎn)生N×15.08us時(shí)間延遲的程序。調(diào)用WAITF子程序時(shí),CX寄存器必須裝入15.08us的倍數(shù)N。</p><p> 利用WAITF子程序能獲得任意的延遲時(shí)間,而再不必考慮CPU的型號(hào)和工作頻率。依此原理可以進(jìn)一步修改通用發(fā)聲程序GENSOUND,使其不
12、再依賴CPU的工作頻率。GENSOUND程序中的10ms延遲時(shí)間是通過執(zhí)行循環(huán)指令來獲得的,現(xiàn)在可以用WAITF子程序來取代它,計(jì)數(shù)值設(shè)置為663(10ms/ 15.08us=663)。本系統(tǒng)將修改后的通用子程序改名為SOUNDF,延遲時(shí)間表仍為10ms。</p><p><b> (二)編曲原理</b></p><p> 利用計(jì)算機(jī)控制發(fā)聲的原理,可以編寫演奏樂
13、曲的程序。樂曲是按照一定的高低、長(zhǎng)短和強(qiáng)弱關(guān)系組成的音調(diào)。在一首樂曲中,每個(gè)音符的音高和音長(zhǎng)與頻率和節(jié)拍有關(guān)。組成樂曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂曲程序發(fā)聲所需要的兩個(gè)數(shù)據(jù)。對(duì)于頻率值,用WaveCN中的信號(hào)發(fā)生器輸出262HZ、294HZ、 330HZ、 349HZ、392HZ、440HZ、494HZ、523HZ的信號(hào)相當(dāng)于C調(diào)的dou,ruai,mi,fa,sou,la,si,dou。而音符的持續(xù)時(shí)間是根據(jù)樂曲的速度及每個(gè)音符的
14、節(jié)拍數(shù)來確定的。在4/4(四四拍)中,四分音符為1拍,每小節(jié)4拍,全音符持續(xù)4拍,二分音符持續(xù)2拍,四分音符持續(xù)1拍。八分音符持續(xù)半拍等。如果給全音符分配1s(100×10ms)的時(shí)間,則二分音符的持續(xù)時(shí)間為0.5s(50×10ms),四分音符的持續(xù)時(shí)間為0.25s(25×10ms),八分音符的持續(xù)時(shí)間為0.125(12.5×10ms)。知道音調(diào)與頻率和時(shí)間的關(guān)系,就可以按照樂曲的曲譜將每個(gè)音符的
15、頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編寫程序依次取出表中的頻率值和時(shí)間值,調(diào)用SOUNDF程序發(fā)出各種聲音。</p><p> 這次課程設(shè)計(jì)的設(shè)計(jì)思想是在熟練掌握匯編程序的設(shè)計(jì)方法的基礎(chǔ)上,利用通用發(fā)生程序編寫音樂程序.組成音樂的每個(gè)音符的頻率值和持續(xù)時(shí)間是音樂程序發(fā)聲所需要的兩個(gè)數(shù)據(jù),根據(jù)音調(diào)與頻率和時(shí)間之間的關(guān)系,把要編輯的音樂的每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,進(jìn)而把它們寫入通用發(fā)聲程序,音樂程序
16、就完成。</p><p> 在編制此音樂演奏程序時(shí),應(yīng)該知道ROM BIOS 中有個(gè)BEEP子程序,這能根據(jù)BL中組出的時(shí)間計(jì)數(shù)值控制8254定時(shí)器,產(chǎn)生持續(xù)時(shí)間為1個(gè)或幾個(gè)0.5秒,頻率為896HZ的聲音,我們可以利用并修改BEEP,使其產(chǎn)生任一頻率的聲音。首先要了解計(jì)算機(jī)是如何產(chǎn)生聲音和樂曲的。找出相關(guān)程序源代碼,弄清楚各功能的環(huán)節(jié)間的聯(lián)系、聯(lián)接方法,搞清楚單調(diào)與頻率和時(shí)間的關(guān)系,利用計(jì)算機(jī)控制發(fā)聲的原理,
17、依照基本的算法思想寫程序,測(cè)試,更正,擴(kuò)充功能,修飾細(xì)節(jié)。</p><p> 本次設(shè)計(jì)在具體設(shè)計(jì)過程中的整體設(shè)計(jì)思路如下:</p><p><b> 該程序主要分成</b></p><p> 1.根據(jù)音階表和簡(jiǎn)譜為演奏的樂曲定義一個(gè)頻率表mus_freq和一個(gè)時(shí)間表mus_time。</p><p> 2.分別將
18、兩個(gè)表的偏移地址放入SI和BP。</p><p> lea si, mus_freq</p><p> lea bp, ds:mus_time</p><p> 3.從表中取出音符的頻率放入DI,取出音符的持續(xù)時(shí)間(實(shí)際上是10ms的倍數(shù))放入BX。</p><p> mov di, [si]</p><p>
19、 mov bx, ds:[bp]</p><p> 頻率表中最后一個(gè)數(shù)據(jù)-1作為樂曲的結(jié)束符,也可用其他的特殊值來代替。</p><p><b> 發(fā)聲原理</b></p><p> 計(jì)算機(jī)有兩種產(chǎn)生聲音的方法,一種方法是通過I/O指令向設(shè)備寄存器(端口地址為61H)的第1位交替送1和0,使與第1位相連的揚(yáng)聲器脈沖門產(chǎn)生連續(xù)的脈沖電流,
20、驅(qū)動(dòng)揚(yáng)聲器發(fā)出聲音。另一種方法是利用8254(系統(tǒng)定時(shí)器)中的2號(hào)定時(shí)器向揚(yáng)聲器發(fā)送不同頻率的脈沖,使之產(chǎn)生音調(diào)高低不同的聲音,這種產(chǎn)生聲音的方法可使計(jì)算機(jī)演奏出各種樂曲。本程序選用定時(shí)器產(chǎn)生聲音。</p><p> ROM BIOS中的BEEP子程序能根據(jù)BL中給出的時(shí)間計(jì)數(shù)值控制8254定時(shí)器,產(chǎn)生持續(xù)時(shí)間為1個(gè)或幾個(gè)0.5秒、頻率為896HZ的聲音。通過對(duì)BEEP的修改,可以使其產(chǎn)生任一頻率的聲音。用匯編
21、語言編寫的程序GENSOUND,能使PC機(jī)發(fā)出指定頻率和指定延遲時(shí)間的聲音,它是一個(gè)很好的通用發(fā)聲程序。組成樂曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂曲發(fā)聲程序所必須的兩組數(shù)據(jù),知道了音調(diào)及頻率的關(guān)系后,就可以按照樂曲的樂譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編程依次取出表中的頻率值和時(shí)間值,調(diào)用GENSOUND程序發(fā)出各種聲音。</p><p> 但GENSOUND程序產(chǎn)生的聲音不僅與輸入頻率有關(guān),而且
22、與CPU有關(guān)。如果80X86的工作頻率為8MHZ(如IBM PS/ 2-25型),則T=125ns(1 /8MHz=125ns),那么上面程序產(chǎn)生的時(shí)間延遲就要短的多。在80286中,LOOP指令只需8個(gè)執(zhí)行周期,而不是17個(gè)執(zhí)行周期,這也會(huì)使延遲時(shí)間縮短很多。因此,從PC/ AT開始,對(duì)所有的80286,80386,80486和Intel Pentium計(jì)算機(jī),IBM都提供一種利用硬件產(chǎn)生時(shí)間延遲的方法,這種方法不僅與頻率無關(guān),也與C
23、PU無關(guān)。方法是通過監(jiān)控端口61H的PB4,使PB4每15.08us觸發(fā)一次,以產(chǎn)生一個(gè)固定不變的時(shí)間基準(zhǔn)。在IBM PC AT BIOS中的WAITF子程序,就是一個(gè)產(chǎn)生N×15.08us時(shí)間延遲的程序。調(diào)用WAITF子程序時(shí),CX寄存器必須裝入15.08us的倍數(shù)N。</p><p> 利用WAITF子程序能獲得任意的延遲時(shí)間,而再不必考慮CPU的型號(hào)和工作頻率。依此原理可以進(jìn)一步修改通用發(fā)聲程序
24、GENSOUND,使其不再依賴CPU的工作頻率。GENSOUND程序中的10ms延遲時(shí)間是通過執(zhí)行循環(huán)指令來獲得的,現(xiàn)在可以用WAITF子程序來取代它,計(jì)數(shù)值設(shè)置為663(10ms/ 15.08us=663)。本系統(tǒng)將修改后的通用子程序改名為SOUNDF,延遲時(shí)間表仍為10ms。</p><p><b> ?。ǘ┚幥?lt;/b></p><p> 利用計(jì)算機(jī)控制發(fā)
25、聲的原理,可以編寫演奏樂曲的程序。樂曲是按照一定的高低、長(zhǎng)短和強(qiáng)弱關(guān)系組成的音調(diào)。在一首樂曲中,每個(gè)音符的音高和音長(zhǎng)與頻率和節(jié)拍有關(guān)。組成樂曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂曲程序發(fā)聲所需要的兩個(gè)數(shù)據(jù)。對(duì)于頻率值,用WaveCN中的信號(hào)發(fā)生器輸出262HZ、294HZ、 330HZ、 349HZ、392HZ、440HZ、494HZ、523HZ的信號(hào)相當(dāng)于C調(diào)的dou,ruai,mi,fa,sou,la,si,dou。而音符的持續(xù)時(shí)間是根
26、據(jù)樂曲的速度及每個(gè)音符的節(jié)拍數(shù)來確定的。在4/4(四四拍)中,四分音符為1拍,每小節(jié)4拍,全音符持續(xù)4拍,二分音符持續(xù)2拍,四分音符持續(xù)1拍。八分音符持續(xù)半拍等。如果給全音符分配1s(100×10ms)的時(shí)間,則二分音符的持續(xù)時(shí)間為0.5s(50×10ms),四分音符的持續(xù)時(shí)間為0.25s(25×10ms),八分音符的持續(xù)時(shí)間為0.125(12.5×10ms)。知道音調(diào)與頻率和時(shí)間的關(guān)系,就可以按
27、照樂曲的曲譜將每個(gè)音符的頻率和持續(xù)時(shí)間定義成兩個(gè)數(shù)據(jù)表,然后編寫程序依次取出表中的頻率值和時(shí)間值,調(diào)用SOUNDF程序發(fā)出各種聲音。</p><p> 5.系統(tǒng)的主要功能:給用戶提供5首已經(jīng)寫好的短曲,根據(jù)用戶的選擇演奏樂曲,演奏完一首樂曲后跳回起始狀態(tài),如此循環(huán),直到用戶輸入結(jié)束的信息為止。</p><p><b> 源程序:</b></p>
28、<p> ;**************************************************</p><p> STACK SEGMENT PARA STACK 'STACK'</p><p> DB 64 DUP('STACK...')</p><p> STACK ENDS</p>
29、<p> ;**************************************************</p><p> DSEG SEGMENT PARA 'DATA'</p><p> MESS1 DB 50 DUP(' '),'Now the music is <<Happy birthday to y
30、ou>> </p><p> ',13,10,'$'</p><p> MESS2 DB 50 DUP(' '),'Now the music is <<Mary had a little </p><p> lamb>>',13,10,'$'<
31、;/p><p> MESS3 DB 50 DUP(' '),'Now the music is <<Taihu boat>> </p><p> ',13,10,'$'</p><p> MESS4 DB 50 DUP(' '),'please
32、input the speed (s/q)',13,10,'$'</p><p> MESS5 DB 50 DUP(' '),'please input the yiliang (h/m/l)',13,10,'$'</p><p> MENU DB 5 DUP(13,10)</p><
33、p> DB 5 DUP(' '),'**************************************',13,10</p><p> DB 5 DUP(' '),'**1:Happy birthday to you; **',13,10</p><p> DB 5 DUP('
34、'),'**2:Mary had a little lamb; **',13,10</p><p> DB 5 DUP(' '),'**4:Exit; **',13,10</p><p> DB 5 DUP(' '),'**********
35、***************************',13,10</p><p> DB 5 DUP(' '),'please chioce the number of music:','$',13,10</p><p> change DB 125 DUP(' '),'error! please c
36、hange anther NO.: ','$'</p><p> MUS_FREG_l dw 262/2,262/2,294/2,262/2,349/2,330/2</p><p> dw 262/2,262/2,294/2,262/2,392/2,349/2</p><p> dw 262/2,262/2,523/2,440/2
37、,349/2,330/2,294/2</p><p> dw 466/2,466/2,440/2,262/2,392/2,349/2</p><p><b> dw -1</b></p><p> MUS_FREG_m dw 262,262,294,262,349,330</p><p> dw 262,2
38、62,294,262,392,349</p><p> dw 262,262,523,440,349,330,294</p><p> dw 466,466,440,262,392,349</p><p><b> dw -1</b></p><p> MUS_FREG_h dw 262*2,262*2,2
39、94*2,262*2,349*2,330*2</p><p> dw 262*2,262*2,294*2,262*2,392*2,349*2</p><p> dw 262*2,262*2,523*2,440*2,349*2,330*2,294*2</p><p> dw 466*2,466*2,440*2,262*2,392*2,349*2</p>
40、;<p><b> dw -1</b></p><p> MUS_TIME_s dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,200*3/2</p><p> dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,200*3/2</p><p> dw 50
41、*3/2,50*3/2,100*3/2,100*3/2,100*3/2,100*3/2,300*3/2</p><p> dw 50*3/2,50*3/2,100*3/2,100*3/2,100*3/2,200*3/2</p><p> MUS_TIME_q dw 50,50,100,100,100,200</p><p> dw 50,50,100,100
42、,100,200</p><p> dw 50,50,100,100,100,100,300</p><p> dw 50,50,100,100,100,200</p><p> mus_freg1_l dw </p><p> 330*4/5,294*4/5,262*4/5,294*4/5,330*4/5,330*4/5,33
43、0*4/5</p><p> dw 294*4/5,294*4/5,294*4/5,330*4/5,392*4/5,392*4/5</p><p><b> dw </b></p><p> 330*4/5,294*4/5,262*4/5,294*4/5,330*4/5,330*4/5,330*4/5,330*4/5</p>
44、<p> dw 294*4/5,294*4/5,330*4/5,294*4/5,262*4/5</p><p><b> dw -1</b></p><p> mus_freg1_m dw 330,294,262,294,330,330,330</p><p> dw 294,294,294,330,392,392&
45、lt;/p><p> dw 330,294,262,294,330,330,330,330</p><p> dw 294,294,330,294,262</p><p><b> dw -1</b></p><p> mus_freg1_h dw 330*2,294*2,262*2,294*2,330*2,3
46、30*2,330*2</p><p> dw 294*2,294*2,294*2,330*2,392*2,392*2</p><p> dw 330*2,294*2,262*2,294*2,330*2,330*2,330*2,330*2</p><p> dw 294*2,294*2,330*2,294*2,262*2</p><p>
47、<b> dw -1</b></p><p> mus_time1_s dw 6 dup(25),50</p><p> dw 2 dup(25,25,50)</p><p> dw 12 dup(25),100</p><p> mus_time1_q dw 6 dup(20),40</p>
48、<p> dw 2 dup(20,20,40)</p><p> dw 12 dup(20),80</p><p><b> DSEG ENDS</b></p><p> ;**************************************************</p><p> CO
49、DE SEGMENT PARA 'DATA'</p><p> assume cs:code,ds:dseg,ss:stack</p><p> music proc far</p><p> mov ax,dseg</p><p><b> mov ds,ax</b></p>&l
50、t;p><b> rotate:</b></p><p> LEA DX,MENU</p><p> mov ah, 9 ;顯示</p><p><b> int 21h</b></p><p><b> chg:</b></p><p&g
51、t; mov ah,1 ;掃描接收字符</p><p><b> int 21h</b></p><p> cmp al,'1'</p><p><b> je one</b></p><p> cmp al,'2'</p><p&
52、gt;<b> je two</b></p><p> cmp al,'4'</p><p> je endmus</p><p> LEA DX,change</p><p><b> mov ah,09</b></p><p><b&g
53、t; int 21h</b></p><p><b> jmp chg</b></p><p><b> ENDMUS:</b></p><p> mov ax,4c00h</p><p><b> int 21h</b></p><p
54、><b> ONE: </b></p><p> lea dx,mess1</p><p><b> mov ah,09</b></p><p><b> int 21h</b></p><p> yindiao:lea dx,mess5</p>
55、<p><b> mov ah,09</b></p><p><b> int 21h</b></p><p><b> mov ah,01</b></p><p><b> int 21h</b></p><p> cmp al,
56、39;h'</p><p><b> je one_h</b></p><p> cmp al,'m'</p><p><b> je one_m</b></p><p> cmp al,'l'</p><p><b>
57、; je one_l</b></p><p> sudu:lea dx,mess4</p><p><b> mov ah,09</b></p><p><b> int 21h</b></p><p><b> mov ah,01</b></p&
58、gt;<p><b> int 21h</b></p><p> cmp al,'s'</p><p><b> je one_s</b></p><p> cmp al,'q'</p><p><b> je one_q</b
59、></p><p> one_h: LEA SI,mus_FREG_h</p><p><b> jmp sudu</b></p><p> one_m: LEA SI,MUS_FREG_m</p><p><b> jmp sudu</b></p><
60、p> one_l: LEA SI,MUS_FREG_l</p><p><b> jmp sudu</b></p><p> one_s: LEA BP,DS:MUS_TIME_s</p><p><b> JMP SOUND</b></p><p> one_q:
61、LEA BP,DS:MUS_TIME_q</p><p><b> JMP SOUND</b></p><p><b> two: </b></p><p> lea dx,mess2</p><p><b> mov ah,09</b></p><
62、p><b> int 21h</b></p><p> yindiao1:lea dx,mess5</p><p><b> mov ah,09</b></p><p><b> int 21h</b></p><p><b> mov ah,01&l
63、t;/b></p><p><b> int 21h</b></p><p> cmp al,'h'</p><p><b> je two_h</b></p><p> cmp al,'m'</p><p><b>
64、 je two_m</b></p><p> cmp al,'l'</p><p><b> je two_l</b></p><p> sudu1:lea dx,mess4</p><p><b> mov ah,09</b></p><p
65、><b> int 21h</b></p><p><b> mov ah,01</b></p><p><b> int 21h</b></p><p> cmp al,'s'</p><p><b> je two_s</b&
66、gt;</p><p> cmp al,'q'</p><p><b> je two_q</b></p><p> two_h: LEA SI,mus_FREG1_h</p><p><b> jmp sudu</b></p><p> tw
67、o_m: LEA SI,MUS_FREG1_m</p><p><b> jmp sudu</b></p><p> two_l: LEA SI,MUS_FREG1_l</p><p><b> jmp sudu</b></p><p> two_s: LEA BP,DS:
68、MUS_TIME1_s</p><p><b> JMP SOUND</b></p><p> two_q: LEA BP,DS:MUS_TIME1_q</p><p><b> SOUND:</b></p><p><b> freq:</b></p>
69、<p> mov di,[si]</p><p><b> cmp di,-1</b></p><p><b> je r</b></p><p> mov bx,ds:[bp]</p><p> call soundf</p><p><b&
70、gt; add si,2</b></p><p><b> add bp,2</b></p><p><b> jmp freq</b></p><p> r: JMP rotate</p><p> music endp</p><p> ;***
71、************************************************</p><p> soundf proc near</p><p> push ax</p><p> push bx</p><p> push cx</p><p> push dx
72、</p><p> push di</p><p> mov al,0b6h</p><p> out 43h,al</p><p> mov dx,12h</p><p> mov ax,348ch</p><p> div di<
73、;/p><p> out 42h,al</p><p> mov al,ah</p><p> out 42h,al</p><p> in al,61h</p><p> mov ah,al</p><p> or al,3</
74、p><p> out 61h,al</p><p><b> wait1:</b></p><p> mov cx,663</p><p> call waitf</p><p><b> delay:</b></p><p&g
75、t; loop delay</p><p> dec bx</p><p> jnz wait1</p><p> mov al,ah</p><p> out 61h,al </p><p> pop di</p><p> pop
76、 dx</p><p> pop cx</p><p> pop bx</p><p> pop ax</p><p><b> ret</b></p><p> soundf endp</p><p> waitf proc
77、 near</p><p> push ax</p><p> waitf1: in al,61h</p><p> and al, 10h</p><p> cmp al, ah</p><p> je waitf1</p><p> mov
78、 ah,al</p><p> loop waitf1</p><p> pop ax </p><p><b> ret</b></p><p> waitf endp</p><p> ;*****************************
79、**********************</p><p><b> code ends</b></p><p><b> end music</b></p><p><b> 總結(jié)體會(huì)</b></p><p> 一開始接到題目時(shí),感覺每道題都很難,真不知從何下手。但
80、我很早之前就對(duì)“音樂程序”產(chǎn)生了興趣,所以這次我選擇了“點(diǎn)歌系統(tǒng)”。乍看這四個(gè)字,我想到的是KTV那種點(diǎn)歌系統(tǒng),即可以根據(jù)歌手搜索歌曲,又可根據(jù)歌名拼音來搜索,還有插入與刪除操作等。心想挑戰(zhàn)性未免太高了吧?但看了課本第十章第五節(jié)的樂曲程序后,我明確了實(shí)驗(yàn)要求,對(duì)點(diǎn)歌系統(tǒng)的原理與設(shè)計(jì)有了初步了解,于是也就有了完成這個(gè)程序的信心。</p><p> 我用的編程軟件是MASM for Windows集成實(shí)驗(yàn)環(huán)境,它支
81、持Windows下32位匯編程序和DOS下16/32位匯編,還具有錯(cuò)誤信息自動(dòng)定位、關(guān)鍵字實(shí)時(shí)幫助、動(dòng)畫教程演示匯編指令的執(zhí)行過程、語法著色、WORD式的查找、替換、定位等功能,用起來非常便捷。其頗具特色的關(guān)鍵字實(shí)時(shí)幫助及動(dòng)畫教程演示尤為實(shí)用,在我編程的過程中我可以方便地看到匯編語言中各指令的用法、DOS及BIOS功能調(diào)用表、ASCII碼表、匯編語言錯(cuò)誤信息表等有常用信息。而動(dòng)畫教程演示,使各尋址方式的數(shù)據(jù)在寄存器中的運(yùn)轉(zhuǎn)過程更加明了清
82、晰。這軟件似乎濃縮了課本上的所有知識(shí),因此在使用的過程中加強(qiáng)了我對(duì)匯編語言程序設(shè)計(jì)的認(rèn)知。</p><p> 而通過對(duì)歌曲頻率表和時(shí)間節(jié)拍表的編寫,我不僅了解到音調(diào)與頻率和時(shí)間的關(guān)系,還對(duì)音樂上的知識(shí)有了更多的認(rèn)識(shí)。雖然我對(duì)音樂有興趣,但我?guī)缀跏遣欢魳贰.?dāng)我在課本上看到“四四拍”“四分音符”“全音符”“二分音符”等詞語以及那些樂譜時(shí),我真是傻眼了!看著那段話與那些圖片,很久也不明白它的意思。但后來通過網(wǎng)上的資
83、料和對(duì)程序的解讀分析,我明白了究竟要如何編寫樂曲的頻率表和時(shí)間節(jié)拍表。這也讓我明白了:所有知識(shí)都是從不懂到懂的,只要自己肯下功夫,就能學(xué)到更多。</p><p> 總的來說,本次實(shí)驗(yàn)讓我對(duì)計(jì)算機(jī)控制發(fā)聲的原理、音調(diào)與頻率和時(shí)間的關(guān)系、匯編語言的各指令、子程序的調(diào)用以及宏匯編等有了一定的認(rèn)知,程序的成功運(yùn)行讓我對(duì)匯編充滿了信心,并產(chǎn)生了濃厚的興趣。我渴望在下一次課程設(shè)計(jì)中,對(duì)匯編語言程序設(shè)計(jì)有更多的了解和更深刻的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)接口課程設(shè)計(jì)
- 微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)接口課程設(shè)計(jì)(電子鐘)
- 評(píng)分系統(tǒng)課程設(shè)計(jì)-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)接口技術(shù)課程設(shè)計(jì)
- 微機(jī)接口技術(shù)課程設(shè)計(jì)
- 微機(jī)接口課程設(shè)計(jì)---位移的測(cè)量
- 微機(jī)接口課程設(shè)計(jì)--交通燈設(shè)計(jì)
- 競(jìng)賽搶答器課程設(shè)計(jì)-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 競(jìng)賽搶答器課程設(shè)計(jì)-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 交通燈-微機(jī)接口課程設(shè)計(jì)報(bào)告
- 微機(jī)接口技術(shù)課程設(shè)計(jì)報(bào)告
- 《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)
- 微機(jī)接口電子鐘課程設(shè)計(jì)報(bào)告
- ktv點(diǎn)歌系統(tǒng)課程設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)--音樂演奏
- 微機(jī)原理課程設(shè)計(jì)--音樂演奏
- 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)
- 微機(jī)接口課程設(shè)計(jì)報(bào)告--數(shù)字鐘實(shí)驗(yàn)
- 微機(jī)系統(tǒng)與接口課程設(shè)計(jì)-電子琴
評(píng)論
0/150
提交評(píng)論