2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(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、<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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論