版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一即第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度城乡实体地域划分与土地利用规划合同3篇
- 2025年度体育场馆周边临时停车位租赁管理协议3篇
- 2025年度文化创意产业出借咨询及合作开发合同4篇
- 2025年度汽车零部件OEM贴牌生产协议2篇
- 2025年度特色民宿租赁服务合同范本4篇
- 《电池技术教程》课件
- 2025年度租赁汽车保险理赔服务合同模板4篇
- 2025年物业管理员考试辅导教材基本知识问答合同3篇
- 2025年湖南怀化信合劳务有限公司招聘笔试参考题库含答案解析
- 2025年浙江湖州建欣商贸有限公司招聘笔试参考题库含答案解析
- (二统)大理州2025届高中毕业生第二次复习统一检测 物理试卷(含答案)
- 影视作品价值评估-洞察分析
- 公司员工出差车辆免责协议书
- 2023年浙江杭州师范大学附属医院招聘聘用人员笔试真题
- 江苏某小区园林施工组织设计方案
- 口腔执业医师定期考核试题(资料)带答案
- 2024人教版高中英语语境记单词【语境记单词】新人教版 选择性必修第2册
- 能源管理总结报告
- 药店医保政策宣传与执行制度
- 勘察工作质量及保证措施
- 体外膜肺氧合(ECMO)并发症及护理
评论
0/150
提交评论