汇编课程设计论文(乐曲点播程序).doc

上传人:哈尼dd 文档编号:3950208 上传时间:2019-10-11 格式:DOC 页数:19 大小:773.35KB
返回 下载 相关 举报
汇编课程设计论文(乐曲点播程序).doc_第1页
第1页 / 共19页
汇编课程设计论文(乐曲点播程序).doc_第2页
第2页 / 共19页
汇编课程设计论文(乐曲点播程序).doc_第3页
第3页 / 共19页
汇编课程设计论文(乐曲点播程序).doc_第4页
第4页 / 共19页
汇编课程设计论文(乐曲点播程序).doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《汇编课程设计论文(乐曲点播程序).doc》由会员分享,可在线阅读,更多相关《汇编课程设计论文(乐曲点播程序).doc(19页珍藏版)》请在三一文库上搜索。

1、计算机与信息工程学院汇编语言课程设计乐曲点播程序的设计专 业:计算机科学与技术班 级:控制11-2班 姓 名:曾一凡学 号:20指导教师:郝维来2013年6月28日设计题目:乐曲点播程序的设计设计目的:通过具体的问题分析、设计、调试、运行程序,在实际问题中锻炼提高自己,增加对汇编语言课程内容的理解,锻炼动手能力。设计目标:设计一个关于特定乐曲点播的程序。其由显示程序,歌曲选择,歌曲播放,返回等几部分组成。当程序运行时按下数字键“1”-“4”分别演奏乐曲1、Little bee;2、Little Starlet;3、Christmas ring;4、Mary had a little lamb,

2、当按下数字键“0”时则退出程序。任务下达时间:2013-6-17任务完成时间:2013-6-28指导教师评语: 年 月 日设计成绩:摘 要本论文主要叙述了一段乐曲点播程序的设计过程,本次设计的主要目的是通过具体的问题分析、设计、调试、运行程序,在实际问题中锻炼提高自己,增加对汇编语言课程内容的理解,锻炼动手能力。就本程序具体而言:知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表;然后编写程序依次取出表中的频率值和时间值,调用Do_Music程序发出各种声音。执行此程序后,选择所要播放的乐曲,程序会快速且有效的通过程序界面所提示的信息选取所要欣赏的乐曲

3、并播放。 关键词:汇编语言,乐曲点播,频率,时间IAbstractThis paper mainly describes the design process of a music demanding program,the main purpose of this design is to analysis of specific issues,through the design,debugging,operation procedure,in practice training to improve myself,to increase the assembly language cou

4、rse content understanding,exercise ability of diy.The program specifically:have known the relationship between pitch and frequency and time,we can be in accordance with the music score will define the frequency and duration of each note into two data tables;and then write the program to turn out the

5、 frequency and time value in the table ,call the Do_Music program to send out sound.When you execute of the program,choose the music which you want play,the program will through the programs interface suggests information,fast and effectively select the music you want to enjoy and play.Keywords:Asse

6、mbly language,Music demanding,Frequency,Time目 录1.背景分析及意义12.总体设计思想13.完成的主要功能44.软硬件环境要求55.程序流程图66.使用说明7设计总结7参考文献8程序清单81.背景分析及意义随着计算机科学技术的不断更新发展,计算机在各个方面的应用已经变得十分广泛,虽然现在其他的编程语言比如C语言,JAVA语言已经部分替代了汇编语言的使用,但作为与计算机进行对话的一门基础语言,仍有相当一部分的软件开发人员与技术人员在程序设计的过程中使用汇编语言。汇编语言作为计算机控制专业方向学习的必修之课,每个作为本专业的学生,对汇编语言的理解与掌握就

7、显得尤为重要。汇编语言虽然现在已经比不上C语言的广泛使用,但在实际应用中还是各有各的好处,同时汇编语言是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。因次,对程序的空间和时间有一定特殊要求的话,汇编语言的应用就显的必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。本次课程设计是在学习汇编语言之后与实践相结合的一次综合应用。通过具体的问题分析、设计、调试、运行程序。在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。就这个程序具体而言:知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表,然后编写程序依次取出表中的

8、频率值和时间值,调用Do_Music程序发出各种声音。执行此程序后,选择所要播放的乐曲,程序会快速且有效的通过程序界面所提示的信息选取所要欣赏的乐曲并播放。2.总体设计思想 通用发声程序计算机有两种产生声音的方法,一种方法是通过I/O指令向设备寄存器(端口地址为61H)的第1位交替送1和0,使与第1位相连的扬声器脉冲门产生连续的脉冲电流,驱动扬声器发出声音。另一种方法是利用8254(系统定时器)中的2号定时器向扬声器发送不同频率的脉冲,使之产生音调高低不同的声音,这种产生声音的方法可使计算机演奏出各种乐曲。本次课程设计所采用的便是第二种方法。ROM BIOS 中有个BEEP子程序,它能根据BL

