2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  題 目: 鍵盤電子樂器</p><p><b>  初始條件:</b></p><p>  掌握匯編語言程序設(shè)計(jì)方法,所設(shè)計(jì)的程序運(yùn)行后可通過鍵盤控制,滿足系統(tǒng)功能,并實(shí)現(xiàn)該系統(tǒng)設(shè)計(jì)方案。在DOS,windows,匯編軟件環(huán)境下運(yùn)行。</p

2、><p>  要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p>  1.設(shè)計(jì)一個(gè)用鍵盤演奏音樂的程序,計(jì)時(shí)器系統(tǒng)設(shè)計(jì)編程定時(shí)輸出――電子音調(diào),用pc機(jī)內(nèi)部8253time~使揚(yáng)聲器發(fā)聲。用匯編語言對(duì)8253進(jìn)行編程,使其OUT0上輸出一定的頻率,將其一定頻率輸出到喇叭上,演奏出不同的音節(jié)。pc機(jī)的數(shù)字鍵(1-7)作為電子音調(diào)的音調(diào)選擇</

3、p><p>  2. 課程設(shè)計(jì)說明書應(yīng)包括:</p><p><b>  a)設(shè)計(jì)任務(wù)及要求</b></p><p><b>  b)方案比較及認(rèn)證</b></p><p>  c)程序設(shè)計(jì)基本思想,程序流程圖,部分源程序及注解</p><p>  d)調(diào)試記錄及結(jié)果分析<

4、/p><p><b>  e)參考資料</b></p><p>  f)附錄:全部源程序清單</p><p><b>  g)總結(jié)</b></p><p><b>  時(shí)間安排:</b></p><p>  2011年元月07日--元月09日 選題、查

5、閱資料和方案設(shè)計(jì)</p><p>  2011年元月10日--元月14日 編程</p><p>  2011年元月15日--元月16日 調(diào)試程序,改進(jìn)與提高</p><p>  2011年元月17日 撰寫課程設(shè)計(jì)報(bào)告(有調(diào)試過程及結(jié)果的截屏)</p><p>  2011年元月18日

6、 答辯和交課程設(shè)計(jì)報(bào)告</p><p>  指導(dǎo)教師簽名: 2011 年 元 月 6 日</p><p>  系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b>  摘要</b></p><p>  利用PC上的定時(shí)/計(jì)數(shù)

7、芯片8253A控制PC揚(yáng)聲器發(fā)聲。編寫內(nèi)核模塊,直接操作揚(yáng)聲器相關(guān)端口,或字符設(shè)備驅(qū)動(dòng),供應(yīng)用程序調(diào)用,用鍵盤使其發(fā)出不同的聲音。</p><p>  關(guān)鍵字:8253定時(shí)器中斷</p><p><b>  目錄</b></p><p><b>  1. 方案比較3</b></p><p>

8、<b>  2.芯片介紹4</b></p><p>  2.1 8255芯片簡述4</p><p>  2.1.1 8255三種方式下工作4</p><p>  2.2 8253芯片簡述5</p><p>  2.2.1 8253六種工作方式5</p><p>  3.通用發(fā)聲程序7&

9、lt;/p><p>  4.音調(diào)與頻率和時(shí)間的關(guān)系10</p><p><b>  附錄12</b></p><p><b>  附錄一:12</b></p><p><b>  附錄二:13</b></p><p><b>  附錄三:

10、25</b></p><p><b>  附錄四:26</b></p><p><b>  附錄五:32</b></p><p><b>  參考文獻(xiàn)33</b></p><p><b>  鍵盤電子樂器</b></p>&

11、lt;p><b>  方案比較</b></p><p>  1.1 發(fā)聲程序循環(huán)</p><p>  優(yōu)點(diǎn):簡單,易于思維</p><p>  缺點(diǎn):程序過于長,比較繁瑣</p><p>  1.2 調(diào)用宏,進(jìn)行發(fā)聲</p><p><b>  優(yōu)點(diǎn):程序短</b>&l

12、t;/p><p><b>  缺點(diǎn):不易想到</b></p><p><b>  2.芯片介紹</b></p><p>  2.1 8255芯片簡述</p><p>  8255可編程外圍接口芯片是Intel公司生產(chǎn)的通用并行I/O接口芯片,它具有A、B、C三個(gè)并行接口,+5V單電源供電。</p&

13、gt;<p>  2.1.1 8255三種方式下工作</p><p>  方式0—基本輸入/輸出方式</p><p>  方式1—選通輸入/輸出方式</p><p>  方式2—雙向選通輸入/輸出方式</p><p>  2.1.2 8255引腳圖</p><p>  如右圖所示,各引腳功能如:</

14、p><p>  D7~D0——與CPU側(cè)連接的八條雙向數(shù)據(jù)線;</p><p>  WR(低電平有效)— 寫輸入信號(hào);</p><p>  RD(低電平有效)— 讀輸入信號(hào);</p><p>  CS(低電平有效)— 片選輸入信號(hào);</p><p>  A0、A1 — 片內(nèi)寄存器選擇輸入信號(hào);</p><

