畢業(yè)設(shè)計(jì)---基于匯編語言與接口技術(shù)的音樂盒設(shè)計(jì)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p>  用計(jì)算機(jī)來解決實(shí)際問題,需要編寫程序。程序是由指令組成的,一條條指令規(guī)定了計(jì)算機(jī)究竟要執(zhí)行什么樣的操作,計(jì)算機(jī)只要按編寫的順序執(zhí)行完程序中的指令,問題也就解決了。匯編語言是一種功能很強(qiáng)的程序設(shè)計(jì)語言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語言。</p><p>  本設(shè)計(jì)是基于匯編語言與接口技術(shù)的音

2、樂盒設(shè)計(jì)。依據(jù)PC機(jī)系統(tǒng)發(fā)聲的基本原理,制作成多功能音樂盒。</p><p>  該音樂盒主要實(shí)現(xiàn)的功能有:</p><p>  1、程運(yùn)行后首先在屏幕上顯示出樂曲菜單,制作者姓名。</p><p>  2、用鍵盤鍵A、B、C選擇相應(yīng)的樂曲。</p><p>  3、輸入錯誤時要有適當(dāng)提示,并允許重新輸入。</p><p&

3、gt;  4、選擇Q鍵后可以正常退出程序。</p><p>  5、允許中斷。可以在沒有聽完整首歌曲時人為中斷聽下一首歌曲,或退出。</p><p>  本設(shè)計(jì)利用8255A、8253的工作原理發(fā)聲。用masm、link軟件對音樂盒源程序進(jìn)行調(diào)試。</p><p>  關(guān)鍵詞:匯編語言 計(jì)算機(jī)接口技術(shù) 音樂盒 8253 8255A</p><p&

4、gt;<b>  目錄</b></p><p><b>  摘要1</b></p><p><b>  緒論2</b></p><p><b>  1 設(shè)計(jì)思路3</b></p><p><b>  2 樂理知識4</b>&l

5、t;/p><p>  2.1 樂理知識簡述4</p><p>  2.2 音符與頻率的關(guān)系4</p><p><b>  3 設(shè)計(jì)原理5</b></p><p>  3.1 8255A的功能5</p><p>  3.2 8253 的功能7</p><p>  3.3

6、 發(fā)聲原理9</p><p>  3.4 DOS功能調(diào)用12</p><p>  3.4.1 1號功能調(diào)用12</p><p>  3.4.2 2號功能調(diào)用12</p><p>  3.4.3 9號功能調(diào)用12</p><p>  3.4.4 10號功能調(diào)用12</p><p&g

7、t;  3.4.5 16號功能調(diào)用13</p><p>  3.5 子程序調(diào)用14</p><p><b>  4 程序15</b></p><p>  4.1 程序流程圖15</p><p>  4.2 程序代碼16</p><p>  4.3 程序的運(yùn)行22</p>

8、<p><b>  結(jié)束語25</b></p><p><b>  致謝26</b></p><p><b>  參考文獻(xiàn)27</b></p><p><b>  緒論</b></p><p>  編寫程序的語言有三種:高級語言,匯編語言

9、和機(jī)器語言。機(jī)器語言是一種面向機(jī)器的程序設(shè)計(jì)語言。指令系統(tǒng)是機(jī)器語言的基礎(chǔ),其指令是由0和1構(gòu)成的二進(jìn)制代碼串,其編寫的程序可以被計(jì)算機(jī)直接識別,直接執(zhí)行。一般說來,機(jī)器言程序的執(zhí)行速度快,占用的內(nèi)存空間小。匯編又稱為符號語言,實(shí)際上是一種符號化的機(jī)器語言。匯編語言比機(jī)器語言直觀,容易記憶和理解,用匯編語言編寫的程序也比機(jī)器語言程序易讀、易檢查、易修改。匯編語言程序設(shè)計(jì)在微機(jī)應(yīng)用中占有重要地位.一般來說,凡是在微機(jī)中涉及與硬件電路有關(guān)的

10、應(yīng)用系統(tǒng),如微機(jī)控制系統(tǒng)中的檢測和控制部分,儀器儀表中的計(jì)算機(jī)控制和數(shù)據(jù)處理部分,家用電器的計(jì)算機(jī)控制部分等,其應(yīng)用程序部分都是用匯編語言來編寫的。</p><p>  在計(jì)算機(jī)系統(tǒng)中除了CPU以及基本硬件之外,還有各種外部設(shè)備,比如顯示器、鍵盤、打印機(jī)、磁盤驅(qū)動器、光盤驅(qū)動器等。這些外部設(shè)備需要與CPU進(jìn)行大量的信息交換,根據(jù)CPU的要求進(jìn)行各種操作。進(jìn)行信息交換時,由于各種原因(比如電平、時序等的不同),這些

