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