汇编语言两只老虎实验报告.docx

上传人:b****5 文档编号:6077078 上传时间:2023-01-03 格式:DOCX 页数:16 大小:131.37KB
下载 相关 举报
汇编语言两只老虎实验报告.docx_第1页
第1页 / 共16页
汇编语言两只老虎实验报告.docx_第2页
第2页 / 共16页
汇编语言两只老虎实验报告.docx_第3页
第3页 / 共16页
汇编语言两只老虎实验报告.docx_第4页
第4页 / 共16页
汇编语言两只老虎实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

汇编语言两只老虎实验报告.docx

《汇编语言两只老虎实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言两只老虎实验报告.docx(16页珍藏版)》请在冰豆网上搜索。

汇编语言两只老虎实验报告.docx

汇编语言两只老虎实验报告

 

 

姓名:

陈柯吉

学号:

2012141441338

第三次实验8253定时器/计数器与接口实验

------乐曲程序

计算机是如何产生音乐和声响的呢?

原来在计算机中有一个可编程时间间隔定时器8253,它能根据程序提供的计数值和工作模式,产生各种形状和各种频率的计数/定时脉冲,提供给系统的各个部件使用。

它还可以产生不同频率的脉冲作为扬声器的声源。

在8253定时器内部有3个独立工作的计数器:

Counter0,Counter1,Countre2,每个计数器都分配有一个端口地址,分别是40H,41H,42H。

8253内部还有一个公用的控制寄存器,端口地址为43H,端口地址输入到8253的CS,A1,A0端,分别对三个计数器和控制器寻址。

对8253编程时,先要设定控制字,以选择计数器,确定工作模式和计数值的格式,每个计数器由三个引脚与外部联系,CLK为时钟输入端,GATA为门控制信号输入端,OUT为计数/定时信号输入端。

每个计数器是以倒计数的方式计数,也就是说,从计数初值开始逐次减1,直到减为0为止。

端口地址与计数器的关系:

40H

选中计数器0:

作为定时器为系统日时钟提供计时基准

41H

选中计数器1:

作为定时器使用

42H

选中计数器2:

用来控制扬声器发声

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;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的数字选择循环次数

 

打开扬声器

调用延时子程序

关闭扬声器

STACKSEGMENT

DW100DUP(?

STACKENDS

DATASEGMENT

MUSICDW2DUP(262,294,330,262);频率表,1231;1231

DW2DUP(330,349,392);345;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个音符

MDB?

SAYDB'Pleaseinputthetimes(1~9)youwant:

','$'

SAY2DB'1.TIGERS2.PIANO:

','$'

SAY3DB'ERROR','$'

DATAENDS

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

INT21H;输入一个字符

CMPAL,31H

JETIGERS;与一比较,相等则转TIGERS

CMPAL,32H

JEPIANO2;与二比较,相等则转PIANO

MOVDL,0AH;以下三行输入一个回车

MOVAH,2

INT21H

LEADX,SAY3

MOVAH,9

INT21H;显示输出'ERROR'

JMPAGA

TIGERS:

LEADX,SAY

MOVAH,9

INT21H;输出“TINGJIBIAN:

$”

CALLINPUT

A:

CALLSONG

DECM

JNZA;M自减1

JMPQUIT2

PIANO2:

CALLPIANO

;---------------------------------------------------------------------------------------------------------------------

;子程序INPUT

;输入

;---------------------------------------------------------------------------------------------------------------------

INPUTPROC

MOVAH,1

INT21H;输入一个字符

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

OUT42H,AL

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

RET

DELAYENDP

;---------------------------------------------------------------------------------------------------------------------

;---------------------------------------------------------------------------------------------------------------------

;子程序piano

;---------------------------------------------------------------------------------------------------------------------

PIANOPROC

MOVDL,0AH

MOVAH,2

INT21H

LP:

MOVAH,1

INT21H;输入一个字符

HIGH1:

CMPAL,31H

JNEHIGH2

MOVDI,523

JMPSOUND

HIGH2:

CMPAL,32H

JNEHIGH3

MOVDI,587

JMPSOUND

HIGH3:

CMPAL,'3'

JNEHIGH4

MOVDI,659

JMPSOUND

HIGH4:

CMPAL,'4'

JNEHIGH5

MOVDI,698

JMPSOUND

HIGH5:

CMPAL,'5'

JNEHIGH6

MOVDI,784

JMPSOUND

HIGH6:

CMPAL,'6'

JNEHIGH7

MOVDI,880

JMPSOUND

HIGH7:

CMPAL,'7'

JNEMIDDLE1

MOVDI,988

JMPSOUND

MIDDLE1:

CMPAL,'Q'

JNEMIDDLE2

MOVDI,262

JMPSOUND

MIDDLE2:

CMPAL,'W'

JNEMIDDLE3

MOVDI,294

JMPSOUND

MIDDLE3:

CMPAL,'E'

JNEMIDDLE4

MOVDI,330

JMPSOUND

MIDDLE4:

CMPAL,'R'

JNEMIDDLE5

MOVDI,349

JMPSOUND

MIDDLE5:

CMPAL,'T'

JNEMIDDLE6

MOVDI,392

JMPSOUND

MIDDLE6:

CMPAL,'Y'

JNEMIDDLE7

MOVDI,440

JMPSOUND

MIDDLE7:

CMPAL,'U'

JNELOW1

MOVDI,494

JMPSOUND

LOW1:

CMPAL,'A'

JNELOW2

MOVDI,131

JMPSOUND

LOW2:

CMPAL,'S'

JNELOW3

MOVDI,147

JMPSOUND

LOW3:

CMPAL,'D'

JNELOW4

MOVDI,165

JMPSOUND

LOW4:

CMPAL,'F'

JNELOW5

MOVDI,175

JMPSOUND

LOW5:

CMPAL,'G'

JNELOW6

MOVDI,196

JMPSOUND

LOW6:

CMPAL,'H'

JNELOW7

MOVDI,220

JMPSOUND

LOW7:

CMPAL,'J'

JNEQUIT1

MOVDI,247

JMPSOUND

QUIT1:

CMPAL,1BH

JEQUIT2

JMPLP

SOUND:

MOVDX,12H

MOVAX,34DCH

DIVDI;设置计数初值

OUT42H,AL

MOVAL,AH

OUT42H,AL

INAL,61H

ORAL,3

OUT61H,AL;打开扬声器

POPDI

MOVCX,20000

CALLDELAY;调用延时子程序

INAL,61H

ANDAL,0FCH

OUT61H,AL;关闭扬声器

JMPLP

;---------------------------------------------------------------------------------------------------------------------

QUIT2:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

输入想播放的遍数

电子琴,A~J低音1~7

Q~U中音1~7

1~7高音1~7

通过本次试验,我对masm的使用更加熟悉,能更好的进行汇编程序设计。

我认为在编写程序前绘制流程图是比较有用的,能使自己在编写时保持清晰的思路。

熟悉各个语句的功能是非常必要的,列如各种中断的调用,虽然书上都有,但是熟练之后对速度提升很大。

并且编写程序时要细心,多做注释标注,方便程序的调试和修改,注意符号的圆角和半角。

 

WelcomeTo

Download!

!

!

 

欢迎您的下载,资料仅供参考!

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1