11、外部設(shè)備不能與CPU直接相連,它們之間的信息交換必須經(jīng)過一個中間電路,也就是接口電路才能實(shí)現(xiàn)。</p><p>  本設(shè)計(jì)是基于匯編基礎(chǔ)上,利用接口電路中的8253,8255功能使電腦發(fā)聲而設(shè)計(jì)的音樂盒。</p><p>  音樂盒的主要功能是,根據(jù)按鍵不同,而選擇播放不同的歌曲,和退出等操作。</p><p><b>  1 設(shè)計(jì)思路</b>

12、</p><p>  PC的揚(yáng)聲器驅(qū)動系統(tǒng)如圖1-1所示。</p><p>  圖1-1 PC的揚(yáng)聲驅(qū)動系統(tǒng) </p><p>  揚(yáng)聲器的發(fā)聲是由輸出寄存器(即8255A的PB口)的兩位進(jìn)行控制的。輸出寄存器的端口地址為61H。</p><p>  揚(yáng)聲器發(fā)聲最簡單的方式:直接對端口61H的D1位交替輸出0或1(同時61H的D0位清0

13、),使揚(yáng)聲器交替地通與斷,推動揚(yáng)聲器發(fā)聲。</p><p>  由于揚(yáng)聲器總是隨時可用的,因此CPU可用直接I/O方式對其進(jìn)行操作。</p><p>  8253定時計(jì)數(shù)器的計(jì)數(shù)通道2用于提供系統(tǒng)的揚(yáng)聲器音頻信號,但8253計(jì)數(shù)器通道2輸出的方波受8255A PB0輸出高電平時才允許計(jì)數(shù)通道2的方波輸出。該方波又與PB1相與后送揚(yáng)聲器的驅(qū)動電路,去驅(qū)動揚(yáng)聲器發(fā)聲。一般情況下,可讓PB0輸出

14、高電平,通過對8253編程設(shè)置方波輸出頻率以控制發(fā)聲頻率。通過控制8255A PB1輸出以控制發(fā)聲時間。</p><p>  8253計(jì)數(shù)值的計(jì)算方法為:</p><p>  計(jì)數(shù)值=時鐘頻率÷音符頻率(時鐘頻率=1.19318 MHz=1234DCH)</p><p>  所以利用8255和8253來制作音樂盒,詳細(xì)步驟見下面設(shè)計(jì)原理部分.</p&

15、gt;<p><b>  2樂理知識</b></p><p>  2.1 樂理知識簡述</p><p>  1 2 3 4 5 6 7</p><p>  do remifa solla si</p><p>  七個音不

16、都一樣高,而是從左到右一個比一個高上去的,一這七個音為基礎(chǔ),在它們的上方或下方加圓點(diǎn)來表明更高或更低的音,上方的圓點(diǎn)叫“高音點(diǎn)”下方加的圓點(diǎn)叫“低音點(diǎn)” 。</p><p>  長短音:音樂中的音不光有高低,還要有長短,一個音可以唱得時間很長,也可以唱得很短促。長短音的標(biāo)記方法,主要用“增時線”和“減時線” ,加寫在音的右邊或下邊,如在5的右邊加寫一條橫線(5—),就使5延長了一倍,要是在5的下邊寫一條橫線( 5

17、 ),就使5減短了一半,也即減短1/2。附點(diǎn)在音符右方加一個圓點(diǎn),這個音叫“附點(diǎn)音符” ,附點(diǎn)的作用是把音符的時值延長1/2。</p><p>  2.2 音符與頻率的關(guān)系</p><p>  不包括鋼琴鍵盤的黑鍵,用簡譜表示的C大調(diào)音符與頻率近似值的對應(yīng)關(guān)系如下:</p><p><b>  .</b></p><p>

18、;  音符 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1</p><p>  . . . . . . .</p><p>  頻率131 147 165 175 196 220 247 ?262 294 ?330 349 392 440 494 523</p><p>&l

19、t;b>  3 設(shè)計(jì)原理</b></p><p>  3.1 8259A的功能</p><p>  8255A是一種功能很強(qiáng)的可編程并行接口芯片,采用NMOS工藝制造,它有三個8位并行輸入/輸出端口;可工作于三種工作方式,分別為方式0、方式1、方式2;能按無條件傳送、查詢傳送和中斷傳送方式進(jìn)行數(shù)據(jù)傳送。</p><p>  8255A的內(nèi)部結(jié)構(gòu)如圖

20、3-1所示。 </p><p>  圖3-1 8255A的內(nèi)部結(jié)構(gòu)</p><p>  8255A的功能如表3-1所示</p><p>  表3-1 8255A的端口尋址和操作功能表</p><p>  3.2 8253的功能</p><p><b>  8253的內(nèi)部結(jié)構(gòu)</b></p&

21、gt;<p>  8253的內(nèi)部結(jié)構(gòu)如圖3-2a所示</p><p>  圖3-2a 8253的內(nèi)部結(jié)構(gòu)</p><p>  8253讀/寫邏輯信號組合的功能以及各計(jì)數(shù)器通道、控制字寄存器在PC機(jī)中的地址分配如表3-2a所示</p><p>  表3-2a 8253讀/寫邏輯信號組合功能及地址分配</p><p><b

