汇编.docx

上传人:b****3 文档编号:6974978 上传时间:2023-05-10 格式:DOCX 页数:11 大小:49.24KB
下载 相关 举报
汇编.docx_第1页
第1页 / 共11页
汇编.docx_第2页
第2页 / 共11页
汇编.docx_第3页
第3页 / 共11页
汇编.docx_第4页
第4页 / 共11页
汇编.docx_第5页
第5页 / 共11页
汇编.docx_第6页
第6页 / 共11页
汇编.docx_第7页
第7页 / 共11页
汇编.docx_第8页
第8页 / 共11页
汇编.docx_第9页
第9页 / 共11页
汇编.docx_第10页
第10页 / 共11页
汇编.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编.docx

《汇编.docx》由会员分享,可在线阅读,更多相关《汇编.docx(11页珍藏版)》请在冰点文库上搜索。

汇编.docx

汇编

课程设计任务书

学生姓名:

专业班级:

软件工程0401班

指导教师:

杨青工作单位:

计算机科学与技术学院

题目:

乐曲程序

初始条件:

理论:

完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。

实践:

完成了《汇编语言程序设计》的四个实验,熟悉汇编语言程序的设计环境并掌握汇编语言程序的调试方法。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

进一步理解和掌握程序直接控制I/O方式,掌握计算机发声程序的设计。

具体的设计任务及要求:

1.采用位触发方式编写程序,使计算机发出音响并奏出《两只老虎》的乐曲。

1)通过查阅相关资料,进一步理解程序直接控制I/O方式和位触发方式控制声音的工作原理。

2)一首乐曲是由不同频率和节拍的音调组成,因此控制脉冲的频率和持续时间是编写乐曲程序的关键。

根据已知的音符频率对照表,给出乐曲的频率表;设二分音符持续时间为0.5秒(50*10ms),50作为2拍的计数值,给出乐曲的节拍时间表;

3)编写程序并调试通过。

2.进一步学习利用定时器产生声音的方法,使计算机奏出《两只老虎》的乐曲。

在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。

阅读资料:

1)《IBM—PC汇编语言程序设计实验教程》3.1节

2)《IBM—PC汇编语言程序设计(第2版)》10.4节,10.5节

时间安排:

设计安排一周:

周1、周2:

完成系统分析及设计。

周3、周4:

完成程序调试,和验收。

周5:

撰写课程设计报告。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

乐曲程序

1课程设计的任务和要求

1.1采用位触发方式编写程序,使计算机发出音响并奏出《两只老虎》的乐曲。

1.1.1通过查阅相关资料,进一步理解程序直接控制I/O方式和位触发方式控制声音的工作原理。

1.1.2一首乐曲是由不同频率和节拍的音调组成,因此控制脉冲的频率和持续时间是编写乐曲程序的关键。

根据已知的音符频率对照表,给出乐曲的频率表;设二分音符持续时间为0.5秒(50*10ms),50作为2拍的计数值,给出乐曲的节拍时间表;

1.1.3编写程序并调试通过。

1.2进一步学习利用定时器产生声音的方法,使计算机奏出《两只老虎》的乐曲。

在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。

2关键技术和方法

2.1位触发方式

程序直接控制PPI的输出控制器(I/O端口为61H)的第一位,使该位按所需的频率进行1和0的交替变化,从而控制开关电路产生一串脉冲波形,这些脉冲波形经放大后驱动扬声器发出声音。

如果控制波形的脉宽和长度就可以产生不同频率和不同音长的声音。

采用触发器方式发声的程序段如下:

Inal,61H

Movah,al

Andal,11111100b

sound:

xoral,2

out61h,al

movcxdx

wait:

loopwait

decbx

jnzsound

moval,ah

out61h,al

2.2利用定时器产生声音

CPU通过对定时器的通道2进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低位控制通道2门控的开断,以产生特殊的音响。

当定时器接收的计数值为533H时,能产生896Hz的声音。

利用定时器产生指定频率声音的程序段

Moval,10110110b

Out43h,al

Movdx,12h

Movax,34Dch

Divdi

Out42h,al

Moval,ah

Out42h,al

3设计方案和说明

3.1模块说明功能定义和出口参数

3.1.1

为该乐曲定义频率表和节拍时间表。

MUS_FREG1dw2dup(262,294,330,262)

dw2dup(330,349,392)

dw2dup(392,440,392,394,330,262)

dw2dup(294,196,262),-1

MUS_TIME1dw2dup(25,25,25,25)

dw2dup(25,25,50)

dw2dup(12,12,12,12,25,25)

dw2dup(25,25,50)

3.1.2

将两个表的偏移地址放入SI和BP

LEASI,A

LEABP,DS:

B

3.1.3

音符的频率放入DI,音符的持续时间放入BX。

Movdi,[SI]

Movbx,ds:

[BP]

3.1.4调用music的子程序发出音调。

GENSOUNDPROCNEAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHDI

MOVAL,0B6H

OUT43H,AL

MOVDX,12H

MOVAX,348ch

DIVDI

OUT42H,AL;分两次把ax里

MOVAL,AH;面的内容

OUT42H,AL;输到端口42H

INAL,61H;把端口61H的内容送到AL

MOVAH,AL;保存端口61H的初始内容

ORAL,3;

OUT61H,AL;turnonthespeaker

WAIT1:

;时间延迟

MOVCX,5000

callwaitf

DELAY1:

DECBX

JNZWAIT1

MOVAL,AH;