15、;p>  PA7~PA0 — A口外設(shè)雙向數(shù)據(jù)線;</p><p>  PB7~PB0 — B口外設(shè)雙向數(shù)據(jù)線;</p><p>  PC7~PC0 — C口外設(shè)雙向數(shù)據(jù)線; RESET — 復(fù)位輸入信號(hào)</p><p>  2.1.3 8255端口地址</p><p>  2.2 8253芯片簡述</p><p&

16、gt;  8253可編程定時(shí)/計(jì)數(shù)器是Intel公司生產(chǎn)的通用外圍芯片之一,有3個(gè)獨(dú)立的十六位計(jì)數(shù)器,技術(shù)頻率范圍為0~2MHz,它所有的技術(shù)方式和操作方式都通過編程控制。</p><p>  2.2.1 8253六種工作方式</p><p>  方式0:計(jì)數(shù)結(jié)束中斷</p><p>  方式1:可編程頻率發(fā)生器</p><p><b&

17、gt;  方式2:頻率發(fā)生器</b></p><p>  方式3:方波頻率發(fā)生器</p><p>  方式4:軟件觸發(fā)的選通信號(hào)</p><p>  方式5:硬件觸發(fā)的選通信號(hào)</p><p>  2.2.2 8253引腳圖</p><p>  如上圖所示,各引腳功能如下:</p><p

18、>  D7~D0 — 八條雙向數(shù)據(jù)線;</p><p>  WR(低電平有效)— 寫輸入信號(hào);</p><p>  RD(低電平有效)— 讀輸入信號(hào);</p><p>  CS(低電平有效)— 片選輸入信號(hào);</p><p>  A0、A1 — 片內(nèi)寄存器地址輸入信號(hào);</p><p>  CLK — 計(jì)數(shù)輸入,

19、用于輸入定時(shí)基準(zhǔn)脈沖或計(jì)數(shù)脈沖;</p><p>  OUT — 輸出信號(hào),以相應(yīng)的電平指示計(jì)數(shù)的完成,或輸出脈沖波形;</p><p>  GATE — 選通輸入,用于啟動(dòng)或禁止計(jì)數(shù)器的操作,以使計(jì)數(shù)器和計(jì)測(cè)對(duì)象同步。2.2.3 8253端口地址</p><p>  本次課設(shè)要求用8253做。計(jì)算機(jī)中可以利用8253/54定時(shí)器來驅(qū)動(dòng)揚(yáng)聲器。連接到揚(yáng)聲器上的是定時(shí)

20、器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)聲器電路。下面是控制揚(yáng)聲器的代碼:</p><p>  INAL,61H;get the current setting of port B</p><p&

21、gt;  MOV AH,AL;save it</p><p>  ORAL,00000011B;make PB0=1 and PB1=1</p><p>  OUT61H,AL;turn the speaker on</p><p>  ......;how long the beep sound goes here<

22、/p><p>  MOVAL,AH;get the original setting of port B</p><p>  OUT61H,AL;turn off the speaker</p><p>  對(duì)于IBM PC兼容機(jī)來說,無論是8086,80486還是Pentium,驅(qū)動(dòng)揚(yáng)聲器的過程是相同的。至于音調(diào)發(fā)出的時(shí)間量(音長),則取決于它

23、的延遲的時(shí)間,這個(gè)延遲時(shí)間可以在PC機(jī)的80x86主處理器的幫助下實(shí)現(xiàn)。</p><p><b>  3.通用發(fā)聲程序</b></p><p>  BIOS中的BEEP子程序能根據(jù)BX中給出的計(jì)數(shù)值控制8253/54定時(shí)器,產(chǎn)生頻率為896Hz的聲音。實(shí)際上BEEP是一個(gè)很好的通用發(fā)聲程序。首先,BEEP程序只能產(chǎn)生896Hz的聲音,通用發(fā)聲程序應(yīng)能產(chǎn)生任一頻率的聲音

24、。其次BEEP產(chǎn)生聲音的持續(xù)時(shí)間(音長)只能是0.5s的倍數(shù),我們希望聲音的持續(xù)時(shí)間更易于調(diào)整,例如是10ms的倍數(shù)。</p><p>  給計(jì)數(shù)器2裝入計(jì)數(shù)值533H就能產(chǎn)生896Hz的聲音(1.1931MHz/896Hz=1331=533H),同樣,產(chǎn)生其他頻率聲音的計(jì)數(shù)值也可以用下式計(jì)算出來:</p><p>  假設(shè)發(fā)聲頻率存放在DI寄存器中,下面的指令使AX中得到送往定時(shí)器2的計(jì)

25、數(shù)值:</p><p>  MOVDX,12H</p><p>  MOVAX,348CH</p><p><b>  DIVDI</b></p><p>  利用CPU來產(chǎn)生延遲時(shí)間是最常用的一種方法,但對(duì)8088/86,80286,386,486以及Pentium來說,它們產(chǎn)生的延遲時(shí)間都是不一樣的。對(duì)基于80