9、中给出的时间计数值控制8254定时器使之产生持续时间为1个或几个0.5秒、频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。为此我们需要做两点修改,首先,BEEP程序只能产生896HZ的声音,我们的通用发声程序应能产生任一频率的声音。其次,BEEP产生声音的持续时间(音长)只能是0.5秒的倍数,我们希望声音的持续时间更易于调整,例如可以是10ms的倍数。我们知道BEEP能将计数值533H送给定时器2产生896HZ的声音的,那么产生其它频率声音的时间计数值应为:533H896给定频率=123280H给定频率发声程序包括3个步骤: (1)在8253中的42端口送一个控制字

10、0B6H(10110110B),该控制字对定时器2进行初始化,使定时器2准备接收计数初值。 (2)在8253中的42H端口(Timer2)装入一个16位的计数值(533H896/频率),以建立将要产生的声音频率。 (3)把输出端口61H的PB0、PB1两位置1,发出声音。 对于发音部分。PC机上的大多数输入/输出(I/O)都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI包括3个8位寄存器,两个用于输入功能,一个用于输出功能。输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。由PPI输出寄存器中的0、1两位来选择扬声器的驱动方式

11、。连接到扬声器上的是定时器2,通过查阅相关资料可以知道,GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3(方波)下工作。定时器2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器电路。因此,只有PB0和PB1同时为“1”时,才能驱动扬声器地声。通过以下指令实现: IN AL,61H OR AL,3 OUT 61H,AL 上面的指令用以打开扬声器,如要关闭扬声器时则为: AND AL,0FCH OUT 61H,AL 当从8255中采集到输入的数据时,需要确定相应的频率,所以在软件编程时

12、要建立一个数据表: TABLE DW 493,440,392,349,329,293,261 把相应的频率送到一个寄存器上,通过公式: 计数值=533H896f=12348CHf 算出计数值,再把算得的计数值送给8253,就可产生所要频率的方波。在把计数值送8253前,必须先把8253进行初始化: MOV AL,0B6H OUT 43H,AL 使其选用通道2,工作在方式3下。 就整个电路而言,接好电路后,通过软件编程不断地采集从8255口中输入的信号,而8个开关都接在8255的A口上,只要有开关按下,就会采集到一个数据,根据这个数据与事先编好的表对应,得到一个计数值,把这个计数值送给8253的

13、通道2,8253的通道2工作的方式3下,这样就可以产生满足频率要求的发声方波。这个方波经驱动放大就可以使扬声器发出相应的声音。 所以8255在这里完成两个任务,它不仅从A口中采集到数据,而且B口的PB1和PB0两个位要控制发声。8253的主要任务就是产生所要求发声的不同频率的方波。乐曲的频率与节拍乐曲是按照一定的高低、长短、强弱组成的音调。 在一首乐曲中, 每个音符的音高和音长与频率和节拍有关。 每个音符的频率值和持续时间是乐曲程序发声需要的两个必要数据。 高音阶从中C(263)到高C(523), 各个音阶对应的频率如下所示: DW 262 - MC DW 294 - MD DW 330 -

14、ME DW 349 - MF DW 392 - MG DW 440 - HA DW 494 - HB DW 523 - HC如果知道了乐曲的曲谱, 就可以将每个音符的频率和持续时间定义为两个数据表, 然后通过调用子程序将表中数据取出, 通过扬声器发声。例如Little bee频率表和节拍表如下所示: bee_freq dw mg,me,me,mf,md,md,mc,md,me,mfdw 4 dup(mg),me,me,mf,md,md dw mc,me,mg,mg,3 dup(me),5 dup(md),me,mfdw 5 dup(me),mf,mg dw mg,me,me,mf,md,md,

15、mc,me,mg,mg,mc dw 0 bee_time dw 2 dup(25*400,25*400,50*400),4 dup(25*400)dw 3 dup(25*400,25*400,50*400) dw 3 dup(6 dup(25*400),50*400) dw 2 dup(25*400,25*400,50*400),4 dup(25*400),100*400其中,bee_freq为频率表,bee_time为节拍表, 两个表中的数据一一对应, 每一组代表着乐曲中的一个音符。 3.完成的主要功能 此程序能实现特定乐曲的选择与播放。程序运行时按下数字键“1”-“4”分别演奏乐曲1、Li