22、>  8253的控制字</b></p><p>  8253的控制字用于選擇哪個計(jì)數(shù)器通道工作,三個通道可同時工作,但是要分別進(jìn)行初始化;用于規(guī)定讀/寫操作格式或類型,8253可以有8位的計(jì)數(shù)值或16位的計(jì)數(shù)值,可以按二進(jìn)制計(jì)數(shù)或按二—十進(jìn)制計(jì)數(shù);用于選擇工作方式,8253共有六種工作方式。 8253是由主機(jī)編程設(shè)定的,通過把一個8位的控制字寫入8253的控制字寄存器,使8253按照某種給定的方

23、式工作??刂谱值亩x如圖3-2b所示。 </p><p>  圖3-2b 8253的控制字</p><p><b>  3.3 發(fā)聲原理</b></p><p>  8253在PC機(jī)中的應(yīng)用</p><p>  IBM PC/XT機(jī)系統(tǒng)板上使用了一片8253,其連接如圖3-3所示。計(jì)數(shù)器通道2用于驅(qū)動揚(yáng)聲器發(fā)聲。82

24、53的端口地址范圍是40H~43H,片選</p><p>  圖3-3 PC/XT中的8253</p><p>  單拍脈沖的寬度=n1×輸入時鐘CLK的周期=n1×Tclk=n1×(1/Fclk)</p><p>  n1=單拍脈沖的寬度/輸入時鐘CLK的周期</p><p><b>  計(jì)數(shù)器2的

25、發(fā)聲程序</b></p><p>  計(jì)數(shù)器2的輸出送往揚(yáng)聲器發(fā)聲電路。門控信號GATE2接8255并行接口電路的PB0,因此計(jì)數(shù)器2的計(jì)數(shù)過程將受到PB0的控制,而PB0又受I/O端口61H的D0位的控制, 當(dāng)PB0=1時,OUT2才能輸出方波。OUT2和PB1經(jīng)過一個與門接至揚(yáng)聲器驅(qū)動電路。因此OUT2也將受到PB1的控制,而PB1又受I/O端口61H的D1位的控制。ROM-BIOS中的發(fā)聲子程序

26、BEEP使計(jì)數(shù)器2工作于方式3,產(chǎn)生約為1 kHz的方波,程序如下:</p><p><b>  BEEP PROC</b></p><p>  MOVAL, 10110110B ;計(jì)數(shù)器2,方式3,16位計(jì)數(shù),二進(jìn)制計(jì)數(shù)</p><p>  OUT 43H, AL;寫入控制字</p><p>  

27、MOV AX, 0533H ;計(jì)數(shù)初值為0533H=1331(1.193 18 MHz/1331=896 Hz)</p><p>  OUT 42H, AL;寫入計(jì)數(shù)初值低8位</p><p>  MOV AL, AH</p><p>  OUT 42H, AL ;寫入計(jì)數(shù)初值高8位</p><p>  IN

28、 AL, 61H ;讀8255端口B的原值</p><p>  MOV AH, AL ;暫存AH</p><p>  OR AL, 03H ;使PB0=1、PB1=1</p><p>  OUT 61H, AL ;輸出,使揚(yáng)聲器發(fā)聲</p><p>  SUB CX, CX &l

29、t;/p><p>  LOP: LOOP LOP;延時</p><p>  DEC BL ;BL值由入口參數(shù)提供,決定發(fā)聲長短</p><p>  JNZ LOP ;BL=6發(fā)長聲,BL=1發(fā)短聲</p><p>  MOV AL, AH</p><p>  OUT

30、61H, AL ;恢復(fù)8255端口B的原值,停止發(fā)聲</p><p>  RET ;返回 </p><p>  BEEP ENDP </p><p>  利用PC機(jī)中的定時器/計(jì)數(shù)器電路8253可以使揚(yáng)聲器發(fā)聲并且還可以用來演奏簡單的樂曲。</p><p><b>  聲音的產(chǎn)生</b><

31、;/p><p>  在PC機(jī)中產(chǎn)生聲音可以通過使用8253的計(jì)數(shù)器2,工作于方式3來實(shí)現(xiàn)。設(shè)置控制字的指令為</p><p>  MOV AL,0B6H ;計(jì)數(shù)器2,方式3,16位計(jì)數(shù),二進(jìn)制計(jì)數(shù)</p><p>  OUT 43H,AL</p><p>  設(shè)置好控制字后要根據(jù)聲音的頻率對計(jì)數(shù)器2(也就是42H端口),設(shè)定對

32、應(yīng)的計(jì)數(shù)初值。指令如下:</p><p>  MOV AL,計(jì)數(shù)初值低8位</p><p>  OUT 42H,AL</p><p>  MOV AL,計(jì)數(shù)初值高8位</p><p>  OUT 42H,AL</p><p>  然后通過設(shè)定PC機(jī)中的并行接口電路8255的PB0、PB1,打開揚(yáng)聲器的門