26、88/86的PC/XT,PS/2等PC機(jī),可用下面的程序來產(chǎn)生時(shí)間延遲:</p><p><b>  MOVCX,N</b></p><p>  DELAY:LOOPDELAY</p><p>  在8088/86CPU中,執(zhí)行一條LOOP指令需要17個(gè)時(shí)鐘周期,因此,執(zhí)行上面的指令大約需要N*17*T時(shí)鐘周期。</p>

27、<p>  在BIOS中,利用上述方法來產(chǎn)生250ms延遲時(shí)間的程序如下:</p><p><b>  SUBCX,CX</b></p><p>  G7: LOOPG7;</p><p>  如果要產(chǎn)生與10ms成倍數(shù)的延遲時(shí)間,可在BX寄存器中放入倍數(shù)。例如,要產(chǎn)生1s的持續(xù)時(shí)間,則在BX中放入100,以控制L

28、OOP指令執(zhí)行次,</p><p>  也就是10ms的100倍。指令如下:</p><p>  MOVBX,100</p><p>  WAIT: MOVCX,2800</p><p>  DELAY: LOOPDELAY</p><p><b>  DECBX</b><

29、/p><p><b>  JNZWAIT</b></p><p><b>  上述流程圖為:</b></p><p><b>  圖2-1程序流程圖</b></p><p>  下面在修改后的BEEP程序的基礎(chǔ)上,為8088/86編寫一個(gè)任一頻率(由DI指定)和任一持續(xù)時(shí)間(由C

30、X和BX指定)的通用發(fā)聲程序。此程序包括三個(gè)步驟:</p><p>  在8253/54中的43端口送一個(gè)控制字0B6H(10110110B),該控制字對(duì)定時(shí)器2進(jìn)行初始化,使定時(shí)器2準(zhǔn)備接收計(jì)數(shù)初值。</p><p>  在在8253/54中的42端口(Timer2)裝入一個(gè)16位的計(jì)數(shù)值(533H*896/頻率),以建立將要產(chǎn)生的聲音頻率。</p><p>  

31、把輸出端口61H的0/1兩位置1,發(fā)出聲音。</p><p>  GENSOUND PROC NEAR </p><p>  ;**********************************</p><p><b>  PUSH AX </b></p><p><b>  PUSH BX </b&g

32、t;</p><p><b>  PUSH CX </b></p><p><b>  PUSH DX </b></p><p><b>  PUSH DI </b></p><p>  ;**********************************</p>

33、<p>  MOV AL,0B6H;寫8253的控制字 選中8253通道1讀寫16位工作方式3二進(jìn)制計(jì)數(shù)方式 </p><p>  OUT 43H,AL ;向8253中寫入上述功能的控制字</p><p>  MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值</p><p>

34、  MOV AX,348ch ;1193100HZ/freq</p><p>  DIV DI ;value of freq</p><p>  OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 </p><p>  MOV AL,AH </p><p>  OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 &

35、lt;/p><p>  IN AL,61H;從61h號(hào)端口讀取PB口現(xiàn)在的狀態(tài)</p><p>  MOV AH,AL ;將PB口的狀態(tài)放進(jìn)AH</p><p>  OR AL,3 ;將AL低兩位置1</p><p>  OUT 61H,AL;向61h號(hào)端口寫入一個(gè)字節(jié),打開揚(yáng)聲器</p><p>

36、;<b>  WAIT1: </b></p><p>  MOV CX,2000;3314 </p><p>  call waitf </p><p><b>  DELAY1: </b></p><p><b>  DEC BX </b></p><

37、;p>  JNZ WAIT1 </p><p>  MOV AL,AH ;recover value of port </p><p>  OUT 61H,AL;從61h號(hào)端口讀入一個(gè)字節(jié)</p><p>  ;***********************************</p><p><b>  PO

38、P DI </b></p><p><b>  POP DX </b></p><p><b>  POP CX </b></p><p><b>  POP BX </b></p><p><b>  POP AX </b></p>

39、;<p>  ;***********************************</p><p><b>  RET </b></p><p>  GENSOUND ENDP</p><p>  WAITF PROC NEAR </p><p><b>  PUSH AX </b>

40、;</p><p><b>  WAITF1: </b></p><p>  IN AL,61H </p><p>  AND AL,10H ;check pb4</p><p>  CMP AL,AH ;did it change</p><p>  JE WAITF1 ;wait

41、for change</p><p>  MOV AH,AL ;save the new pb4 status</p><p>  LOOP WAITF1 ;continue until cx becomes 0</p><p><b>  POP AX </b></p><p><b>  RET &l

42、t;/b></p><p>  WAITF ENDP</p><p>  GENSOUND程序能產(chǎn)生19~65536Hz的聲音,這個(gè)頻率的下限19Hz是使除法不產(chǎn)生溢出的最小的DI值((DX)=12H=18d<19)。其上限65536Hz是多余的,因?yàn)槿藗冏罡吣苈牭降囊纛l約為20000HZ。</p><p>  4.音調(diào)與頻率和時(shí)間的關(guān)系</p&g