16、ttle bee;2、Little Starlet;3、Christmas ring;4、Mary had a little lamb。当按下数字键“0”时则退出程序。图1 乐曲点播程序运行图4.软硬件环境要求软件环境:汇编软件Masm615,要求包括4个基本程序:EDIT.COM、MASM.EXE、LINK.EXE、DEBUG.EXE.硬件环境:装有DOS系统或32位windows XP、windows 7、windows 8操作系统的计算机开始5.程序流程图乐曲点播程序流程图如图2所示:显示菜单等待键盘输入Y输入1?播放:Little beeNY输入2?播放:Little StarletN

17、Y输入3?播放:Christmas ringNY输入4?播放:Mary had a little lambNN输入0?输入错误,请重新输入Y图2 乐曲点播程序流程图结束6.使用说明此程序是一个关于乐曲点播的程序。本程序由显示程序,歌曲选择,歌曲播放,返回等几部分组成。编写asm文件时在文中定义了所要演奏的4首歌曲的频率表与时间节拍表,这是能够正确播放一首完整乐曲的必要数据。接下来向计数器写入控制字并且接通扬声器,设置次数循环将节拍转入程序,调用发声程序发声。此程序通过按键1,2,3,4即可实现1:Little bee;2:Little Starlet;3:Christmas ring;4:Ma

18、ry had a little lamb的播放,选择曲目后开始播放。需要注意的是在乐曲播放的过程中其他按键暂时无效,需等当前曲目播放完毕之后才能进行下一次操作; 按键0选择退出选项退出程序。设计总结在为期两周的汇编语言课程设计中,我从许多题目当中选择了乐曲发声程序,在选题到程序实现所期望的功能的过程中,我对汇编语言这门课程有了进一步的认识与了解。编写程序的时候并不是一帆风顺的,我也遇到了一定的困难,程序出现了一定量的错误难以汇编及连接,后来经过自己查阅了汇编错误说明资料与老师的指导,最终完成了一个小型的乐曲点播程序。通过本次课程设计,我深深的感受到了因自己专业知识的不足给自己带来的困难,从而进

19、一步的熟悉了汇编语言的结构和使用方法,现在已经基本能独立阅读、编制和调试规模较小的汇编语言程序。这是一次理论与实践相结合的学习,通过这次学习,使我对汇编语言及其编写工作有了更深一步的认识,加强了我的上机操作能力,增强了我的学习积极性。汇编语言和C语言同样是关于计算机编程的基础语言,它们各有各自的优点与不足。汇编语言是一种面向机器的程序设计语言,是和计算机硬件结合最密切的语言,虽然现在程序设计语言的发展速度很快,但汇编语言是用户能够使用的最快和最能发挥硬件功能的唯一的一种计算机语言。在日后的学习中我要加强汇编语言综合应用程序设计方法的学习,提高汇编语言实际应用能力、增加计算机各方面的知识和运用能

20、力。学好其他专业课知识,争取能够熟悉并掌握应用计算机的更多功能。总之,本次课程设计作为自我学习的一个良好开端,指导了我以后整个的学习方向与态度。我会把这次课程设计作为一个新的起点,再接再厉学习更多的专业知识,为以后的工作作好扎实的基础。参考文献1沈美明,温冬婵.IBMPC汇编语言程序设计(第2版). 北京:清华大学出版社,2001年.2李珍香,刘红梅,赵润林.汇编语言课程设计案例精编.北京:中国水利水电出版社,2004年4月. 程序清单 CR equ 000DH LF equ 000AHmc equ 262md equ 294me equ 330mf equ 349mg equ 392ha e

21、qu 440hb equ 494hc equ 523 ; ; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr字符串地址(要求在数据段); 用法: Output Str_AddrCode Segment Assume CS:Code,DS:Code Output MACRO Str_Addr push ax lea dx,Str_Addr mov ah,9 int 21hpop ax EndM; ; 入口参数; SI=声音频率地址; bx=时间节拍地址 Do_Music Proc Near push dx push cx push ax Sound: test wo

22、rd ptr si,0ffffh jz Return mov al,0b6h ;8253初始化 out 43h,al mov dx,12h mov ax,533h*896 div word ptr si out 42h,al mov al,ah out 42h,al in al,61h ;驱动扬声器发声 mov ah,al or al,3 out 61h,al mov cx,bx Waitf1: push cx mov cx,28010 delay1: loop delay1 pop cx loop Waitf1 inc si inc si inc bx inc bx mov al,ah ou