33、電路,就可以發(fā)出該頻率的聲音了。實(shí)現(xiàn)該功能的指令如下:</p><p>  IN AL, ?61H;讀取8255端口B的值</p><p>  MOV AH, ?AL;暫存AH</p><p>  OR AL, 03H;使PB0=1、PB1=1</p><p>  OUT 61H, AL;輸出,使揚(yáng)聲器發(fā)聲<

34、/p><p>  如果提供給8253計(jì)數(shù)器2的CLK的時鐘頻率為1 193 180 Hz,即1234DCH,并把要求發(fā)出的聲音的頻率值放入DI中,使AX獲得對應(yīng)的計(jì)數(shù)初值的指令為</p><p>  MOV DX,12H</p><p>  MOV AX,34DCH</p><p><b>  DIV ??DI</b><

35、;/p><p>  上述指令執(zhí)行后計(jì)數(shù)初值在AX中,然后可以分別按低字節(jié)和高字節(jié)輸出至42H端口,使計(jì)數(shù)器產(chǎn)生所需頻率的聲音(音符)。在實(shí)際應(yīng)用中,計(jì)數(shù)初值要根據(jù)實(shí)際系統(tǒng)中的時鐘頻率來計(jì)算。</p><p><b>  延時程序及其作用</b></p><p>  當(dāng)時鐘為1 193 180 Hz時,延時10 ms可用如下延時程序?qū)崿F(xiàn):</p

36、><p>  DELAY:MOV CX,2801</p><p>  LOP10:?LOOP LOP10</p><p>  如果實(shí)際應(yīng)用環(huán)境中的時鐘頻率較高,則應(yīng)重新計(jì)算并設(shè)置延時時間。</p><p>  編寫演奏樂曲需要把與音符所對應(yīng)的頻率放在FREQ表中,把與音符所對應(yīng)的節(jié)拍(延時次數(shù)值)放在TIME表中。然后由主程序控制,逐一按音符

37、的頻率和節(jié)拍值,使揚(yáng)聲器發(fā)出聲音。當(dāng)與音符對應(yīng)的頻率值為0時,停止演奏。</p><p>  子程序PLAY的功能是使揚(yáng)聲器發(fā)出聲音,演奏樂曲。由DI指定音符的頻率,BX指定與音符對應(yīng)的節(jié)拍。SI指向頻率表FREQ,BP指向節(jié)拍表TIME。頻率表以0結(jié)尾,用于作為程序結(jié)束的條件:如果取來的頻率值為0,則程序結(jié)束。</p><p>  3.4 DOS功能調(diào)用</p><p

38、>  3.4.1 1號功能調(diào)用</p><p>  從鍵盤輸入一個字符(1號調(diào)用)</p><p><b>  調(diào)用格式:</b></p><p>  MOV AH,1</p><p><b>  INT 21H</b></p><p>  掃描鍵盤將從鍵盤輸

39、入的一個字符的ASCII碼送入AL中(回顯 )。</p><p>  3.4.2 2號功能調(diào)用</p><p>  屏幕顯示一個字符(2功能號調(diào)用)</p><p><b>  調(diào)用格式:</b></p><p>  MOV AH,2</p><p>  MOV DL,字符的ASCII碼

40、</p><p><b>  INT 21H</b></p><p>  3.4.3 9號功能調(diào)用</p><p>  屏幕顯示一個字符串(9功能號調(diào)用)</p><p><b>  調(diào)用格式:</b></p><p><b>  MOV AH,9</

41、b></p><p>  MOV DX,字符串的首地址(偏移地址) </p><p><b>  INT 21H</b></p><p>  3.4.4 10號功能調(diào)用</p><p>  從鍵盤輸入字符串 (10功能號調(diào)用)</p><p>  功能: 從鍵盤接收字符串

42、送入內(nèi)存的輸入緩沖區(qū),同時送顯示器顯示。</p><p><b>  調(diào)用前要求:  </b></p><p>  先定義一個輸入緩沖區(qū) MAXLEN  DB  100   ;第1個字節(jié)指出緩沖區(qū)能容納的字符個數(shù),即緩沖區(qū)長度,不能為0 </p><p>  A

43、CLEN   DB  ?       ;第2個字節(jié)保留,以存放實(shí)際輸入的字符個數(shù) </p><p>  STRING DB 100  DUP(?);第3個字節(jié)開始存放從鍵盤輸入的字符串。</p><p>  調(diào)用格式: LEA  D

44、X,MAXLEN(緩沖區(qū)首偏移地址)   </p><p>  MOV  AH,10 </p><p><b>  INT  21H </b></p><p>  注意:調(diào)用時,要求DS:DX指向輸入緩沖區(qū) </p><p>  3.4.5 16號功能調(diào)用&l