43、t;<p>  利用計(jì)算機(jī)控制發(fā)聲的原理,可以編寫演奏樂曲的程序。在一首樂曲中,每個(gè)音符的音高和音長與頻率和節(jié)拍有關(guān)。</p><p>  圖3-1音頻頻率對(duì)照表</p><p>  組成樂曲的每個(gè)音符的頻率值和持續(xù)時(shí)間是樂曲程序發(fā)生所需要的兩個(gè)數(shù)據(jù)。音符的頻率可以從圖3-1中查表得到,但實(shí)際上送入計(jì)數(shù)器2的是輸入頻率1.1932MHz與音符頻率相除的值,通用發(fā)聲程序SOUN

44、DF的前半部分就是完成這個(gè)計(jì)算,并將計(jì)數(shù)值送入計(jì)數(shù)器2的功能。</p><p><b>  ;</b></p><p>  MOV AL,0B6H;寫8253的控制字 選中8253通道1讀寫16位工作方式3二進(jìn)制計(jì)數(shù)方式 </p><p>  OUT 43H,AL ;向8253中寫入上述功能的控制字</p>&l

45、t;p>  MOV DX,12H ;假定發(fā)生頻率存放在DI寄存器中,下面的三行指令使AX中得到送往定時(shí)器2的計(jì)數(shù)值</p><p>  MOV AX,348ch ;1193100HZ/freq</p><p>  DIV DI ;value of freq</p><p>  OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 <

46、;/p><p>  MOV AL,AH </p><p>  OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中 </p><p>  ;.................................</p><p><b>  附錄</b></p><p><b>  附錄一:

47、</b></p><p><b>  程序一流程圖</b></p><p><b>  附錄二:</b></p><p><b>  程序一</b></p><p>  DATA SEGMENT PARA 'DATA'</p>

48、<p>  INFO1 DB 0DH,0AH,'WELCOME YOU TO COME HERE!$'</p><p>  INFO2 DB 0DH,0AH,'this is a Piano program!$'</p><p>  INFO3 DB 0DH,0AH,'please press!$'<

49、/p><p>  INFO4 DB 0DH,0AH,'INPUT ERROR!$'</p><p>  INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'</p><p>  MUSLIST DB 0DH,0AH,'1262'</p><p>  D

50、B 0DH,0AH,'2294'</p><p>  DB 0DH,0AH,'3330'</p><p>  DB 0DH,0AH,'4347'</p><p>  DB 0DH,0AH,'5392'</p><p>  DB 0DH,0AH,'6440'

51、;</p><p>  DB 0DH,0AH,'7494'</p><p>  DB 0DH,0AH,'8524'</p><p>  DB 0dh,0ah,'$'</p><p>  MUS_FREG1 DW 262,-1</p><p>  MUS_TIME1 D

52、W 50,25</p><p>  MUS_FREG2 DW 294,-1</p><p>  MUS_TIME2 DW 50,25</p><p>  MUS_FREG3 DW 330,-1</p><p>  MUS_TIME3 DW 50,25</p><p>  MUS_FREG4 DW 347,-1</

53、p><p>  MUS_TIME4 DW 50,25</p><p>  MUS_FREG5 DW 392,-1</p><p>  MUS_TIME5 DW 50,25</p><p>  MUS_FREG6 DW 440,-1</p><p>  MUS_TIME6 DW 50,25</p><p&

54、gt;  MUS_FREG7 DW 494,-1</p><p>  MUS_TIME7 DW 50,25</p><p>  MUS_FREG8 DW 524,-1</p><p>  MUS_TIME8 DW 50,25</p><p>  DATA ENDS</p><p>  STACK SE

55、GMENT PARA STACK 'STACK'</p><p>  DB 200 DUP ('STACK')</p><p>  STACK ENDS</p><p>  CODE SEGMENT</p><p>  ASSUME DS:DATA,SS:STACK,CS:CODE</p

56、><p>  MAIN PROC FAR</p><p>  MOV AX,DATA</p><p><b>  MOV DS,AX</b></p><p>  MOV AH,0;設(shè)置顯示方式</p><p>  MOV AL,4;設(shè)置顯示方式</p><p>

57、;  INT 10H;調(diào)用顯示器中斷</p><p>  MOV AH,0BH;設(shè)置背景顏色或彩色組</p><p>  MOV BH,0;設(shè)置背景顏色</p><p>  MOV BL,2;藍(lán)色</p><p>  INT 10H;調(diào)用顯示器中斷</p><p>  MOV AH,0BH;

58、設(shè)置背景顏色或彩色組</p><p>  MOV BH,01H;設(shè)置字體顏色</p><p>  MOV BL,1;黑色</p><p>  INT 10H;調(diào)用顯示器中斷</p><p>  ;*****定義一個(gè)宏*****</p><p>  ;功能09H功能描述:輸出一個(gè)字符串到標(biāo)準(zhǔn)輸出設(shè)備上。&l

