音乐点播程序.docx
- 文档编号:29806227
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:18
- 大小:188.41KB
音乐点播程序.docx
《音乐点播程序.docx》由会员分享,可在线阅读,更多相关《音乐点播程序.docx(18页珍藏版)》请在冰豆网上搜索。
音乐点播程序
西安邮电大学
汇编语言程序设计竞赛报告
音乐点播程序
一、设计题目
经典音乐在线点播程序
2、设计内容
1.在屏幕上显示歌曲菜单;
2.用户从键盘输入将要播放的歌曲的序号;
3.根据歌曲的序号,开始播放不同的音乐;
4.按下序号4,可以实现两个数字的相加;
5.按下序号5,返回Dos界面。
这个程序总体上能够实现经典音乐的播放。
运行时按下1-5键可以演奏不同的乐曲“1:
Happybirthdaytoyou;2:
Maryhadalittlelamb;3:
Taihuboat;4:
Add;5.Quit;”选择曲目序号进行歌曲播放;退出程序。
三、需求分析
(1)背景分析
随着计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。
而汇编语言做为计算机专业大学生必修之课,每个作为本专业的学生对汇编的理解和学习就显的尤为重要。
汇编语言是计算机能够提供给用户使用的最快而又最好最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显的必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。
这次课程设计是在学习汇编语言与实践相结合的一次综合应用。
通过具体的问题分析、设计、调试、运行程序。
在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。
就这个程序具体而言:
知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表;然后编写程序依次取出表中的频率值和时间值,调用SOUNDF程序发出各种声音。
这个程序最终通过菜单所提示的信息选取所要欣赏的音乐,是执行此程序后,会很有速且有效的使扬声器接通并发出音频为896Hz的声音。
(2)功能分析
ROMBIOS中的BEEP子程序能根据BL中给出的时间计数植控制8254定时器,产生持续时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896Hz的声音。
通过对BEEP的修改,可产生任一频率的声音。
用汇编语言写的SOUNDF,能使PC机发出指定频率和指定延时的声音。
它是一个很好的通用发声程序。
组成乐曲的每个音符的频率值和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用SOUNDF程序发出各种声音。
本程序就是通过SOUNDF程序演奏乐曲的例子。
四、概要设计
1、方案设计
(1).歌曲设置程序(包括歌曲的频率和音调,还有界面的制作);
(2).打开另一个显示窗口程序。
用来显示播放音乐的歌曲菜单信息;
(3).接收键盘输入程序。
用户可根据菜单提示信息进行选择,共有5个选项;当用户输入其中一个选项时,执行对应的功能;
(4).返回程序。
当歌曲播放完毕时,程序自动返回菜单页面,可供用户在西进行选择。
(5).发声程序。
由这几个程序完成乐曲的演奏,主要是根据每一个音调的频率来发声,从而连接成完整的乐曲。
结构图:
2、模块功能说明
(1).显示菜单模块:
调用清屏clearscreen子程序,然后显示菜单。
(2).音乐点播模块:
用户从键盘输入序号,如果序号为1,调用callone子程序播放1号歌曲;否则判断序号是否为2,如果序号为2,调用calltwo播放2号歌曲;否则判断序号是否为3,如果序号为3,调用callthree播放3号歌曲。
(3).数字相加模块:
判断用户输入的序号是否为4,如果为4,调用callfour子程序,实现两个数字的相加。
(4)退出模块:
判断用户输入的序号是否为5,如果为5,返回Dos界面。
五、详细设计及运行结果
(1)程序总体流程图
(2)子程序模块流程图
(3)运行结果
结果显示:
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案:
评价:
在本次汇编语言程序设计中,我们主要实现了多任务管理,并能给出菜单界面进行提示。
但是仍存在很多的不足,例如我们没有实现分屏对多任务的管理,而且在程序设计的过程中没有切实考虑到程序的并发执行,实现对内存的合理使用。
改进方案:
在此程序的基础上实现分屏管理,并能利用中断实现多任务的调度分配。
利用对内存和指令指针的管理,实现上下文信息的保存和切换。
2、在设计过程中的感受:
在这次汇编语言程序设计大赛中,我们组设计了音乐发声程序。
从刚开始的不断选题,到分工编写程序,在经过不断的调试,才使程序得以运行并发声。
在这个过程中,虽然我们做的不是很完善,但是总体上我们收获了好多。
通过不断地总结,不断地查找资料学习,每个人都受益匪浅。
从刚一开始的时候我们不知道如何下手,以至于遇到了许许多多的阻碍,还好我们三个人做到了明确的分工,一个人负责查找资料,一个人负责设计程序算法,另一个人主要负责程序的编写,其余两人当帮手。
在设计编写程序的过程中,我们不断的突破难题,程序出错是难以避免的,重要的是我们没有在遇到难题的时候就选择退缩,而是经过不断地讨论和修改,终于完成了一个小的综合性汇编程序。
虽然最后我们设计的这个音乐点播程序还不是很完善,但是我们却在这个过程中深深地体会到了因为自己的专业知识不足所带来的困难,使我们真正的了解到要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,因为这是写好汇编程序的关键。
“好的程序不是编出来的,而是调出来的”就足以说明调试程序的重要性。
通过这次实际动手能力的培养,我们进一步熟悉了汇编语言的结构和使用方法,基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水平。
通过这次学习,对汇编语言有了更近一步的了解,对软件的编写也有了一定的认识。
在设计程序的时候由于需要不断地查资料,无论是通过网络还是书籍,都使我们在无形中扩大了自己的知识面,不但对书中的知识有了实质性的理解,而且使我们了解到更多书本上没有的知识。
这是一次理论与实践相结合的学习,在这次学习中加强了我们的上机操作能力,也加强了我们对汇编这门课程的认识,增强了我们的学习程序设计积极性。
因为之前曾经有过C语言和数据结构课程设计的经验,所以这次对于汇编语言程序设计也有一定的认识和了解。
汇编语言也是一种计算机语言。
他们都有自己的功能和用途。
而汇编语言是一种面向机器的程序设计语言,是和计算机硬件结合最密切的语言,虽然程序设计语言的发展很快,但它是用户能够使用的最快和最能发挥硬件功能的唯一的一种计算机语言。
在汇编语言中使计算机发声的方法作为一个小的实用程序,具体的显示了汇编语言的用途。
在日后的学习中我们要不断加强汇编语言的综合应用程序设计方法,提高汇编语言实际应用能力、增加计算机各方面的知识和运用能力。
学好每一门专业课,掌握多门程序设计语言,并且能够熟练的应用计算机的更多功能。
另外,作为计算机专业的学生上机操作非常重要。
在这次课程设计中我们就一起设计程序,一起解决问题。
在设计程序的过程中我们遇到问题的时候,能够积极进行讨论,发表自己的意见,增加了我的团队意识,同时也培养了我们勇于面对困难以及解决问题的能力。
这是我们平时在课堂上所学不到的。
这也是作为当代大学生更是计算机专业的学生应该具备的能力和素质。
总之,这次程序设计大赛虽然做的不是很完美,但至少我们都学到了很多,不仅学到了很多学术方面的东西,更重要的是我们学到了团队应该具备的理念。
每个人都有自己的潜力和智慧,通过这次团队的学习,我相信每个人都有不一样的收获和感受。
不管是在以后的学习或生活中,我们都要将这种团队意识发扬光大。
7、参考文献
[1]《IBM-PC汇编语言程序设计》,沈美明温冬婵编著。
清化大学出版社,2008年3月第8次印刷。
[2]东阳生等编著:
“宏汇编语言MASM6实用大全”,科学出版社,1993
[3]《汇编语言课程设计案例精编》李珍香,刘红梅等编著。
中国水利水电出版社
[4]陆中华等编:
“汇编语言程序设计”,科学出版社,1994
[5]戴水贵,童爱红等编著:
《Windows汇编语言程序案例解析》,清华大学出版社
附:
源程序
STACKSEGMENTPARASTACK'STACK';定义堆栈段
DB64DUP('STACK...')
DB20DUP(?
)
STACKENDS
DSEGSEGMENTPARA'DATA';定义数据段
MESS1DB50DUP(''),'Nowthemusicis<
MESS2DB50DUP(''),'Nowthemusicis<
MENUDB5DUP(13,10);显示菜单
DB5DUP(''),'Welcomeyoutocomeherelistenning!
....',13,10
DB5DUP(''),'',13,10
DB5DUP(''),'',13,10
DB5DUP(''),'',13,10
DB5DUP(''),'~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~~~~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~1:
Happybirthdaytoyou;~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~2:
Maryhadalittlelamb;~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~3:
Taihuboat;~~~~~~~~',13,10
DB5DUP(''),'~~~4:
Add;~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~5:
Quit;~~~~~~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~~~~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~~~~~',13,10
DB5DUP(''),'~~~~~~~~',13,10
DB5DUP(''),'~~~~',13,10
DB5DUP(''),'',13,10
DB5DUP(''),'',13,10
DB5DUP(''),'pleasechiocethenumberofmusic:
','$',13,10
changeDB125DUP(''),'error!
pleasechangeantherNO.:
','$'
MUS_FREGdw262,262,294,262,349,330;1号歌曲的频率表
dw262,262,294,262,392,349
dw262,262,523,440,349,330,294
dw466,466,440,262,392,349
dw-1
MUS_TIMEdw25,25,50,50,50,50;1号歌曲的节拍表
dw25,25,50,50,50,50
dw25,25,50,50,50,50,50
dw25,25,50,50,50,50
mus_freg1dw330,294,262,294,3dup(330);2号歌曲的频率表
dw3dup(294),330,392,392
dw330,294,262,294,4dup(330)
dw294,294,330,294,262
dw-1
mus_time1dw6dup(30),50;2号歌曲的节拍表
dw2dup(30,30,50)
dw12dup(30),100
mus_freg2dw330,392,330,294,330,392,330,294,330;3号歌曲的频率表
dw330,392,330,294,262,294,330,292,294
dw262,262,220,196,196,220,262,294,330,262
dw-1
mus_time2dw50,50,50,25,25,50,25,25,100;3号歌曲的节拍表
dw50,50,50,50,25,25,25,25,100
dw50,50,50,25,25,25,25,25,25,25,100
DSEGENDS
DATASEGMENT;定义两数相加的数据段
INFOR1DB0AH,0DH,'PLEASEINPUTTHEFIRSTDATA(<10):
$'
INFOR2DB0AH,0DH,'PLEASEINPUTTHESECONDDATA(<10):
$'
INFOR3DB0AH,0DH,'THERESULTIS:
$'
NUM1DB10
DB?
DB10DUP(?
)
NUM2DB10
DB?
DB10DUP(?
)
DATAENDS
CODESEGMENTPARA'DATA';定义代码段
assumecs:
code,ds:
dseg,ss:
stack
musicprocfar
movax,dseg
movds,ax
rotate:
callclearscreen;清屏
LEADX,MENU;显示菜单
movah,9
int21h
chg:
;用户输入1-5
movah,1
int21h
cmpal,'1'
jeone;若为1,转移到one
cmpal,'2'
jetwo;若为2,转移到two
cmpal,'3'
jethree;若为3,转移到three
cmpal,'4'
jefour;若为4,转移到four
cmpal,'5'
jeendmus;若为5,转移到endmus
LEADX,change;若输入不在范围内,显示请重新输入序号
movah,9
int21h
jmpchg
ONE:
callclearscreen;清屏,播放1号歌曲
leadx,mess1
movah,09
int21h
LEASI,MUS_FREG
LEABP,DS:
MUS_TIME
JMPSOUND;转移到SOUND发音
TWO:
callclearscreen;清屏,播放2号歌曲
leadx,mess2
movah,09
int21h
LEASI,MUS_FREG1
LEABP,DS:
MUS_TIME1
JMPSOUND;转移到SOUND发音
THREE:
callclearscreen;清屏,播放3号歌曲
leadx,mess3
movah,09
int21h
LEASI,MUS_FREG2
LEABP,DS:
MUS_TIME2
SOUND:
;发声程序
freq:
movdi,[si]
cmpdi,-1
jerotate;返回主菜单
movbx,ds:
[bp]
callsoundf;调用发音子程序
addsi,2
addbp,2
jmpfreq
JMProtate;返回主菜单
ENDMUS:
;程序结束,返回Dos界面
movax,4c00h
int21h
musicendp
four:
callclearscreen;清屏,调用4号,实现两数相加
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETINFOR1
MOVAH,09H
INT21H
MOVDX,OFFSETNUM1
MOVAH,01H
INT21H
SUBAL,30H
MOVBL,AL
MOVDX,OFFSETINFOR2
MOVAH,09H
INT21H
MOVDX,OFFSETNUM2
MOVAH,01H
INT21H
SUBAL,30H
XORAH,AH
ADDAL,BL
AAA
PUSHAX
MOVDX,OFFSETINFOR3
MOVAH,09H
INT21H
POPAX
PUSHAX
MOVDL,AH
ADDDL,30H
MOVAH,02H
INT21H
POPAX
MOVDL,AL
ADDDL,30H
MOVAH,02H
INT21H
;jmprotate
soundfprocnear;soundf子程序
pushax
pushbx
pushcx
pushdx
pushdi
moval,0b6h
out43h,al
movdx,12h
movax,348ch
divdi
out42h,al
moval,ah
out42h,al
inal,61h
movah,al
oral,3
out61h,al
wait1:
movcx,663
callwaitf
delay:
loopdelay
decbx
jnzwait1
moval,ah
out61h,al
popdi
popdx
popcx
popbx
popax
ret
soundfendp
CLEARSCREENPROCNEAR;清屏子程序
MOVAH,6
MOVAL,0
MOVDL,79
MOVBH,7
MOVCH,0
MOVCL,0
MOVDH,24
int10h
MOVDX,0
MOVAH,2
INT10H
RET
CLEARSCREENENDP
q0procnear
movah,2
subbh,bh
movdh,0
movdl,0
int10h
ret
q0endp
waitfprocnear
pushax
waitf1:
inal,61h
andal,10h
cmpal,ah
jewaitf1
movah,al
loopwaitf1
popax
ret
waitfendp
codeends
endmusic
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 点播 程序