45、t;/p><p>  鍵盤驅(qū)動程序 (16號功能調(diào)用)</p><p>  1、當(dāng)某個BIOS程序中具有多種不同功能時,用不同的編號——功能號加以區(qū)分,并約定功能號存放在寄存器AH中。其調(diào)用方法與DOS功能調(diào)用類似:</p><p>  (1) 功能號→AH     </p><p> 

46、 (2) 入口參數(shù)→指定寄存器</p><p>  (3) 指令“INT n”實(shí)現(xiàn)對BIOS子程序的調(diào)用 </p><p>  下面以鍵盤I/O中斷調(diào)用為例介紹BIOS中斷調(diào)用的方法。 </p><p>  2、鍵盤I/O中斷調(diào)用示例</p><p>  鍵盤I/O中斷調(diào)用(INT 16H)有三個功能,

47、功能號為0~2。</p><p>  (1) AH=0  </p><p>  功能:從鍵盤讀入字符送AL。</p><p>  出口參數(shù):(AL)=鍵入字符的ASCII碼 ;(AH)=鍵入字符的掃描碼</p><p>  MOV  AH,0 </p><p><b>  IN

48、T  16H </b></p><p>  調(diào)用結(jié)果:將鍵盤輸入字符的ASCII碼送AL,掃描碼送AH。 </p><p><b>  (2) AH=1 </b></p><p>  功能:從鍵盤讀入字符送AL,并設(shè)置ZF標(biāo)志,若按過任一健,則置ZF=0,否則ZF=1。 </p><

49、p>  出口參數(shù):ZF=0,鍵盤有輸入,(AL)=鍵入字符的ASCII碼 </p><p>  ZF=1,鍵盤無輸入 </p><p><b>  (3) AH=2 </b></p><p>  功能:讀取特殊功能建的狀態(tài)。 </p><p>  出口參數(shù):AL中是各特殊功能鍵的狀態(tài) </p>

50、<p>  AL中某位為1,表示對應(yīng)鍵按下;為0則表示未按下</p><p><b>  3.5 子程序調(diào)用</b></p><p><b>  子程序的概念</b></p><p>  在程序設(shè)計(jì)中,我們會發(fā)現(xiàn)一些多次無規(guī)律重復(fù)的程序段或語句序列。解決此類問題一個行之有效的方法就是將它們設(shè)計(jì)成可供反復(fù)調(diào)用的

51、獨(dú)立的子程序結(jié)構(gòu),以便在需要時調(diào)用。在匯編語言中,子程序又稱過程。調(diào)用子程序的程序稱為主調(diào)程序或主程序</p><p><b>  子程序的結(jié)構(gòu):</b></p><p>  1、 子程序與循環(huán)程序的區(qū)別</p><p>  2、子程序的調(diào)用與返回</p><p>  3、入口參數(shù)與出口參數(shù)的傳遞</p>

52、<p>  4、現(xiàn)場的保護(hù)與恢復(fù)</p><p><b>  子程序的定義</b></p><p>  子程序的定義是由過程定義偽指令PROC和ENDP來完成的。其格式如下:</p><p>  過程名 PROC [NEAR/FAR]</p><p><b>  子程序體</b><

53、/p><p><b>  過程名 ENDP</b></p><p>  其中PROC表示過程定義開始,ENDP表示過程定義結(jié)束。過程名是過程入口地址的符號表示。</p><p>  一般過程名同標(biāo)號一樣,具有三種屬性,即段屬性、偏移地址屬性以及類型屬性</p><p><b>  子程序體一般包括:</b&

54、gt;</p><p><b>  1、保護(hù)現(xiàn)場</b></p><p>  2、根據(jù)入口參數(shù)進(jìn)行處理</p><p><b>  3、產(chǎn)生出口參數(shù)</b></p><p><b>  4、恢復(fù)現(xiàn)場</b></p><p><b>  5、RE

55、T</b></p><p>  子程序的調(diào)用與返回:</p><p><b>  調(diào)用</b></p><p>  CALL 標(biāo)號</p><p><b>  功能:</b></p><p>  1、主程序的下一條指令入棧,即IP指針入棧</p>

56、<p>  2、轉(zhuǎn)向子程第的第一條指令,既標(biāo)號指定的子程序第1條指令的偏移地址送IP</p><p><b>  返回</b></p><p><b>  RET</b></p><p>  功能:返回到主程序CALL指令的下一條指令,即將下一條指令地址送IP。 </p><p>&l

57、t;b>  4 程序</b></p><p>  4.1 程序流程圖 </p><p><b>  4.2 程序代碼</b></p><p>  DATA SEGMENT</p><p>  STR1 DB 0DH,0AH,'welcom you come to here! Wenguangh

58、ong dian zi gong cheng xi 09 dian 301ban STR2 DB 0DH,0AH,'this is a music program !$'</p><p>  STR3 DB 0DH,0AH,'please select !$'</p><p>  STR4 DB 0DH,0AH,'input error !$'