59、t;/p><p>  ;如果輸出操作被重定向,那么,將無法判斷磁盤已滿入口參數(shù):AH=09HDS:DX=待輸出字符的地址</p><p>  ;說明:待顯示的字符串以’$’作為其結(jié)束標(biāo)志</p><p>  SHOW MACRO b</p><p>  LEA DX,b</p><p>  MOV AH

60、,9</p><p>  INT 21H</p><p><b>  ENDM</b></p><p>  ;**********************</p><p>  show INFO1;顯示字符串</p><p>  show INFO2;顯示字符串</p>

61、;<p>  show INFO3;顯示字符串</p><p>  show MUSLIST;顯示字符串</p><p>  INPUT: MOV AH,01H;設(shè)置光標(biāo)類型</p><p>  INT 21H;調(diào)用中斷,返回dos</p><p>  CMP AL,'Q';是否按下Q&

62、lt;/p><p>  JZ retu;是則跳轉(zhuǎn),不是繼續(xù)向下運(yùn)行</p><p>  CMP AL,'1';是否按下1</p><p>  JNZ B0;不是1跳轉(zhuǎn),是繼續(xù)向下運(yùn)行</p><p>  CALL MUSIC1;跳轉(zhuǎn)到MUSIC1程序</p><p>  JMP EXIT1

63、;跳轉(zhuǎn)EXIT1</p><p>  B0: CMP AL,'2';是否按下2</p><p>  JNZ C0;不是2則跳轉(zhuǎn),是繼續(xù)運(yùn)行</p><p>  CALL MUSIC2;調(diào)用 MUSIC2程序</p><p>  JMP EXIT1;跳轉(zhuǎn)到EXIT1</p><

64、p>  C0: CMP AL,'3';是否按下3</p><p>  JNZ D0;不是3跳轉(zhuǎn),是繼續(xù)運(yùn)行</p><p>  CALL MUSIC3;跳轉(zhuǎn)到MUSIC3程序</p><p><b>  JMP EXIT1</b></p><p>  D0: CMP

65、 AL,'4';是否按下4</p><p>  JNZ E0;不是4跳轉(zhuǎn),是繼續(xù)運(yùn)行</p><p>  CALL MUSIC4;跳轉(zhuǎn)到MUSIC4程序</p><p><b>  JMP EXIT1</b></p><p>  E0: CMP AL,'5';是否

66、按下5</p><p>  JNZ F0;不是5跳轉(zhuǎn),是繼續(xù)運(yùn)行</p><p>  CALL MUSIC5;跳轉(zhuǎn)到MUSIC5程序</p><p><b>  JMP EXIT1</b></p><p>  F0: CMP AL,'6';是否按下6</p><p

67、>  JNZ G0;不是6跳轉(zhuǎn),是繼續(xù)運(yùn)行</p><p>  CALL MUSIC6;跳轉(zhuǎn)到MUSIC6程序</p><p><b>  JMP EXIT1</b></p><p>  G0: CMP AL,'7';是否按下7</p><p>  JNZ H0;不是7跳

68、轉(zhuǎn),是繼續(xù)運(yùn)行</p><p>  CALL MUSIC7;跳轉(zhuǎn)到MUSIC7程序</p><p><b>  JMP EXIT1</b></p><p>  H0: CMP AL,'8';是否按下8</p><p>  JNZ exit;不是8跳轉(zhuǎn),是繼續(xù)運(yùn)行</p>

69、<p>  CALL MUSIC8;跳轉(zhuǎn)到MUSIC8程序</p><p>  EXIT1: show INFO5;顯示字符</p><p>  JMP INPUT ;跳轉(zhuǎn)到INPUT</p><p>  EXIT: </p><p>  call clear;跳轉(zhuǎn)到clear</p>&

70、lt;p>  show INFO4;顯示字符</p><p>  show INFO5;顯示字符</p><p>  show INFO1;顯示字符</p><p>  show INFO2;顯示字符</p><p>  show INFO3;顯示字符</p><p>  show MUSLI

71、ST;顯示字符</p><p>  jmp input;跳轉(zhuǎn)到INPUT</p><p>  RETU: MOV AH,4CH;帶返回碼返回</p><p>  INT 21H;調(diào)用dos中斷</p><p>  MAIN ENDP </p><p>  MUSIC1 PROC NEAR&

72、lt;/p><p><b>  PUSH DS</b></p><p><b>  SUB AX,AX</b></p><p><b>  PUSH AX</b></p><p>  LEA SI,MUS_FREG1;puts the freg table offset in

73、SI</p><p>  LEA BP,DS:MUS_TIME1;puts the time table offset in BP</p><p>  FREG1: MOV DI,[SI];read next frequency</p><p>  CMP DI,-1;end of tone</p><p>  

