汇编语言两只老虎实验报告Word文件下载.docx
- 文档编号:19074736
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:16
- 大小:131.37KB
汇编语言两只老虎实验报告Word文件下载.docx
《汇编语言两只老虎实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言两只老虎实验报告Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
用来控制扬声器发声
43H
公用的控制器:
分别对三个寄存器和控制器寻址
那么,如何触动扬声器发出声音呢?
原来PC机的主音箱上装有一只小喇叭,由定时器8253和并行接口芯片8255(可编程外围接口芯片)控制其发声,8255包括三个8位寄存器,两个用于输入功能,一个用于输出功能。
输入寄存器分配的I/O端口地址为60H和62H,输出寄存器分配的I/O端口地址为61H。
8253定时器计数器2连接到扬声器,其电路如下:
8253DRIVER
1.9318MHZCLK喇叭
OUT2
8255
PB0GATE2
PB1
装入计数器2的计数初值为533H(1.19318MHz/896Hz=1331=533H),这样,得到的控制字为10110110B=0B6H,即选中计数器2,读/写,工作方式三(方波发声器),二进制。
计数器2的初始化程序为:
MOVAL,0B6H
OUT43H,AL
1)计算计数值程序段:
MOVDI,给定频率
MOVDX,12H
MOVAX,34DCH
DIVDI
AX中即为计数值。
2)打开扬声器发声,8255PB0,PBI送出高电平:
INAL,61H
ORAL,3
OUT61H,AL
3)关闭扬声器,停止发声:
INAL,61H
ANDAL,0FCH
OUT61H,AL
两只老虎的音频表定义在数据段中,如下:
STACKSEGMENT
DW100DUP(?
)
STACKENDS
DATASEGMENT
MUSICDW2DUP(262,294,330,262);
频率表,1231;
1231
DW2DUP(330,349,392);
345;
DW2DUP(392,440,392,349,330,262);
565431;
565431
dw2dup(294,196,262),0;
251;
251,0表示结束
TIMEDW10DUP(250*50),500*50,250*50,250*50,500*50;
节拍表
DW2DUP(120*50,120*50,120*50,120*50,250*50,250*50)
DW2DUP(250*50,250*50,500*50)
NEQU32;
32个音符
DATAENDS
二.实验目的:
学习8253计数器2输出方波信号用以驱动扬声器发声的原理,通过程序设置计数器2的输出波形的频率和延续时间,控制扬声器的音调和发生长短。
三.实验内容:
1.设计程序让微机演奏一段两只老虎的乐曲。
2.思考如何让PC机演奏一遍,两遍以及数遍这段两只老虎的乐曲,并修改程序实现。
四.实验报告:
整理出运行正确的源程序清单(加以中文注释),并给出详细程序流程图。
开始
输入1~9的数字选择循环次数
打开扬声器
调用延时子程序
关闭扬声器
MDB?
SAYDB'
Pleaseinputthetimes(1~9)youwant:
'
'
$'
SAY2DB'
1.TIGERS2.PIANO:
SAY3DB'
ERROR'
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK;
说明代码段、数据段、附;
加段、堆栈段
START:
MOVAX,DATA;
设置数据段的段地址
MOVDS,AX
MOVES,AX
AGA:
LEADX,SAY2
MOVAH,9
INT21H;
输出“1.TIGERS2.PIANO”
MOVAH,1
输入一个字符
CMPAL,31H
JETIGERS;
与一比较,相等则转TIGERS
CMPAL,32H
JEPIANO2;
与二比较,相等则转PIANO
MOVDL,0AH;
以下三行输入一个回车
MOVAH,2
INT21H
LEADX,SAY3
显示输出'
JMPAGA
TIGERS:
LEADX,SAY
输出“TINGJIBIAN:
$”
CALLINPUT
A:
CALLSONG
DECM
JNZA;
M自减1
JMPQUIT2
PIANO2:
CALLPIANO
;
---------------------------------------------------------------------------------------------------------------------
子程序INPUT
输入
---------------------------------------------------------------------------------------------------------------------
INPUTPROC
LEASI,M
SUBAL,30H;
将ASCII码转为16进制数
MOV[SI],AL
RET
INPUTENDP
子程序SONG
播放音乐
SONGPROC
MOVAL,0B6H
OUT43H,AL;
选择计数器2
LEASI,MUSIC
LEADI,TIME
MOVCX,N;
循环次数
SONG2:
PUSHCX
PUSHDI
MOVDI,[SI]
MOVDX,12H
MOVAX,34DCH
DIVDI;
设置计数初值
OUT42H,AL
MOVAL,AH
INAL,61H
ORAL,3
OUT61H,AL;
POPDI
MOVCX,20000
CALLDELAY;
INAL,61H
ANDAL,0FCH
OUT61H,AL;
ADDSI,2
ADDDI,2
POPCX
LOOPSONG2
SONGENDP
子程序DELAY
延时子程序
DELAYPROC
PUSHAX
PUSHBX
MOVBX,[DI]
DELAY1:
AGAIN:
LOOPAGAIN
DECBX
JNZDELAY1
POPBX
POPAX
DELAYENDP
子程序piano
PIANOPROC
MOVDL,0AH
LP:
HIGH1:
CMPAL,31H
JNEHIGH2
MOVDI,523
JMPSOUND
HIGH2:
CMPAL,32H
JNEHIGH3
MOVDI,587
HIGH3:
CMPAL,'
3'
JNEHIGH4
MOVDI,659
HIGH4:
4'
JNEHIGH5
MOVDI,698
HIGH5:
5'
JNEHIGH6
MOVDI,784
HIGH6:
6'
JNEHIGH7
MOVDI,880
HIGH7:
7'
JNEMIDDLE1
MOVDI,988
MIDDLE1:
Q'
JNEMIDDLE2
MOVDI,262
MIDDLE2:
W'
JNEMIDDLE3
MOVDI,294
MIDDLE3:
E'
JNEMIDDLE4
MOVDI,330
MIDDLE4:
R'
JNEMIDDLE5
MOVDI,349
MIDDLE5:
T'
JNEMIDDLE6
MOVDI,392
MIDDLE6:
Y'
JNEMIDDLE7
MOVDI,440
MIDDLE7:
U'
JNELOW1
MOVDI,494
LOW1:
A'
JNELOW2
MOVDI,131
LOW2:
S'
JNELOW3
MOVDI,147
LOW3:
D'
JNELOW4
MOVDI,165
LOW4:
F'
JNELOW5
MOVDI,175
LOW5:
G'
JNELOW6
MOVDI,196
LOW6:
H'
JNELOW7
MOVDI,220
LOW7:
J'
JNEQUIT1
MOVDI,247
QUIT1:
CMPAL,1BH
JEQUIT2
JMPLP
SOUND:
QUIT2:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
输入想播放的遍数
电子琴,A~J低音1~7
Q~U中音1~7
1~7高音1~7
通过本次试验,我对masm的使用更加熟悉,能更好的进行汇编程序设计。
我认为在编写程序前绘制流程图是比较有用的,能使自己在编写时保持清晰的思路。
熟悉各个语句的功能是非常必要的,列如各种中断的调用,虽然书上都有,但是熟练之后对速度提升很大。
并且编写程序时要细心,多做注释标注,方便程序的调试和修改,注意符号的圆角和半角。
WelcomeTo
Download!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 老虎 实验 报告