59、;</p><p>  STR5 DB 0DH,0AH,'please input again !$'</p><p>  STR6 DB 0DH,0AH,'A shao nian zhuang zhi bu yan chou $'</p><p>  STR7 DB 0DH,0AH,'B wo niu yu huang li

60、 niao $'</p><p>  STR8 DB 0DH,0AH,'C mei li de tong hua $'</p><p>  STR9 DB 0DH,0AH,'Q EXIT $'</p><p>  FREQ1 DW 294,392,392,294,330,262,220,262,196,262,262,220,

61、262,294,330,392,294,294</p><p>  DW 294,392,392,294,330,262,220,262,220,196,196,220,262,294,330,220,196,196</p><p>  DW 392,392,392,330,392,440,392,330,440,440,392,330,294,392,294,330,262,220<

62、;/p><p>  DW 392,220,262,220,392,440,392,330,392,294,392,392,392,330,392,440,440,392</p><p>  DW 330,440,440,392,440,392,330,294,294,392,294,330,262,220,196,220,262,220,294,262,294,220,196</p>

63、;<p>  DW 392,294,330,262,220,196,220,262,220,294,262,294,220,196,196,0</p><p>  TIME1 DW 25,25,37,6,6,25,12,12,50,19,6,12,12,25,12,12,50,50</p><p>  DW 25,25,37,6,6,25,12,12,50,19,6,12,

64、12,12,25,12,50,50</p><p>  DW 19,6,12,6,6,37,12,12,12,6,6,12,50,12,6,6,12,12</p><p>  DW 19,6,25,12,12,6,6,6,6,50,19,6,12,6,6,12,25,12</p><p>  DW 12,12,12,6,6,6,6,12,25,12,6,6,12,1

65、2,19,6,25,12,12,6,6,12,50</p><p>  DW 12,6,6,12,12,19,6,25,12,12,6,6,12,50,50</p><p>  FREQ2 DW 392,392,392,392,330,392,262,440,392,392,392,392,392,330,294,262,330,294</p><p>  DW

66、294,330,392,392,392,330,330,294,262,262,294,330,262,262,220,196,220,196</p><p>  DW 392,392,392,330,392,262,440,392,392,392,392,392,330,294,262,330,294</p><p>  DW 262,330,294,294,330,392,392,33

67、0,330,294,262,262,294,330,262,262,220</p><p>  DW 196,392,392,392,392,330,294,262,440,392,392,440,262,294,262,294,330,294,262,0</p><p>  TIME2 DW 6,12,6,12,6,6,12,12,25,6,12,6,12,6,6,12,12,25&

68、lt;/p><p>  DW 19,6,12,6,6,12,6,6,12,12,19,6,12,6,6,12,12,25</p><p>  DW 6,12,6,12,6,6,12,12,25,6,12,6,12,6,6,12,12,25</p><p>  DW 12,12,12,12,12,6,6,12,12,19,6,12,6,6</p><p

69、>  DW 12,12,25,6,12,6,12,6,6,12,12,12,6,6,12,12,12,12,25,25,50</p><p>  FREQ3 DW 220,330,247,220,262,294,262,330,220,440,392,440,392,294,349,330,330,330</p><p>  DW 220,440,392,294,330,349,33

70、0,294,262,220,330,294,247,220,220</p><p>  DW 220,247,262,294,330,262,247,196,220,262,294,330,330</p><p>  DW 220,247,262,294,330,262,247,196,220,262,294,262,262</p><p>  DW 220,247

71、,262,294,330,262,247,196,220,262,294,262,330,330</p><p>  DW 220,247,262,294,330,262,247,196,220,262,294,262,262,262</p><p>  DW 262,262,294,330,262,247,196,262,247,196,247,220,220,220,0</p&g

72、t;<p>  TIME3 DW 25,25,50,12,12,19,6,50,25,25,12,12,12,12,12,12,25,50</p><p>  DW 25,25,19,6,12,12,25,25,50,25,25,37,12,50,25</p><p>  DW 12,12,12,12,12,12,25,25,12,12,12,12,25</p>

73、<p>  DW 12,12,12,12,12,12,25,25,12,12,12,12,25</p><p>  DW 12,12,12,12,12,12,25,25,12,12,6,12,12,25</p><p>  DW 12,12,12,12,12,12,25,25,6,6,12,12,12,50</p><p>  DW 12,6,6,12

74、,12,25,25,25,25,50,12,12,25,50</p><p><b>  DATA ENDS</b></p><p>  STACK SEGMENT</p><p>  DB 200 DUP (?)</p><p>  STACK ENDS</p><p>  CODE SEGME

75、NT</p><p>  ASSUME DS:DATA,SS:STACK,CS:CODE</p><p>  START:MOV AX,DATA</p><p>  MOV DS,AX </p><p>  MOV DX,OFFSET STR1 </p><p><b>  M