74、JE END_MUS1;if yes,exit</p><p>  MOV DX,DS:[BP];else,fetch the duration</p><p>  MOV BX,5400</p><p>  CALL GENSOUND;play the note</p><p>  ADD SI,2;upd

75、ate the table pointer</p><p><b>  ADD BP,2</b></p><p>  JMP FREG1 ;go process next note</p><p><b>  END_MUS1:</b></p><p><b>  RET&l

76、t;/b></p><p>  MUSIC1 ENDP</p><p>  GENSOUND PROC NEAR</p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH

77、 CX</b></p><p><b>  PUSH DX</b></p><p><b>  PUSH DI</b></p><p>  MOV AL,0B6H;寫8253的控制字 選中8253通道1讀寫16位工作方式3二進(jìn)制計(jì)數(shù)方式</p><p>  OUT 43H,AL

78、;向8253中寫入上述功能的控制字</p><p>  MOV DX,12H</p><p>  MOV AX,533H*896</p><p><b>  DIV DI</b></p><p>  OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中</p><p><b>  

79、MOV AL,AH</b></p><p>  OUT 42H,AL;將AL中數(shù)放到8253計(jì)數(shù)器中</p><p>  IN AL,61H;從61h號(hào)端口讀入一個(gè)字節(jié)</p><p><b>  MOV AH,AL</b></p><p><b>  OR AL,3</b>&l

80、t;/p><p>  OUT 61H,AL;向61h號(hào)端口寫入一個(gè)字節(jié)</p><p>  WAIT1: MOV CX,8FF0H;向CX中寫入數(shù)</p><p>  DELAY1: LOOP DELAY1;延時(shí)</p><p>  DEC BX;BX-1</p><p>  JNZ WAIT1

81、;運(yùn)算結(jié)果不為0,則ZF=0,則轉(zhuǎn)移</p><p>  MOV AL,AH</p><p>  OUT 61H,AL;從61h號(hào)端口讀入一個(gè)字節(jié)</p><p><b>  POP DI</b></p><p><b>  POP DX</b></p><p>&l

82、t;b>  POP CX</b></p><p><b>  POP BX</b></p><p><b>  POP AX</b></p><p><b>  RET</b></p><p>  GENSOUND ENDP</p><p&

83、gt;  MUSIC2 PROC NEAR</p><p><b>  PUSH DS</b></p><p><b>  SUB AX,AX</b></p><p><b>  PUSH AX</b></p><p>  LEA SI,MUS_FREG2</p&g

84、t;<p>  LEA BP,DS:MUS_TIME2</p><p>  FREG2: MOV DI,[SI]</p><p><b>  CMP DI,-1</b></p><p>  JE END_MUS2</p><p>  MOV DX,DS:[BP]</p><p>

85、;  MOV BX,1400</p><p>  CALL GENSOUND</p><p><b>  ADD SI,2</b></p><p><b>  ADD BP,2</b></p><p><b>  JMP FREG1</b></p><p&g

86、t;<b>  END_MUS2:</b></p><p><b>  RET</b></p><p>  MUSIC2 ENDP</p><p>  MUSIC3 PROC NEAR</p><p><b>  PUSH DS</b></p><

87、;p><b>  SUB AX,AX</b></p><p><b>  PUSH AX</b></p><p>  LEA SI,MUS_FREG3</p><p>  LEA BP,DS:MUS_TIME3</p><p>  FREG3: MOV DI,[SI]</p>

88、<p><b>  CMP DI,-1</b></p><p>  JE END_MUS3</p><p>  MOV DX,DS:[BP]</p><p>  MOV BX,1400</p><p>  CALL GENSOUND</p><p><b>  ADD SI

89、,2</b></p><p><b>  ADD BP,2</b></p><p><b>  JMP FREG1</b></p><p><b>  END_MUS3:</b></p><p><b>  RET</b></p>

90、<p>  MUSIC3 ENDP</p><p>  MUSIC4 PROC NEAR</p><p><b>  PUSH DS</b></p><p><b>  SUB AX,AX</b></p><p><b>  PUSH AX</b><

91、;/p><p>  LEA SI,MUS_FREG4;puts the freg table offset in SI</p><p>  LEA BP,DS:MUS_TIME4;puts the time table offset in BP</p><p>  FREG4: MOV DI,[SI];read next frequency&l

92、t;/p><p>  CMP DI,-1;end of tone</p><p>  JE END_MUS4;if yes,exit</p><p>  MOV DX,DS:[BP];else,fetch the duration</p><p>  MOV BX,5400</p><p>  

93、CALL GENSOUND;play the note</p><p>  ADD SI,2;update the table pointer</p><p><b>  ADD BP,2</b></p><p>  JMP FREG4 ;go process next note</p><p

94、><b>  END_MUS4:</b></p><p><b>  RET</b></p><p>  MUSIC4 ENDP</p><p>  MUSIC5 PROC NEAR</p><p><b>  PUSH DS</b></p>&

