• 沒有找到結果。

組合語言期末報告 小小鋼琴

N/A
N/A
Protected

Academic year: 2022

Share "組合語言期末報告 小小鋼琴"

Copied!
3
0
0

加載中.... (立即查看全文)

全文

(1)

組合語言期末報告 小小鋼琴

此程式為實作一個小鋼琴,主要功能為:

1. 播放單易歌曲,有小星星、小蜜蜂、兩隻老虎、妹妹揹著洋娃娃、伊比呀呀、

火車快飛、Ten little Indians。

2. 自由彈奏,可像一般鋼琴一樣隨意練習。

以上功能皆可即時顯示目前發聲的音階。

內部運作原理:

1. 中斷、INT 的原理:

CPU 的暫存器中 CS 與 IP 會指到程式區上,由 IP 不斷地移動往下執行指令,

如果發生中斷的時候,CPU 則會執行完之前的工作,並停止接下來的工作,並 將 CS 與 IP 暫存器中的內容值傳入 stack 中暫時保存起來。中斷的種類有「硬體 中斷」、「軟體中斷」、「CPU 中斷」。每一種中斷服務都用一個編號來表示,這個 編號用來表示所要呼叫的中斷服務項目,80X86 利用內部 0000~003F 的區域來 當成各中斷的起始位址資料。譬如說第 n 號的中斷服程式的位址就存放於「中斷 向量表」中的第 4n 位元組上,當 CPU 執行到第 n 號中斷服務時,它便會在中斷 向量表的第 4n 位址上取得實際中斷服務的位址,並且到中斷服務的位址上執行 服務程式。而在組合語言中,最常用到的是軟體中斷要求,特別是第 21H 的中 斷服務,因為它可以用來做 DOS 的功能呼叫。

「CPU 執行中斷服務的流程」:CPU 執行工作→發生中斷→將 CS、IP 及 FLAG 的內容先保存在 stack 中→找出中斷服務的起始位址→執行中斷服務→從 stack 中取出 CS、IP 及 FLAG 的內容→CPU 繼續未完成的工作。

2. 喇叭發聲:

控制喇叭發聲的方法有兩種:一是經由計時器來推動,另一是直接控制。當 output port 61H 的 bit0=1 時,是計時器控制,此時當 bit1=1 時,喇叭是 ON,bit1=0 時喇叭 OFF。

開啟喇叭:

IN AL, 61H OR AL, 03H OUT 61H, AL

(2)

關掉喇叭:

IN AL, 61H AND AL, 0FCH OUT 61H, AL

3. 頻率控制:

建立表格來記錄每個音階對應的頻率。頻率來源根據參考書目,升降八度則 把頻率分別除或乘以 2 得到。例如:DO 的頻率為 1196h,升八度則除以 2 得到 8CBh,降八度則乘上 2 得到 232Ch。

本程式用 DI 去讀頻率表,把 DI 所指到的值放到 AX,再分別把 AL、AH 輸 出到 port 42H,但其為 8-bit,因此要分開輸出,即可控制頻率高低。

MOV AX, [ DI ] OUT 42H, AL MOV AL ,AH OUT 42H, AL

4. 如何讀取鍵盤資訊:

將 AH 設 07H,並執行 INT 21H,此功能會等待使用者按下任意鍵,將鍵盤 字元傳回至 AL 中,即可利用 AL 來判斷輸入的資訊。此中斷呼叫可用 Ctrl+C 來 中斷,但輸入的字元不會顯示在螢幕上。

MOV AH, 08H INT 21H

5. 歌曲部分:

每一個音由一個 WORD 表示,其表示方法如下:

1.前八個 bits:節拍 01>1/8 拍 02>半拍 04>一拍 08>二拍 2.第 9~12 個 bits:升降 0>降 8 7>不變 14>升 8

3.後面四個 bits:音高 1>DO 2>RE 3>ME 4>FA 5>SOL 6>LA 7>SI

另外每一首歌的開頭皆記錄了長度和適合此歌曲的節拍快慢。

6. 輸出部分:

將 AH 設 09H,DS:DX 存放字串起始位址,並執行 INT 21H,即可將字串 顯示在螢幕上,但此字串必須用’$’(ASCII 為 36d)作為結束。此外 10d 代表 New Line,13d 代表 Carriage Return。

MOV DX, OFFSET List1 MOV AH, 09H

INT 21H

(3)

參考書目:

1.「80X86 組合語言入門教材」,普悠瑪數位科技著,博碩文化出版 2.「PC XT/AT 組合語言 8088/8086 程式設計」, 蔡文能著,松崗出版 3.「80X86 與 MASM 6.x 組合語言精解–入門應用篇」,李永祥著,

第 3 波出版

4.「Assembly Language for Intel-Based Computers 4th edition」, Kip R. Irvine 著,Pearson Education 出版

資工二 B93902064 郭哲瑋

B93902058 陳偉志

參考文獻

相關文件

期中作業著重軟體的使用,概念及使用技巧,佔 30%。平時作業著重概念的啟發及實踐並具體製作,及出席率佔

在寫 8051 的程式時,必須知道幾個程式記憶體的特殊位址,這些位址是各種中 斷服務程式的進入點,表 2 列出了各種中斷的進入點位址,其中位址

[r]

mov ax,var1 ;將其中一個記憶體內容先複製到暫存器 xchg ax,var2 ;分別執行記憶體與暫存器內容的交換動作 xchg ax,var1 ;完成交換。 Swap var1

由高位址向低位址遞減 由高位址向低位址遞減 由高位址向低位址遞減 由高位址向低位址遞減

「頓號」,佔一格。當同時列舉兩種以上同類的詞語或短語 時,中間就要用頓號分開,作短暫的停頓。它的停頓時間 比逗號短。b. 例: A

在下面左圖中所顯示出來的是一個物體在靜止的液體中所受到的壓力分佈。如果

舉例: 中一以隨筆一作前測診斷,發現 學生的描寫多欠具體清晰.