76、OV AH,9</b></p><p><b>  INT 21H</b></p><p>  LEA DX,STR2 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>

77、;  LEA DX,STR3 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  LEA DX,STR6 </p><p><b>  MOV AH,9</b></p><

78、;p><b>  INT 21H</b></p><p>  LEA DX,STR7 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  LEA DX,STR8 </p>

79、<p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  LEA DX,STR9 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b

80、></p><p>  MOV AH,02H</p><p>  MOV DL,0DH</p><p><b>  INT 21H</b></p><p>  MOV AH,02H</p><p>  MOV DL,0AH</p><p><b>  INT

81、 21H</b></p><p><b>  JMP INPUT</b></p><p>  XSH:MOV AH,02H</p><p>  MOV DL,0DH</p><p><b>  INT 21H</b></p><p>  MOV AH,02H<

82、;/p><p>  MOV DL,0AH</p><p><b>  INT 21H</b></p><p>  LEA DX,STR5 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b><

83、/p><p>  MOV AH,02H</p><p>  MOV DL,0DH</p><p><b>  INT 21H</b></p><p>  MOV AH,02H</p><p>  MOV DL,0AH</p><p><b>  INT 21H<

84、/b></p><p>  INPUT: MOV AH,1 </p><p><b>  INT 21H</b></p><p>  CMP AL,'Q'</p><p>  JE EXIT </p><p>  CMP AL,&#

85、39;A'</p><p><b>  JNE N1</b></p><p>  LEA SI,FREQ1 </p><p>  LEA BP,TIME1</p><p>  LOP:MOV DI,[SI]</p><p><b>  CMP DI,0</b&

86、gt;</p><p><b>  JZ XSH</b></p><p>  MOV BX,DS:[BP]</p><p><b>  CALL PLAY</b></p><p><b>  ADD SI,2</b></p><p><b>

87、  ADD BP,2</b></p><p><b>  JMP LOP</b></p><p><b>  JMP XSH</b></p><p>  N1:CMP AL,'B'</p><p><b>  JNE N2</b></p>

88、<p>  LEA SI,FREQ2</p><p>  LEA BP,TIME2</p><p><b>  JMP LOP</b></p><p>  N2:CMP AL,'C'</p><p><b>  JNE ERROR</b></p><

89、p>  LEA SI,FREQ3</p><p>  LEA BP,TIME3</p><p><b>  JMP LOP</b></p><p><b>  ERROR:</b></p><p>  LEA DX,STR4</p><p>  MOV AH,9

90、</p><p><b>  INT 21H</b></p><p>  LEA DX,STR5 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  LEA DX,STR6

91、 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  LEA DX,STR7 </p><p><b>  MOV AH,9</b></p><p><b>

92、;  INT 21H</b></p><p>  LEA DX,STR8 </p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  LEA DX,STR9 </p><p><

93、b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  MOV AH,02H</p><p>  MOV DL,0AH</p><p><b>  INT 21H</b></p><p>  JMP INP

94、UT</p><p>  JMP INPUT </p><p>  EXIT:MOV AH,4CH </p><p>  INT 21H </p><p>  PLAY PROC </p><p><b>  PUSH AX</b></p><

95、p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>  PUSH DX</b></p><p><b>  PUSH DI</b></p><p>  MOV AH,1 </p

96、><p><b>  INT 16H</b></p><p>  JZ PLAY1 </p><p>  JMP START </p><p>  play1:MOV AL,0B6H</p><p>  OUT 43H,AL</p><p>  MOV DX,12H<

97、/p><p>  MOV AX,348CH</p><p><b>  DIV DI</b></p><p>  OUT 42H,AL</p><p><b>  MOV AL,AH</b></p><p>  OUT 42H,AL</p><p><

98、;b>  IN AL,61H</b></p><p><b>  MOV AH,AL</b></p><p><b>  OR AL,03H</b></p><p>  OUT 61H,AL</p><p>  CALL DELAY1</p><p><

99、;b>  MOV AL,AH</b></p><p>  OUT 61H,AL</p><p><b>  POP DI</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></p><

100、p><b>  POP BX</b></p><p><b>  POP AX</b></p><p><b>  RET </b></p><p>  PLAY ENDP</p><p>  DELAY1 PROC</p><p><

101、;b>  SHL BX,1</b></p><p><b>  SHL BX,1</b></p><p><b>  SHL BX,1</b></p><p><b>  SHL BX,1</b></p><p><b>  SHL BX,1<

102、/b></p><p><b>  SHL BX,1</b></p><p><b>  SHL BX,1</b></p><p><b>  SHL BX,1</b></p><p>  DELAY:MOV CX,0FFFFH</p><p> 

103、 LOP10:LOOP LOP10</p><p><b>  DEC BX</b></p><p><b>  JNZ DELAY</b></p><p><b>  RET</b></p><p>  DELAY1 ENDP</p><p>  C