23、t 61h,al jmp Sound Return: pop ax pop cx pop dx ret Do_Music EndP; ; 音乐菜单Music_Str db 10 dup( ),LF,CR db 5 dup( ),THIS A PROGRAM THAT YOU CAN CHOOSE A SONG ON THE LIST:,LF,CR db 10 dup( ),LF,CR db 10 dup( ),1. Little bee,LF,CR ;小蜜蜂 db 10 dup( ),2. Little Starlet,LF,CR ;小星星 db 10 dup( ),3. Christmas

24、ring,LF,CR ;圣诞铃声 db 10 dup( ),4. Mary had a little lamb,LF,CR ;玛丽有只小羊羔 db 10 dup( ),0. Exit,LF,CR ;退出程序 db 10 dup( ),LF,CR db 30 dup( ),Designer:ZengYifan,LF,CR db 30 dup( ),Class :Computer control 11-2,LF,CR db 30 dup( ),No :20,LF,CR db 5 dup( ),Please choose the number of music which you want to p

25、lay:$;提示选择乐曲 Prompt_Str db LF,CR ;音乐播放前的提示信息 db LF,CR, Now the machine is playing the music which you chose,Please enjoy db LF,CR, 0eh,.$; 以下为对应各乐曲的频率表和节拍时间表 merry_freq dw me,md,mc,md,3 dup(me),3 dup(md),me,mg,mg dw me,md,mc,md,4 dup(me),md,md,me,md,mc dw 0 merry_time dw 6 dup(25*400),50*400 dw 2 du

26、p(25*400,25*400,50*400),12 dup(25*400),100*400 christ_freq dw 7 dup(me),mg,mc,md,me,4 dup(mf) dw 2 dup(me),me,md,md,mc,md,mg dw 7 dup(me),mg,mc,md,me,4 dup(mf)dw 2 dup(me),mg,mg,mf,md,mcdw 0 christ_time dw 2 dup(25*400,25*400,50*400)dw 4 dup(25*400),100*400,2 dup(25*400,25*400,50*400) dw 4 dup(25*40

27、0),2 dup(50*400)dw 2 dup(25*400,25*400,50*400) dw 4 dup(25*400),100*400,dw 2 dup(25*400,25*400,50*400),4 dup(25*400),100*400 star_freq dw mc,mc,mg,mg,ha,ha,mg,mf,mf,me,me,md,md,mc dw 2 dup(mg,mg,mf,mf,me,me,md) dw mc,mc,mg,mg,ha,ha,mg,mf,mf,me,me,md,md,mc dw 0 star_time dw 3 dup(6 dup(25*400),50*400

28、,6 dup(25*400),50*400) bee_freq dw mg,me,me,mf,md,md,mc,md,me,mfdw 4 dup(mg),me,me,mf,md,md dw mc,me,mg,mg,3 dup(me),5 dup(md),me,mfdw 5 dup(me),mf,mg dw mg,me,me,mf,md,md,mc,me,mg,mg,mc dw 0 bee_time dw 2 dup(25*400,25*400,50*400),4 dup(25*400)dw 3 dup(25*400,25*400,50*400) dw 3 dup(6 dup(25*400),5

29、0*400) dw 2 dup(25*400,25*400,50*400),4 dup(25*400),100*400; 乐曲频率和节拍时间地址表 Music_Table dw bee_freq,bee_time,star_freq,star_time,christ_freq,christ_time,merry_freq,merry_time Cursor_Tmp dw ? ;音乐菜单光标位置 Start: push cs pop ds push cs pop es Output Music_Str ;显示音乐菜单 xor bx,bx mov ah,3 ;取光标位置 int 10h mov C

30、ursor_Tmp,dx ;保存音乐菜单光标位置 Choise_Item:mov dx,Cursor_Tmp ;取音乐菜单光标位置 xor bx,bx mov ah,2 ;设置光标位置 int 10h Read_Chr: mov ah,1 int 21h cmp al,0 jb Read_Chr cmp al,4 ja Read_Chr and al,0fh test al,0ffh jz Exit_Proc dec al cbw shl ax,1 shl ax,1 mov di,ax Output Prompt_Str ;显示音乐播放前的提示信息 mov si,Music_Tabledi ;对应的频率值地址 mov bx,Music_Tabledi2 ;对应的节拍值地址 call Do_Music ;激活扬声器,使之发出指定频率、指定时长的声音,奏乐 xor bx,bx mov ah,8 int 10h mov bh,ah ;字符属性 mov cx,Cursor_Tmp inc ch xor cl,cl mov dh,ch add dh,6 mov dl,79 mov ax,606h ;显示内容上滚 int 10h jmp Choise_Item Exit_Proc: mov ah,4ch ;结束程序 int 21hCode ENDS END Start13

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1