OUT61H,AL;turnoffthespeaker

POPDI

POPDX

POPCX

POPBX

POPAX

RET

3.2流程图

3.3数据结构的定义和说明

STACKSEGMENT

DB200DUP('STACK……')定义堆栈段

SHOWMACROb

LEADX,b

MOVAH,9

INT21H调用显示字符串

ADDRESSMACROA,B

LEASI,A

LEABP,DS:

B音乐地址

4测试及评估

4.1执行结果

4.2

达到了实验的基本要求,可以播放两只老虎的音乐。

5设计心得

弄这个程序费了很大的劲,但是最后还是不太满意。

有一些问题最后是摆脱同学帮助才搞定。

尤其是关于宏的一些应用,自己临时没学会。

以至于最后验收时仍然有很多的疑问。

不过在学习过程中还是有很多的收获,学会了音乐程序的基本设计,能做一些简单的小程序来实现播放乐曲的功能。

以后我会更加努力学习这方面的知识,争取彻底掌握。

6致谢,参考文献

6.1致谢

本研究及学位论文是在我的老师杨青的亲切关怀和悉心指导下完成的。

她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。

从课题的选择到项目的最终完成,杨老师都始终给予我细心的指导和不懈的支持。

在此谨向杨老师致以诚挚的谢意和崇高的敬意。

在此,我还要感谢在一起愉快的度过两年生活的各位同门,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。

有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!

最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!

6.2参考文献

6.2.1《IBM—PC汇编语言程序设计(第2版)》。

编著:

沈美明,温冬婵。

清华大学出版社,2001年8月

6.2.2《IBM—PC汇编语言程序设计使用教程》。

编著:

沈美明,温冬婵,张赤红。

清华大学出版社,1992年9月

7附录:

源程序清单

;music.asm

;wujian1.252007

;**************************数据段*************************

DATASEGMENT

INFO1DB0DH,0AH,'***************************$'

INFO2DB0DH,0AH,'welcome!

!

$'

INFO4DB0DH,0AH,'INPUTERROR!

$'

INFO5DB0DH,0AH,'PLEASEINPUTAGAIN!

$'

MUSLISTDB0DH,0AH,'Themenu:

'

DB0DH,0AH,'1MUSIC1-----------twotigers'

DB0DH,0AH,'QEXIT-------------exit'

db0dh,0ah,'$'

;*******************音乐

MUS_FREG1dw2dup(262,294,330,262)

dw2dup(330,349,392)

dw2dup(392,440,392,394,330,262)

dw2dup(294,196,262),-1

MUS_TIME1dw2dup(25,25,25,25)

dw2dup(25,25,50)

dw2dup(12,12,12,12,25,25)

dw2dup(25,25,50)

DATAENDS

;*****************************堆栈段**************************************

STACKSEGMENT

DB200DUP('STACK……')

STACKENDS

;*****************************代码段*************************************

CODESEGMENT

ASSUMEDS:

DATA,SS:

STACK,CS:

CODE

START:

MOVAX,DATA

MOVDS,AX

MOVaH,0

MOVAL,00

INT10H

;**********用来调用显示字符串的宏

SHOWMACROb

LEADX,b

MOVAH,9

INT21H

ENDM

;**********************音乐地址宏

ADDRESSMACROA,B

LEASI,A

LEABP,DS:

B

ENDM

;***********************

showINFO1

showINFO2

showMUSLIST

INPUT:

MOVAH,01H;输入1和Q来选择开始和退出

INT21H

CMPAL,'Q'

JZretu

CMPAL,'1'

JNZB0

ADDRESSMUS_FREG1,MUS_TIME1

CALLMUSIC

JMPEXIT1

B0:

CMPAL,'2'

JNZC0

CALLMUSIC

JMPEXIT1

C0:

CMPAL,'3'

JNZexit

CALLMUSIC

EXIT1:

showINFO5

JMPINPUT

EXIT:

showINFO4

showINFO5

showINFO1

showINFO2

showMUSLIST

jmpinput

RETU:

MOVAH,4CH

INT21H

;******************************************发声

GENSOUNDPROCNEAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHDI

MOVAL,0B6H

OUT43H,AL

MOVDX,12H

MOVAX,348ch

DIVDI

OUT42H,AL;分两次把ax里

MOVAL,AH;面的内容

OUT42H,AL;输到端口42H

INAL,61H;把端口61H的内容送到AL

MOVAH,AL;保存端口61H的初始内容

ORAL,3;

OUT61H,AL;turnonthespeaker

WAIT1:

;时间延迟

MOVCX,5000

callwaitf

DELAY1:

DECBX

JNZWAIT1

MOVAL,AH;

OUT61H,AL;turnoffthespeaker

POPDI

POPDX

POPCX

POPBX

POPAX

RET

GENSOUNDENDP

;********************************************

waitfprocnear

pushax

waitf1:

inal,61h;p391

andal,10h

cmpal,ah

jewaitf1

movah,al

loopwaitf1

popax

ret

waitfendp

;*********************************************

MUSICPROCNEAR

PUSHDS

SUBAX,AX

PUSHAX

FREG:

MOVDI,[SI];将SI指向的内容传给DI

CMPDI,-1;判断是否到了到了最后

JEEND_MUS

MOVBX,DS:

[BP]

CALLGENSOUND

ADDSI,2

ADDBP,2

JMPFREG

END_MUS:

RET

MUSICENDP

CODEENDS

ENDSTART

 

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

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2