104、ODE ENDS</p><p><b>  ENDSTART</b></p><p><b>  4.3程序的運(yùn)行</b></p><p>  如上編寫好程序后,在運(yùn)行里輸入cmd后,回車輸入程序文件夾所在的盤符加冒號E:,回車,cd空格輸入文件夾名lzq,然后輸入masm,回車,輸入程序所在的記事本名zq后,回

105、車,回車,回車,再回車,無誤后顯示如圖</p><p>  然后輸入link空格記事本名,回車如圖</p><p>  然后回車,回車,再回車,如圖</p><p>  后輸入zq回車,如圖</p><p>  然后就可以欣賞歌曲了,輸入大寫字母A播放歌曲,《少年壯志不言愁》,輸入B播放《蝸牛與黃鸝鳥》,輸入C播放《美麗的童話》,輸入Q退出播

106、放,其中可以在播放歌曲過程中中斷,進(jìn)行下一首要播放的歌曲(16號功能的調(diào)用)。</p><p><b>  結(jié)束語</b></p><p>  本次畢業(yè)設(shè)計(jì)論文算是畫上了句號,感覺如卸重?fù)?dān),總算是松了口氣,在做這個畢設(shè)時,不知我熬了多少個日日夜夜,每晚都要熬到深夜才入睡。從中我體會到了辛苦,還有喜悅。當(dāng)我一遍一遍的去編寫程序,又一遍一遍的修改時,真的很煩,很累,很想放

107、棄,當(dāng)?shù)玫街笇?dǎo)老師的指導(dǎo)時,我豁然開朗,再回去修改了一翻,終于完成了,達(dá)到了我想要的結(jié)果。當(dāng)時真的十分高興,那種成功的喜悅不能言表。</p><p>  除了那些感受之外,我還學(xué)到了很多知識,專業(yè)課方面的知識有:更近一步的學(xué)習(xí)了匯編語言中DOS功能號的調(diào)用,子程序的調(diào)用等,還有計(jì)算機(jī)接口技術(shù)里8255A的功能作用,8253的功能作用,及發(fā)聲原理等,除了專業(yè)課的知識外,還學(xué)到了音樂方面的樂理知識,有指導(dǎo)老師講的,還

108、有自己查資料學(xué)的,使我不再是音樂盲了。</p><p>  寫論文的時候,使我提高了打字速度,進(jìn)一步熟練了五筆打字法。在制圖過程中,我學(xué)會了畫圖,才道自己也可以制作課件。</p><p>  完成畢業(yè)設(shè)計(jì),離不開指導(dǎo)老師的耐心和細(xì)心指導(dǎo),使我少做了很多無用功,使我受益匪淺。在此表示十分的感謝。</p><p>  雖然經(jīng)過細(xì)心完成但出錯之處在所難免,還懇請老師在此批

109、改我的論文。</p><p>  完成了這次的畢設(shè),只是一小步的進(jìn)步,我還要在以后的時間里更進(jìn)一步的去學(xué)習(xí)我的專業(yè)知識,只有不斷的去學(xué)習(xí),才能使自己不斷地進(jìn)步。學(xué)無止境,人生有涯,而知識無涯。</p><p><b>  致謝</b></p><p>  完成這個畢業(yè)設(shè)計(jì)離不開我的導(dǎo)師xx老師的耐心的指導(dǎo),和多次辛苦的批改,在此表示衷心的感謝!

110、到一聲老師您辛苦了!</p><p>  在xx老師的指導(dǎo)中,我學(xué)到了好多以前沒學(xué)到的知識比如音樂方面的知識、16號功能的調(diào)用,讓我的程序如我所愿、EDIT命令的應(yīng)用等,使我受益匪淺。</p><p>  大學(xué)生活一晃而過,回首走過的歲月,心中倍感充實(shí),當(dāng)我寫完這篇畢業(yè)論文的時候,有一種如釋重負(fù)的感覺,感慨良多。</p><p>  再次誠摯的感謝我的論文指導(dǎo)老師x

111、x老師。她在忙碌的教學(xué)工作中擠出時間來審查、修改我的論文。還有教過我的所有老師們,你們嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我工作、學(xué)習(xí)中的榜樣;他們循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪。</p><p>  感謝三年中陪伴在我身邊的同學(xué)、朋友,感謝他們?yōu)槲姨岢龅挠幸娴慕ㄗh和意見,有了他們的支持、鼓勵和幫助,我才充實(shí)的度過了三年的學(xué)習(xí)生活,給我的大學(xué)生活,畫上了圓滿的句號。謝謝!</p><

112、p><b>  參考文獻(xiàn)</b></p><p>  [1]王成端.匯編語言程序設(shè)計(jì)[M].北京:高等教育出版社,2003</p><p>  [2]王成端.微機(jī)接口技術(shù)[M].2版.北京:高等教育出版社,2004</p><p>  [3]丁輝.匯編語言程序設(shè)計(jì).北京:電子工業(yè)出版社,2001</p><p> 

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論