微型計(jì)算機(jī)匯編語(yǔ)言設(shè)計(jì) 第10章匯編語(yǔ)言程序設(shè)計(jì)實(shí)例_第1頁(yè)
微型計(jì)算機(jī)匯編語(yǔ)言設(shè)計(jì) 第10章匯編語(yǔ)言程序設(shè)計(jì)實(shí)例_第2頁(yè)
微型計(jì)算機(jī)匯編語(yǔ)言設(shè)計(jì) 第10章匯編語(yǔ)言程序設(shè)計(jì)實(shí)例_第3頁(yè)
微型計(jì)算機(jī)匯編語(yǔ)言設(shè)計(jì) 第10章匯編語(yǔ)言程序設(shè)計(jì)實(shí)例_第4頁(yè)
微型計(jì)算機(jī)匯編語(yǔ)言設(shè)計(jì) 第10章匯編語(yǔ)言程序設(shè)計(jì)實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩113頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論