设计乐曲实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言设计性试验报告
计算机与信息技术学院设计性实验报告
专业:计算机科学与技术年级/班级:2008级(2)班
一、实验目的
1、掌握汇编语言程序设计及开发过程;
2、掌握分支、循环程序设计方法;
3、掌握子程序设计方法;
4、熟悉输入输出程序设计思想;
5、掌握常用BIOS和DOS中断;
6、熟悉发声系统程序设计。
二、实验仪器或设备
安装了masm汇编程序微型电脑一台
三、总体设计(设计原理、设计方案及流程等)
两只老虎
1=C 4/4
1 2 3 1 | 1 2 3 1 | 3 4 5 -- |
3 4 5 - | 56 54 3 1 | 56 54 3 1 |
2 5. 1 - | 2 5. 1 - |
音阶表如下:
〔设计原理和方案〕这次课程设计的设计思想是在熟练掌握汇编程序的设计方法的基础上,利用通用发生程序编写音乐程序.组成音乐的每个音符的频率值和持续时间是音乐程序发声所需要的两个数据,根据音调与频率和时间之间的关系,把要编辑的音乐的每个音符的频率和持续时间定义成两个数据表,进而把它们写入通用发声程序,音乐程序就完成。
在编制此音乐演奏程序时,ROM BIOS 中有个BEEP子程序,这能根据BL中组出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。首先了解计算机是如何产生声音和乐曲的。找出相关程序源代码,弄清楚各功能的环节间的联系、联接方法,搞清楚单调与频率和时间的关系,利用计算机控制发声的原理,依照基本的算法思想写程序,测试,更正,扩充功能,修饰细节。
〔总体方案设计〕
主程序流程图:
图1主流程图
gensound子程序流程图:
图2 gensound子程序流程图
四、实验步骤(包括主要步骤、代码分析等)
实验程序代码如下:
;----------------------------------------------------------------- stack_segment segment
dw 512 dup(?)
stack_segment ends
;-------------------------------------------------------------------- data_segment segment
string db 2,?,2 dup(?)
messg1 db 'WELCOME COME HERE!','$'
messg2 db 0ah,0dh,'IT IS A MUSIC PROGRAM !','$'
messg3 db 0ah,0dh,'SELECT! (Q: EXIT , OTHER KEY: CONTINUE )','$' messg4 db 0ah,0dh,'PLEASE INPUT TIMES : ','$'
messg5 db 0DH,0AH,'INPUT ERROR!$'
buf_substring db 10
db ?
db 10 dup(?)
db '$'
music_freq dw 262,294,330,262
dw 262,294,330,262
dw 330,349,392
dw 330,349,392
dw 392,440,392,349,330,262
dw 392,440,392,349,330,262
dw 294,196,262
dw 294,196,262,-1
music_time dw 800,800,800,800
dw 800,800,800,800
dw 800,800,800
dw 800,800,800
dw 400,400,400,400,800,800
dw 400,400,400,400,800,800
dw 800,800,800
dw 800,800,800
flag db ?
data_segment ends
;------------------------------------------------------------
code_segment segment
assume cs:code_segment,ds:data_segment,ss:stack_segment
main proc far
start:
mov ax,data_segment
mov ds,ax
mov ax,stack_segment
mov ss,ax
lea dx,messg1 ;输出提示信息
mov ah,09h
int 21h
lea dx,messg2
mov ah,09h
int 21h
lea dx,messg3
mov ah,09h
int 21h
input: mov ah,01h
int 21h
cmp al,'Q'
jz exit ;如果输入的是“Q”,则结束演奏,退出程序.
l0: lea dx,messg4
mov ah,09h
int 21h
lea dx,buf_substring
mov ah,0ah