95、lt;p><b>  SUB AX,AX</b></p><p><b>  PUSH AX</b></p><p>  LEA SI,MUS_FREG5;puts the freg table offset in SI</p><p>  LEA BP,DS:MUS_TIME5;puts the time

96、 table offset in BP</p><p>  FREG5: MOV DI,[SI];read next frequency</p><p>  CMP DI,-1;end of tone</p><p>  JE END_MUS5;if yes,exit</p><p>  MOV DX,DS:

97、[BP];else,fetch the duration</p><p>  MOV BX,5400</p><p>  CALL GENSOUND;play the note</p><p>  ADD SI,2;update the table pointer</p><p><b>  ADD BP

98、,2</b></p><p>  JMP FREG5 ;go process next note</p><p><b>  END_MUS5:</b></p><p><b>  RET</b></p><p>  MUSIC5 ENDP</p><

99、;p>  MUSIC6 PROC NEAR</p><p><b>  PUSH DS</b></p><p><b>  SUB AX,AX</b></p><p><b>  PUSH AX</b></p><p>  LEA SI,MUS_FREG6;p

100、uts the freg table offset in SI</p><p>  LEA BP,DS:MUS_TIME6;puts the time table offset in BP</p><p>  FREG6: MOV DI,[SI];read next frequency</p><p>  CMP DI,-1;end o

101、f tone</p><p>  JE END_MUS6;if yes,exit</p><p>  MOV DX,DS:[BP];else,fetch the duration</p><p>  MOV BX,5400</p><p>  CALL GENSOUND;play the note</p>

102、<p>  ADD SI,2;update the table pointer</p><p><b>  ADD BP,2</b></p><p>  JMP FREG6 ;go process next note</p><p><b>  END_MUS6:</b></p&

103、gt;<p><b>  RET</b></p><p>  MUSIC6 ENDP</p><p>  MUSIC7 PROC NEAR</p><p><b>  PUSH DS</b></p><p><b>  SUB AX,AX</b><

104、;/p><p><b>  PUSH AX</b></p><p>  LEA SI,MUS_FREG7;puts the freg table offset in SI</p><p>  LEA BP,DS:MUS_TIME7;puts the time table offset in BP</p><p> 

105、 FREG7: MOV DI,[SI];read next frequency</p><p>  CMP DI,-1;end of tone</p><p>  JE END_MUS7;if yes,exit</p><p>  MOV DX,DS:[BP];else,fetch the duration</p>

106、<p>  MOV BX,5400</p><p>  CALL GENSOUND;play the note</p><p>  ADD SI,2;update the table pointer</p><p><b>  ADD BP,2</b></p><p>  JMP FR

107、EG7 ;go process next note</p><p><b>  END_MUS7:</b></p><p><b>  RET</b></p><p>  MUSIC7 ENDP</p><p>  MUSIC8 PROC NEAR</p>&

108、lt;p><b>  PUSH DS</b></p><p><b>  SUB AX,AX</b></p><p><b>  PUSH AX</b></p><p>  LEA SI,MUS_FREG8;puts the freg table offset in SI</p>

109、;<p>  LEA BP,DS:MUS_TIME8;puts the time table offset in BP</p><p>  FREG8: MOV DI,[SI];read next frequency</p><p>  CMP DI,-1;end of tone</p><p>  JE END_MUS8

110、;if yes,exit</p><p>  MOV DX,DS:[BP];else,fetch the duration</p><p>  MOV BX,5400</p><p>  CALL GENSOUND;play the note</p><p>  ADD SI,2;update the ta

111、ble pointer</p><p><b>  ADD BP,2</b></p><p>  JMP FREG8 ;go process next note</p><p><b>  END_MUS8:</b></p><p><b>  RET</b>&l

112、t;/p><p>  MUSIC8 ENDP</p><p>  clear proc near</p><p><b>  push ax</b></p><p><b>  push bx</b></p><p><b>  push cx</b>

113、</p><p><b>  push dx</b></p><p>  mov ah,6;讀當(dāng)前光標(biāo)位置設(shè)置</p><p>  mov al,0;上滾行數(shù)</p><p>  mov ch,0;上滾窗口左上角的行、列號(hào)</p><p>  mov cl,0;上滾窗口左上

114、角的行、列號(hào)</p><p>  mov dh,24;上滾窗口右下角的行號(hào)</p><p>  mov dl,79;上滾窗口右下角的列號(hào)</p><p>  mov bh,7;空白行的屬性</p><p>  int 10h;調(diào)用顯示器中斷</p><p><b>  pop dx<

115、/b></p><p><b>  pop cx</b></p><p><b>  pop bx</b></p><p><b>  pop ax</b></p><p><b>  ret</b></p><p>  cl

116、ear endp</p><p>  CODE ENDS</p><p><b>  END MAIN</b></p><p><b>  附錄三:</b></p><p><b>  程序二流程圖</b></p><p><b> 

117、 附錄四:</b></p><p><b>  程序二</b></p><p>  DATA SEGMENT </p><p>  msg DB 0DH,0AH,'[ 1 2 3 4 5 6 7 ]'</p><p>  DB 0DH,0AH,'[ q w e r t y u ]

