




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
一即第10章匯編語言程序設計實例
第10章匯編語言程序設計實例
10.1視頻顯示系統程序設計
10.2音頻發聲系統程序設計
10.3數據通信系統程序設計
習題10
?Back
一即第10章匯編語言程序設計實例
10.1視頻顯示系統程序設計
在微型計算機的圖形顯示方面,匯編語言具有極
大的優勢,這是因為顯示在屏幕上的圖形是由成千上
萬個像素組成的,對圖形處理也需要復雜的算法和大
量的指令。與高級語言相比,雖然表面上匯編語言顯
得復雜、凌亂和可讀性差,但就速度而言,匯編語言
最快。
委卜第10章匯編語言程序設計實例________________
用匯編語言設計出來的圖形顯示有著直觀、醒目和反
應快速的優點,并且一旦掌握匯編語言顯示技術的思
路和基本顯示模塊,編程的工作僅是模塊的運用和參
數的修正。因此,匯編程序編制圖形程序是程序設計
中非常有意義和價值的工作之一。
委卜第10章匯編語言程序設計實例________________
10.1.1顯示方式
顯示方式與顯示適配器及顯示器密切相關,因此,必
須熟悉和掌握顯示器和與顯示適配器相關的性能與技術
指標。
1.顯示適配器
IBM-PC系列微機中,先后提供了多種顯示適配器
(顯示卡),表10-1介紹了這些適配器的基本技術指標。
顯示適配器的功能基本是向下兼容,即新型顯示卡
功能包括前一檔次顯示卡的顯示功能,而又有所增強。
止匕外,實用中各廠家不同型號的產品性能不盡相同。
一即第10章匯編語言程序設計實例
表10-1顯示適配器的基本技術指標
分辨率
類型彩色度(灰度)
字符圖形
單色字符顯示適配器(MDA)9X14720X3502
320X200
彩色圖形適配器(CGA)8X816選4
640X200
720X200
高分辨率單色適配器(HGC)16選4
640X350
一即第10章匯編語言程序設計實例
信號
顯示模式
模式
其他
7TTL
0?6TTL
7、FTTL
一即第10章匯編語言程序設計實例
增強型圖形適配器(EGA)8X14640X35064選16
多色圖形陣列(MCGA)8X14640X400256
視頻圖形陣列(VGA)9X16640X480256
高級視頻圖形陣列(TVGA)800X60064K
1024X768
超級視頻圖形適配器(SVGA)1280X102416M
1680X1280
1024X768
局部高性能總線顯示卡(PCD1280X102416M
1680X1280
1024X768
圖形加速陣列
1280X10244G
(AGP)
1680X1280
一即第10章匯編語言程序設計實例
0?6、D?F、10TTL
0?6、D?F、10模擬
0~6、D?F、11~13模擬
0?6、D?F、11?13模擬
0?6、D?F、
模擬
11?13
圖形
標準、非標準模擬
加速
圖形
標準、非標準模擬
加速
委卜第10章匯編語言程序設計實例________________
2.顯示器
目前,Intel公司80x86/Pentium的微型機主要使用兩
種類型的顯示器:數字(TTL)顯示器和模擬顯示器。
1)數字(TTL)顯示器
該類型顯示器的彩色分辨是用',1〃和''0〃來決定的。
若某彩色信號為、'1〃,則在屏幕上呈現出這一彩色,否
則屏幕上不顯示這一彩色。TTL顯示器上能顯示的彩
色種類與彩色信號輸入線的多少有關。
委卜第10章匯編語言程序設計實例________________
如CGA與彩色有關的信號線有紅(R)、綠(G)、藍
(B)和亮度(I),這四種信號可組合成2?16種不同
的顏色,字符的顯示可從其中選擇做前景或背景色。
CGA和EGA適配器僅能支持TTL顯示器。
第10章匯編語言程序設計實例
2)模擬顯示器
模擬顯示器有3種彩色信號輸入線(紅、綠、
藍),加在每個輸入線上的電平的高低級別決定了顯
示在屏幕上的那種彩色的數量。從理論上講,它能顯
示的彩色數量是無限的,但實際應用中卻是有限的,
這主要取決于顯示適配器的能力。
由于彩色數量的無限性,模擬顯示器被認為是一
種優秀的顯示技術。VGA及以上顯示方式必須配置模
擬顯示器。目前386及其以上的機型基本上選用VGA適
配器和模擬顯示器。
委卜第10章匯編語言程序設計實例________________
3)顯示器分辨率
分辨率是顯示器的重要指標,它關系到顯示器的
性能和圖像質量。圖像質量由兩個主要因素決定:其
一是屏幕上掃描圖像的速度;其二是屏幕上的像素
數,像素數又稱分辨率,以屏幕行像素數(x)X列像素
數(y)的形式表示。
例如,表10-1中VGA的分辨率是640X480,就是
說,這種方式下,每行可以分辨640個像素點,每列可
以分辨480個像素點。
一即第10章匯編語言程序設計實例
顯示器分辨率也有著向下兼容的問題,高分辨率
顯示器可以由低分辨率的適配器驅動。例如,SVGA顯
示器上顯示VGA信號。而低分辨率顯示器則不可以由
高分辨率的適配器驅動,如果這樣做了,輕則顯示器
行不同步,看不見圖像,重則將造成顯示器燒毀。
一即第10章匯編語言程序設計實例
3.顯示方式
由于設置或改變PC機的顯示方式對時間的要求不
嚴格,而要編寫設置或改變顯示方式的程序很困難,
因此一般由DOS或BIOS調用來完成。
BIOS顯示例程提供了設置顯示方式的功能,程序
只要給出調用參數,使用BIOS的
INT10H即可建立某種顯示方式。表10-2列出了幾
種常用的顯示方式。
委卜第10章匯編語言程序設計實例________________
表10-2INT1OH設置顯示方式功能表(AH=OO)
顯示方式
調用參數
(AL)
分辨率色度或灰度
0040X25文本16級灰度
0140X25文本16色或8色
0280X25文本16級灰度
0380X25文本16色或8色
04320X200圖形4色
05320X200圖形4色
06640X200圖形黑白顯示
一即第10章匯編語言程序設計實例
0780X25文本黑白顯示
OD320X200圖形16色
OE640X200圖形16色
OF640X350圖形黑白顯示
10640X350圖形4色或16色
11640X480圖形黑白顯示
12640X480圖形16色
13320X200圖形256色
一即第10章匯編語言程序設計實例
適用顯示適配器
CGAMCGAEGAVGA
CGAMCGAEGAVGA
CGAMCGAEGAVGA
CGAMCGAEGAVGA
CGAMCGAEGAVGA
CGAMCGAEGAVGA
CGAMCGAEGAVGA
MDAEGAVGA
一即第10章匯編語言程序設計實例
EGAVGA
EGAVGA
EGAVGA
EGAVGA
MCGAVGA
VGA
MCGAVGA
第10章匯編語言程序設計實例
10.1.2DOS功能調用顯示技術
操作系統的核心是由許多關于I/O驅動、磁盤讀寫
和文件管理等程序段構成的。這些程序段都編了號,
可由匯編語言的源程序調用。在調用時,把程序段的
號(或稱系統功能調用號)送至AH,把程序段規定的
入口參數,送至指定的寄存器,然后由中斷指令INT
21H來實現調用。在這里通過幾個程序舉例來介紹有關
I/O的功能調用,便于讀者在編程中應用。
一即第10章匯編語言程序設計實例
【例10-1】在微型計算機系統上常常可以顯示實時
時鐘,這就要求能輸出數碼00?59。要輸出多于一個
字符時,要利用DOS功能調用9,它是向CRT輸出字符
串的子程序,要求在調用前使DX指向字符串的首地
址,字符串必須以字符'、$〃結束,則功能調用9能把字
符''$〃之前的全部字符向CRT輸出。系統調用形式如
下:
委卜第10章匯編語言程序設計實例________________
MOVDX,OFFSETOUTSTRING
;首地址裝入DX寄存器
MOVAH,9;系統功能調用號送入AH
INT21H;啟動DOS功能調用
程序流程圖如圖10.1所示。程序的清單如下:
TITLE例10-1.ASM
STACKSEGMENTPARASTACK'STACK'
第10章匯編語言程序設計實例
DB100DUP(?)
STACKENDS
DATASEGMENT
BUFFERDB3DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,
SS:STACK
STARTPROCFAR
一即第10章匯編語言程序設計實例
圖10.1例10-1流程圖
第10章匯編語言程序設計實例
BEGIN:PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVCX,1000
MOVBL,0
LEASLBUFFER
PUSHBX
.,
第10章匯編語言程序設計實例
GOON:MOVDL,ODH
MOVAH,2
INT21H
MOVDL,OAH
MOVAH,2
INT21H
POPBX
第10章匯編語言程序設計實例
MOVAL,BL
INCAL
DAA
CMPAL,60H
JCNEXT
MOVAL,0
第10章匯編語言程序設計實例
NEXT:MOVBL,AL
PUSHBX
MOVDL,AL
PUSHCX
MOVCL,4
SHRAL,CL
ORAL,30H
MOV[SI],AL
第10章匯編語言程序設計實例
INCSI
MOVAL,DL
ANDAL,OFH
ORAL,30H
MOV[SI],AL
INCSI
MOVAL,$
MOV[SI],AL
MOVDX,OFFSETBUFFER
MOVAH,9
委卜第10章匯編語言程序設計實例________________
INT21H
MOVCX,OFFFFH
AGAIN:DECCX
JNEAGAIN
POPCX
DECCX
JEDONE
MOVSLOFFSETBUFFER
JMPGOON
KB*
第10章匯編語言程序設計實例
DONE:RET
STARTENDP
CODEENDS
ENDBEGIN
委卜第10章匯編語言程序設計實例________________
10.1.3BIOS功能調用顯示技術
1.PC機彩色圖形模式
PC機彩色圖形適配器有兩大類模式:一種是文本
(字符)模式(AN);另一種是圖形模式(APA)。
而每種模式又可包括不同的顯示方式,可以通過
BIOS的INT10H功能調用號0來設置或改變顯示模式和
顯示方式。采用BIOS設置顯示方式見8.4節。
委卜第10章匯編語言程序設計實例________________
【例10-2】選擇顯示方式。程序流程圖如圖10.2所示。程
序的清單如下:
TITLE例10-2.ASM
STACKSEGMENTSTACKSTACK'
DB100DUP(O)
STACKENDS
DATASEGMENT
一即第10章匯編語言程序設計實例
ERRORDB...INPUTERROR!TRYAGAIN1,OAH,ODH,$
MSGODB***MENU***OAH,ODH,$
MSG1DB1,40*25B&WTEXT,OAH,ODH,$
MSG2DB2,40*25COLORTEXT*,OAH,ODH,$
MSG3DB3,80*25B&WTEXT,OAH,ODH,$
MSG4DB4,80*25CLOORTEXT,OAH,ODH,$
MSGSDB5,320*200COLORGRAPHICS1,0AH,0DH,$
MSG6DB6,320*200B&WGRAPHICS1,0AH,0DH,$
一即第10章匯編語言程序設計實例
COUNTEQU$-MSG6
MSG7DB?PLEASECHOOSE'$
OKDBOAH,ODH,'SETDISPLAY
MODELOK!','$'
DATAENDS
CODESEGMENT
一即第10章匯編語言程序設計實例
圖10.2例10-2流程圖
委卜第10章匯編語言程序設計實例________________
ASSUMECS:CODE,DS:DATA,SS:STACK
SETMODEPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
委卜第10章匯編語言程序設計實例________________
TRV:MOVDX,OFFSETMSGO
MOVDLCOUNT
MOVCX,8
DMENU:CALLDISP
ADDDX,DI
LOOPDMENU
MOVAH,1
INT21H
CMPAL,31H
JLERR
KB*
一即第10章匯編語言程序設計實例
CMPAL,36H
JGERR
SUBAL,3OH
MOVAH,0
INT10H
JMPSETOK
ERR:MOVDX,OFFSETERROR
CALLDISP
一即第10章匯編語言程序設計實例
MOVAH,6
MOVAL,0
MOVBH,7
MOVCX,0
MOVDX,184FH
INT10H
JMPTRV
SETOK:MOVDX,OFFSETOK
第10章匯編語言程序設計實例
CALLDISP
RET
SETMODEENDP
DISPPROCNEAR
MOVAH,9
INT21H
RET
DISPENDP
CODEENDS
ENDSETMODE
委卜第10章匯編語言程序設計實例________________
2.在文本方式下顯示字母、數字和一些字符圖形
對屏幕上的每一個字符,首先應給出它的ASCII碼
值,同時還要給出一個8bit(位)的屬性字節。這個屬性
字節對單色和彩色顯示均有效,在單色文本下,只提
供閃爍、反顯和亮度方面的屬性。
【例10-3】在屏幕的第10行10列以綠底紅字閃爍
顯示''HOWDOYOUDO.〃,程序流程圖如圖10.3所示。
程序的清單如下:
第10章匯編語言程序設計實例
TITLE例10-3.ASM
STACKSEGMENTSTACKSTACK
DB100DUP(O)
STACKENDS
DATASEGMENT
MSGDB'HOWDOYOUDO/
COUNTEQUS-MSG
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK
一即第10章匯編語言程序設計實例
圖10.3例10-3流程圖
一^¥第10章匯編語言程序設計實例
DISPLAYPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVAH,0
MOVAL,3
INT1OH
MOVBH,0
MOVDH,OAH
MOVDL,OAH
一即第10章匯編語言程序設計實例
MOVAH,2
INT10H
MOVSLOFFSETMSG
MOVDI,COUNT
DISP:MOVAL,[SI]
MOVAH,9
MOVCX,1
MOVBH,0
MOVBL,0A4H
INT10H
INCSI
INCDL
MOVBH,0
一即第10章匯編語言程序設計實例
MOVDH,0AH
MOVAH,2
INT10H
DECDI
JNZDISP
RET
DISPLAYENDP
CODEENDS
ENDDISPLAY
委卜第10章匯編語言程序設計實例________________
10.1.4彩色圖形顯示
彩色圖形是在圖形方式下,由一組像素點在屏幕
上形成的。圖形方式相對于文本方式所要處理的數據
量大,而且不同的顯示適配器所支持的分辨率不同,
因此同一彩色圖形在不同分辨率的情況下,處理的數
據量差別很大。
一即第10章匯編語言程序設計實例
1.彩色繪圖
在屏幕上繪制彩色圖形,可用BIOS中INT10H的0
號、n號、12號和13號功能調用。利用INT10H的這些
功能調用,就可使屏幕上的繪圖變得比較簡單。通常
情況下,有以下幾步:
第10章匯編語言程序設計實例
(1)用INT1OH的0號功能將顯示方式設置成
320X200彩色圖形方式。
MOVAH,0;設置顯示方式
MOVAL,4
;置CGA為320X200彩色圖形方式
INT10H;BIOS中斷調用
第10章匯編語言程序設計實例
(2)用INT1OH的11號功能設置彩色圖形方式下的調色板
或背景顏色。
MOVBH,0;設置背景色
MOVBL,C;C=顏色值(0?16)
MOVAH,11;功能號送入AH
INT10H;BIOS中斷調用
MOVBH,1;設置調色板
MOVBL,N;N+周色板號(0,1)
MOVAH,11
INT1OH
第10章匯編語言程序設計實例
(3)在上述工作的基礎上,利用INT1OH的12號功
能調用或13號功能調用在屏幕上寫彩色像素點或讀彩
色像素點。
MOVAH,12;12號功能調用,寫像素點
MOVAL,C;C=像素點顏色(0?3)
MOVDX,ROW;ROW=行號(0-199)
MOVCX,COL;COLSJ號(0-319)
—即第10章匯編語言程序設計實例
INT1OH;BIOS中斷調用
MOVAH,13;13號功能調用,讀像素點
MOVDX,ROW;ROW=行號(0-199)
MOVCX,COL;COL例號(0-319)
INT10H;BIOS中斷調用
委卜第10章匯編語言程序設計實例________________
2.彩色繪圖舉例
【例10-4】編寫一個8086/8088匯編語言程序,使程
序運行后屏幕顯示器成為一臺電子鐘。首先屏幕上顯示
提示符,要求從鍵盤上輸入當前時間,然后每隔一秒使
顯示的秒值加1,達到60秒時使分值加1,秒值清零;達
到60分時使小時值加1,分值清零;達到24小時則小時
值清零。上述過程一直進行下去,當鍵入Ctrl+C時退出
''電子鐘〃狀態,返回DOS。
根據上述要求,可畫出程序的流程圖如圖10.4所示。
一即第10章匯編語言程序設計實例
圖10.4例10-4流程圖
委卜第10章匯編語言程序設計實例________________
其中,顯示一個字符串,以及從鍵盤上接收一個
字符串可分別通過09號和OAH號DOS功能調用實現。
延時1秒可以編寫一個延時子程序。程序中對時、分和
秒三個時間單位有許多類似的操作。例如,分別將它
們由ASCII碼轉換為BCD碼,或由BCD碼轉換為ASCII
碼,以及將時、分和秒值分別加1,并進行DAA調整后
判斷是否達到60H或24H等。對于這樣的程序段,可以
采用宏處理偽指令,以便縮短源程序的長度,使程序
更加清晰,有利于結構的模塊化。
此外,還可以利用BIOS調用設計窗口,選擇適當
的背景色和前景色等,使屏幕顯示更加美觀。程序清
單如下:
一即第10章匯編語言程序設計實例
TITLE例10-4.ASM
DATASEGMENT
BUF1DB*Currenttimeis:$'
BUF2DB10
DB10DUP(?)
DATAENDS
STACKSEGMENTSTACK
DB100DUP(?)
STACKENDS
CODESEGMENT
委卜第10章匯編語言程序設計實例
ASSUMECS:CODE,DS:DATA
ASSUMESS:STACK
CURSORMACROROW,CLM
MOVAH,2
MOVBH,0
MOVDH,ROW
MOVDL,CLM
INT10H
ENDM
第10章匯編語言程序設計實例
WINMACROROWL,CLML,ROWR,
CLMR,COLOR
MOVAH,6
MOVAL,0
MOVCH,ROWL
MOVCL,CLML
MOVDH,ROWR
MOVDL,CLMR
MOVBH,COLOR
INT10H
ENDM
第10章匯編語言程序設計實例
ASCBCDMACROREG
INCBX
INCBX
MOVREG,[BX]
MOVCL,4
SHLREG,CL
INCBX
MOVAL,[BX]
ANDAL,OFH
ORREG,AL
ENDM
一即第10章匯編語言程序設計實例
BCDASCMACROREG
INCBX
INCBX
MOVAL,REG
MOVCL,4
SHRAL,CL
ORAL,3OH
MOV[BX],AL
INCBX
MOVAL,REG
ANDAL,OFH
ORAL,3OH
MOV[BX],AL
ENDM
一即第10章匯編語言程序設計實例
INCBCDMACROREG,COUNT
MOVAL,REG
INCAL
DAA
MOVREG,AL
CMPAL,COUNT
JNZDISPY
MOVREG,0
ENDM
第10章匯編語言程序設計實例
STRDSPYMACROADRS
LEADX,ADRS
MOVAH,9
INT21H
ENDM
CLOCKPROCFAR
START:PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
—即第10章匯編語言程序設計實例
WIN0,0,24,79,7,
WIN9,28,15,52,01010111B
CURSOR11,32
STRDSPYBUF1
CURSOR13,36
LEADX,BUF2
MOVAH,OAH
INT21H
LEABX,BUF2
ASCBCDCH
ASCBCDDH
ASCBCDDL
一即第10章匯編語言程序設計實例
TIMER:CALLDELY
INCBCDDL,60H
INCBCDDH,60H
INCBCDCH,24H
DISPY:LEABX,BUF2
BCDASCCH
BCDASCDH
BCDASCDL
INCBX
MOVAL,$
■
第10章匯編語言程序設計實例
MOV[BX],AL
PUSHDX
CURSOR13,36
STRDSPYBUF2
POPDX
JMPTIMER
DELYPROC
PUSHCX
PUSHAX
MOVAX,3FFFH
第10章匯編語言程序設計實例
XI:MOVCX,OFFFFH
X2:DECCX
JNEX2
DECAX
JNEXI
POPAX
POPCX
RET
DELYENDP
CLOCKENDP
CODEENDS
ENDSTART
一即第10章匯編語言程序設計實例
用這個程序可在屏幕上畫出一些復雜圖形,如多
邊形、山水花鳥和汽車等,也可在該程序的基礎上增
加圖形裝入、存盤和打印功能,以提高程序的實用性。
<Back
一即第10章匯編語言程序設計實例
10.2音頻發聲系統程序設計
10.2.1PC機的發聲原理
IBM-PC系列機的主機箱裝有一個小揚聲器,系統
板上的定時器8253(或8254)利用工作方式3產生一定
頻率信號,通過可編程的并行外圍接口芯片8255(或
8255A)控制其發音。揚聲器的控制驅動電路如圖10.5
所示。
一即第10章匯編語言程序設計實例
圖10.5揚聲器控制驅動電路
委卜第10章匯編語言程序設計實例________________
可編程的并行接口芯片8255有三個8位的并行端口:
A口、B口和C口。在IBM系列微機中,BIOS在開機自
檢后已將8255初始化為A口和C口用于輸入,B口用于
輸出。B口的I/O端口地址為61H。
由圖10.5可見,8255B口的低兩位用來控制揚聲器
驅動,當輸出端口61H的D1位為或為''0〃時,將使
控制驅動器的與門電路接通或關閉,使8254所發出的
音頻信號能到達驅動器或被阻斷。這樣通過控制D1位
的變化,可使揚聲器接通和斷開,控制揚聲器是否能
發出聲音。此外,通過控制D1位的通斷時間,就能發
出不同的音長。
委卜第10章匯編語言程序設計實例________________
61H端口的DO位為''1〃時,控制8254定時器產生驅
動揚聲器發聲的音頻信號,該位為''0〃則不發信號。
8254有三個定時器,分為0號、1號和2號定時器,驅動
揚聲器的是2號定時器,該定時器工作在方式3,是一
個頻率發生器,它負責向揚聲器發送指定頻率的脈沖
信號。
當8255輸出端口61H的D1位為''1〃時,在61H的DO
位為'、1〃,8254發出指定頻率的聲音信號的前提下,聲
音信號通過與門到達驅動器驅動揚聲器發聲。本節主
要介紹利用8254產生聲音和樂曲。
一即第10章匯編語言程序設計實例
10.2.2發音程序
BIOS中有一個BEEP子程序,它可以產生896Hz的
聲音,且聲音持續時間只能是0.5s的整數倍。BEEP子
程序用于PC機加電自檢發現硬件錯誤,或正常進入系
統等過程后,向用戶發出聲音提示。可以利用這一子
程序的思路,來編寫通用的發音程序。
發音程序的編制需要進行以下四個方面工作。
第10章匯編語言程序設計實例
(1)確定發聲頻率。BEEP子程序將計數值533H送
8254的定時器2而產生896Hz的聲音,那么要產生其他
頻率的聲音,則必須將對應頻率的計數值送8254的定
時器2產生其他頻率聲音的計數值。該方法如下所示:
533Hx896?給定頻率=123280+給定頻率
(也可用定時器的時鐘1192576Hz直接計算計數值:
1192576+給定頻率。)
假設給定頻率在DI中,可用下面的指令序列在AX
中得到計數值。
■
委卜第10章匯編語言程序設計實例________________
MOVDX,12H
MOVAX,3280
DIVDI;計算某頻率的計數值
為了不產生除法溢出,限制DI中的頻率不低于19
Hz,一般情況下聲音頻率不會這樣低。
一即第10章匯編語言程序設計實例
(2)確定音長。BEEP子程序只能產生持續時間(音
長)為0.5s的整數倍的音長,如果要求持續時間容易調
整,利用軟件延時程序可選擇較短的持續時間作為基
數,如10ms(毫秒)。10ms延時可由執行循環指令實
現:
MOVCX,2801
DELAY:LOOPDELAY
如果要產生與10ms成倍數的延時,可將倍數送到BX
寄存器中,由BX再控制10ms延時指令的執行次數。如
產生0.5s持續時間,則將50送入BX中,指令序列如下:
第10章匯編語言程序設計實例
MOVBX,50
DELAYO:MOVCX,2801
DELAY1:LOOPDELAY1
DECBX
JNZDELAYO
一即第10章匯編語言程序設計實例
(3)定時器調節。在對BEEP子程序作上述兩方面修
改的基礎上就可以編寫一個任一頻率(由DI指定)和
任一持續時間(由CX和BX指定)的通用發音程序。
由于該發音程序使用8254定時器2產生聲音的頻率,因
此需要對定時器2進行相應的設置。
①對輸入/輸出端口43H(該端口分配給8254的工
作方式寄存器)送一個特定的數0B6H,這個數用于對
定時器2的工作方式進行初始化,使定時器2準備接收
計數值。
一即第10章匯編語言程序設計實例
②對輸入/輸出端口42H(該端口分配給定時器2)
中送一個16位的計數值(即123280+給定頻率),用
于設置將要產生的聲音頻率。
(4)操作揚聲器開關。由于揚聲器驅動由8255的輸
出端口61H的低兩位控制,故應把輸出端口61H的Do和
D]位置、'1〃,以便使揚聲器發出聲音。
一即第10章匯編語言程序設計實例
10.2.3樂曲演奏程序
利用通用發音子程序CSOUND,可以編寫演奏樂
曲程序。在樂曲中,每個音符的音高和音長與頻率節
拍有關。下面給出音律表的一部分,見表10-3,該表
對應3個音階。
委卜第10章匯編語言程序設計實例________________
表10-3音階頻率對照表
音名CDEFGABCD'E'F'G'A'B'
簡譜....i"2345671234567
頻率131147165175196220247262294330349392440494
C"D"E"F"G"A"B"
1234567
524588660698784880984
委卜第10章匯編語言程序設計實例________________
演奏樂曲的程序中需要有兩組數據支持:一組是
頻率數據;一組是節拍時間數據。音符的頻率可以從
表10-3中查得。節拍時間就是音符的持續時間,取決
于樂曲的速度和每個音符的節拍數據。如4/4(四四拍)
中,每小節包括4拍,全音符持續4拍,二分音符持續2
拍,四分音符持續一拍,八分音符持續半拍等。
有了音調與頻率和時間的關系后,就可以按照樂
曲的曲譜將每個音符的頻率和持續的時間定義成兩組
數據表,然后編程依次取出表中的頻率值和時間值,
調用CSOUND子程序就可發出各種聲音。例10-5的程
序中為全音符分配了1s時間。
一即第10章匯編語言程序設計實例
【例10-51圖10.6是“兩只老虎”的簡譜。根據樂
譜在數據段中定義了頻率數據表(Freq)和節拍時間
數據表(Time),程序以?1作為頻率數據表的結束標
志。程序流程圖如圖10.7所示,演奏該樂曲程序如下:
1=C4/4
一即第10章匯編語言程序設計實例
1=C4/4
1231|1231|345-1345-|
565J31|565431|251-|251-
圖10.6“兩只老虎”簡譜
一即第10章匯編語言程序設計實例
NAME例10-5.ASM
DATASEGMENT
FREQW262,294,330,262,262,294,330,262
W330,349,392,330,349,392,392,440
W392,349,330,262,392,440,392,349
DW330,262,294,196,262,294,196,262,-1
一即第10章匯編語言程序設計實例
TIMEDW25,25,25,25,25,25,25,25,25,25
DW50,25,25,50,12,12,12,12,25,25
DW12,12,12,12,25,25,25,25,50,25,
25,50
SNAMEDBTWOTIGER.
DATAENDS
STACKSEGMENTSTACKSTACK
DB100DUP(O)
STACKENDS
CODESEGMENT
ASSUMECS:CODE,SS:STACK,DS:DATA
一即第10章匯編語言程序設計實例
圖10.7例10-5流程圖
一即第10章匯編語言程序設計實例
PLAYPROCFAR
PUSHDS
MOVAX,0
PUSHAX
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETSNAME
MOVAH,9
INT21H
MOVAL,0B6H
OUT43H,AL
MOVBP,OFFSETTIME
MOVSI,OFFSETFREQ
一即第10章匯編語言程序設計實例
SONG:MOVDL[SI]
CMPDL?1
JZEXIT
MOVBX,DS:[BP]
CALLCSOUND
INCSI
INCSI
INCBP
INCBP
JMPSONG
委卜第10章匯編語言程序設計實例
EXIT:RET
CSOUNDPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
MOVDX,12H
MOVAX,34DCH
DIVDI
OUT42H,AL
一即第10章匯編語言程序設計實例
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,03H
OUT61H,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件設計師考試市場分析試題及答案
- 環境政策與政治動員關系研究試題及答案
- 政府干預經濟的公共政策策略及答案
- 軟件設計師考試技能驗證方式試題及答案
- 深入探討機電工程師的職業發展現狀與試題及答案
- 公共政策中的社會公平考題及答案
- 5G技術在智慧養老院中的應用探索
- 支持與反對西方政治制度的多面性試題及答案
- 機電工程2025年機械設計試題及答案
- 網絡工程師考試知識樹梳理試題及答案
- 村務管理崗面試題及答案
- 電力企業應急預案評審與備案細則
- 《水與健康》課件
- 社區護理學名詞解釋
- 7.1 文化哲學的演變及其變革
- 如何培養和提升大學生的國防意識(通用5篇)
- 三級動火證 模板
- 評語大全之國家自然科學基金評語
- 獸藥監管法規解讀課件
- 五金價格報價表參考
- 支氣管鏡精品課件
評論
0/150
提交評論