118、9;</p><p>  DB 0DH,0AH,'[ a s d f g h j ]'</p><p>  DB 0DH,0AH,'_________________'</p><p>  DB 0DH,0AH,'9: EXIT' </p><p>  DB 0DH,0AH,'_____

119、____________','$' </p><p>  ;********音調(diào)******后面用到-1判斷音樂播是否放完</p><p>  sound_0 DW -1;sound_0 DW -1</p><p>  sound_11 DW 131,-1;sound_11 DW 441,-1 </p><p>

120、  sound_12 DW 147,-1;sound_12 DW 495,-1</p><p>  sound_13 DW 165,-1;sound_13 DW 556,-1</p><p>  sound_14 DW 175,-1;sound_14 DW 589,-1</p><p>  sound_15 DW 196,-1;sound_15 DW 661

121、,-1</p><p>  sound_16 DW 220,-1;sound_16 DW 742,-1 </p><p>  sound_17 DW 247,-1;sound_17 DW 833,-1 </p><p>  sound_21 DW 524,-1</p><p>  sound_22 DW 588,-1</p>

122、<p>  sound_23 DW 660,-1</p><p>  sound_24 DW 698,-1</p><p>  sound_25 DW 784,-1</p><p>  sound_26 DW 880,-1</p><p>  sound_27 DW 988,-1</p><p>  sou

123、nd_1 DW 262,-1;sound_1 DW 882,-1 </p><p>  sound_2 DW 294,-1;sound_2 DW 990,-1 </p><p>  sound_3 DW 330,-1;sound_3 DW 1112,-1</p><p>  sound_4 DW 349,-1;sound_4 DW 1178,-1 </

124、p><p>  sound_5 DW 392,-1;sound_5 DW 1322,-1 </p><p>  sound_6 DW 440,-1;sound_6 DW 1484,-1 </p><p>  sound_7 DW 492,-1;sound_7 DW 1655,-1</p><p>  time DW 10;time

125、 DW 50</p><p>  DATA ENDS </p><p>  ;************************</p><p>  STACK SEGMENT </p><p>  Db 200 DUP ('STACK') </p><p>  STACK ENDS </p>

126、<p>  ;************************</p><p>  CODE SEGMENT </p><p>  ASSUME DS:DATA,SS:STACK,CS:CODE </p><p><b>  START: </b></p><p>  MOV AX,DATA </p&

127、gt;<p><b>  MOV DS,AX</b></p><p>  MOV AH,00H ;設(shè)置顯示方式</p><p>  MOV AL,12H;設(shè)置顯示方式</p><p>  INT 10H;調(diào)用顯示器中斷8</p><p>  ;*****定義一個(gè)宏***** </p

128、><p>  ;功能09H功能描述:輸出一個(gè)字符串到標(biāo)準(zhǔn)輸出設(shè)備上。</p><p>  ;如果輸出操作被重定向,那么,將無法判斷磁盤已滿入口參數(shù):AH=09HDS:DX=待輸出字符的地址</p><p>  ;說明:待顯示的字符串以’$’作為其結(jié)束標(biāo)志</p><p>  SHOW MACRO b </p><p>&l

129、t;b>  LEA DX,b </b></p><p><b>  MOV AH,9 </b></p><p><b>  INT 21H </b></p><p><b>  ENDM</b></p><p>  ;********一個(gè)聲音宏********

130、</p><p>  onesound macro soundis,jumpis,letteris</p><p>  CMP AL,letteris </p><p>  JNZ jumpis </p><p>  LEA SI,soundis</p><p>  LEA BP,DS:time</p>

131、<p>  CALL MUSIC </p><p>  JMP input </p><p><b>  ENDM</b></p><p><b>  show msg</b></p><p>  INPUT: MOV AH,01H;設(shè)置光標(biāo)類型 </p><p&

132、gt;  INT 21H ;調(diào)用中斷,返回dos</p><p>  CMP AL,'9';是否按下9</p><p>  jnz go;按下9則轉(zhuǎn)移</p><p>  mov ah,4ch;帶返回碼結(jié)束</p><p>  int 21h;調(diào)用DOS中斷</p><p&

133、gt;  go: onesound sound_11,a0,'a';'q'調(diào)用宏</p><p>  a0: onesound sound_12,b0,'s';'w'調(diào)用宏</p><p>  b0: onesound sound_13,c0,'d';'e'調(diào)用宏</p&

134、gt;<p>  c0: onesound sound_14,d0,'f';'r'調(diào)用宏</p><p>  d0: onesound sound_15,e0,'g';'t'調(diào)用宏</p><p>  e0: onesound sound_16,f0,'h';'y'

135、調(diào)用宏</p><p>  f0: onesound sound_17,g0,'j';'u'調(diào)用宏</p><p>  g0: onesound sound_1,h0,'q';'1'調(diào)用宏</p><p>  h0: onesound sound_2,i0,'w';'

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論