汇编大赛终极版.docx
- 文档编号:2100352
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:18
- 大小:173.28KB
汇编大赛终极版.docx
《汇编大赛终极版.docx》由会员分享,可在线阅读,更多相关《汇编大赛终极版.docx(18页珍藏版)》请在冰点文库上搜索。
汇编大赛终极版
西安邮电大学
汇编语言程序设计竞赛报告
专业班级
科技1201班,科技1203班
学生姓名
左阳巨振奇孙育苹
学号
时间
2014年10月31号-2014年11月25号
一、设计题目
乐曲随时间的播放
二、设计内容
我们参加了汇编语言大赛,在具体的日期和时间里,设计了3首乐曲,随着乐曲的进行,计时了每一首演奏的时间。
乐曲1:
<<歌声与微笑>,2:
<<天空之城>>,3:
<<草原上升起不落的太阳>>。
三、需求分析
利用DOS功能的硬中断,以实现日期,时间,乐曲播放,计时曲长等功能的调用。
最终将运行结果显示在屏幕上。
按1、2、3依次播放乐曲,按Q退出。
当暂停任意一首乐曲时,按Enter;按其它键返回主界面。
在运行这些程序时,日期和时间与系统保持一致。
若输入大写字母Q,则退出当前状态。
输入其他则显示错误。
如右图所示:
运行环境:
DOSBOX.
四、概要设计
1、模块功能说明
(1)利用DOS的AH和2CH号系统功能调用,将计算机系统的时参(BCD码送入寄存器。
其中CH和CL中保存的是小时数和分钟数DH中是秒钟数,CX中保存的是年DL中保存DE的是H,将BCD码表示的时,分,秒,H,年转换成ASCIl码并送入字符串并显示在屏幕上。
此程序完成显示系统的当前日期和时间的功能。
(2)计算机中有一个可编程时间间隔定时器8253/54,它能根据程序提供的计数值和工作模式,产生各种计数/定时脉冲,提供给系统的各个部分使用。
先要设定控制字,以选择计数器,确定工作模式和计数的值。
要实现乐曲的演奏,可通过调用发生程序来达到输出音乐的效果。
在程序中,可以设定两个变量分别用来存储音符的频率值和持续的时间,得到两者的关系后,定义数据表,然后编写程序依次取出其值,调用程序依次发声。
(3)音乐计时器
利用1CH中断,每秒中断约18次,从而进行计时。
2、总方案设计
Q其它键
1/2/3
五、详细设计及运行结果
1.主程序流程图:
音乐播放程序:
N
Y
N
Y
N
Y
2.Music子程序流程图:
1、根据音节表和简谱为演奏的乐曲定义一个频率表MUF和一个时间表MUD。
2、分别将两个表的偏移地址放入SI和BP
3、从表中取出音符的频率放入DI,取出音符的持续时间(实际上是10ms的倍数)放入寄存器。
频率表中最后一个数据-1作为乐曲的结束符。
4、调用通用发声子程序SOUNDF发出音符。
该算法的整体思路是在这个设计中用到了BEEP通用发声程序,我们利用对BEEP程序的修改让它产生任何一种频率的声音,也可以让声音的持续时间更容易被调整在编译的过程中,用到了子程序调用,分别根据输入调用music1,music2,music3程序还要调用子程序sound发出音调,主要特点是程序简单明了,有良好的交互界面。
程序的主要功能是给用户提供三首已经写好的短曲,根据用户的选择演奏乐曲,演奏完一首乐曲后跳回起始状态,如此循环,直到用户输入结束的信息为止。
本程序设计过程的整体设计思路是通过定义数据段,堆栈段和代码段实现程序的各种要求。
其中堆栈段是为乐曲的音调及频率的数据分配空间;数据段是记录程序运行过程中所需的信息,包括字符信息,单调数据,音频数据;代码段则是程序算法部分,通过对各数据的调用,实现音乐演奏功能。
5.此子程序的主要功能:
给用户提供三首已经写好的短曲,根据用户的选
择演奏乐曲,演奏完一首乐曲后按任意键跳回主界面,如此循环,直到用户输入结束的信息为止。
6、本程序通过Intel汇编语言来实现一个简单的音乐。
程序中提供一个音乐菜单,用键盘数字键选择相应的音乐后,便开始播放原先编制好的音乐。
演奏音乐程序:
编写用键盘选择计算机演奏乐曲的程序,要求程序运行首先在屏幕上显示出乐曲菜单.如:
1.歌声与笑脸
2.天空之城
3.草原上升起不落的太阳
键盘输入各音乐对应的数字,便可播放音乐。
按Enter,则退出。
输入除1到3以外的数字,提示输入出错,提示再次输入。
播放完音乐,再次提供乐曲清单。
可再次选择乐曲。
程序设计主要代码:
;数据段
DATASEGMENT
FACE0DB0AH,0DH,28DUP(''),"MUSICPLAYER"
DB0AH,0DH
DB0AH,0DH,28DUP(''),"1:
Songangsmile."
DB0AH,0DH,28DUP(''),"2:
Thecastleinthesky."
DB0AH,0DH,28DUP(''),"3:
Therasingsunongrassland."
DB0AH,0DH
DB0AH,0DH,28DUP(''),"Q:
EXIT_$"
FACE10DB0AH,0DH,28DUP(''),"SONGANDSMILE$"
FACE20DB0AH,0DH,24DUP(''),"THECASTLEINTHESKY$"
FACE30DB0AH,0DH,22DUP(''),"THERAISINGSUNONGRASSLAND$"
ETIPDB0AH,0DH,25DUP(''),"ERROR.Pleasetryagain!
$
MUF_11DW294,294,349,392,440,523,588,294,349,392,440,392,392
DW392,440,523,523,523,588,440
DW294,294,349,349,440,523,588,294,349,392,440
DW392,392,392,440,523,523,262,294,294,349,349,440,523,588
DW660,698,698,698,698,588,660,698,698,698,698,698,588,660
DW698,784,784,784,784,698,784,660,523,588,523,588,660,588
DW660,698,698,698,698,588,330,698,698,698,698,698,588,660
DW698,784,784,784,698,660,523,660,588,-1
MUD_12DW19,19,38,38,13,13,13,13,100,19,19,19,19,19,19,19,19,150
DW19,19,19,19,38,38,13,13,13,13,100,15,15,15,15,30,30,30
DW38,38,13,13,13,13,13,13,19,19,19,19,19,19,38,19,19,19
DW19,19,19,38,25,25,25,25,25,25,38,38,13,13,13,13,13,13
DW19,19,19,19,19,19,38,19,19,19,19,19,19,38,19,19,19,19
DW38,19,19,150
MUF_21DW440,494,523,494,523,660,494,440,392,330,349,392440,392,
DW440,523,392,330,262,262,262,294,330,349,330,349,523,330
DW294,330,523,523,588,494,349,349,494,
DW494,100,440,494,523,494,523,660,494,440,392
DW330,349,392,440,392,440,523,392,330,262,262,294,330
DW698,262,494,494,523,588,588,660,262,100,523,494
DW440,440,494,392,440,100,523,588,660,588,660,780
DW588,100,392,392,523,494,523,660,660,100,100,880,494,523,494
DW523,588,523,392,392,100,698,660,588,523,494,523,588,494
DW392,784,688,660,660,880,784,784,660,588,528,100,523
DW588,523,588,588,784,660,100,660,880,784,784,660
DW588,523,100,523,588,523,588,588,494,440,100,880,494,-1MUD_22DW50,50,25,25,25,25,17,17,17,17,17,17,25,25,25,25
DW33,33,33,33,33,33,50,50,50,50,33,33,33,33,33,33
DW25,25,25,25,33,33,17,17,25,25,25,25,17,17,17
DW33,33,33,50,50,50,50,33,33,33,33,33,33
DW33,17,17,17,17,17,11,11,11,33,33,20,20
DW10,10,20,20,33,33,16,17,25,25,25,25
DW33,33,16,17,25,25,25,25,33,33,33,13,13,25,25
DW12,12,25,25,25,25,25,25,25,25,13,12,12,12
DW25,12,12,50,50,33,33,33,12,12,33,12,13
DW25,12,12,25,25,33,33,33,33,33,33
DW12,12,33,12,12,25,12,12,25,25,33,33,12,12
MUF_31DW3DUP(220),294,330,330,294,262,220,294,262,294,330,392
DW330,440,330,262,294,330,440,330,294,262,165,196,220
DW196,220,294,330,262,220,-1
MUD_32DW25,13,12,38,12,25,13,12,50,25,13,12,25,13,12,100,25,13
DW12,38,12,25,13,12,25,25,25,13,12,25,13,12
DW100
MFLAGDB'0';音乐的播放标志
ADDRSEDW0,0;音乐的频率和延时的地址
DATAENDS
发生程序:
SOUNDPLAYPROCFAR
PUSHAX;现场保护
PUSHBX
PUSHCX
PUSHDX
PUSHDI;
MOVAL,0B6H;发伴奏声模块
OUT43H,AL
MOVDX,12H
MOVAX,533H*896
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,3
OUT61H,AL
WAIT1:
MOVCX,8FF0H;延时10ms
DELAY1:
LOOPDELAY1
DECBX
JNZWAIT1
MOVAL,AH
OUT61H,AL
POPDI;恢复现场
POPDX
POPCX
POPBX
POPAX;
RET
SOUNDPLAYENDP
3.硬中断:
1CH
1CH硬中断程序:
日期,时间和音乐计时。
1、主程序流程图:
N
Y
2、当用户输入字符后系统对用户输入的字符进行判断,利用分支程序分别调用两个子程序。
两个子程序的功能分别是显示日期(用2AH功能调用来取日期),显示当前时间(用2CH的DOS功能调用来取时间)。
必须用到的DOS功能调用:
取当前系统日期:
功能号为2AH,返回值送入CX,DX寄存器中。
取当前系统时间:
功能号为2CH,返回值送入CX,DX寄存器中。
3、程序设计主要代码
MOVAH,2AH;取当前系统日期
INT21H
MOVAX,CX;将本地日期存入日期字符串
MOVBX,10
LEASI,DATE+3;si指向年份的最后一位
MOVCX,4
PUSHDX;堆栈保存月日
YEAR:
XORDX,DX
DIVBX;(dx,ax)/bx;,商送ax,余数送dx
ADDDL,30H
MOV[SI],DL
DECSI
LOOPYEAR
LEASI,DATE
ADDSI,9
MOVCX,2
POPAX
PUSHAX
MOVAH,0
DAY:
XORDX,DX
DIVBX
ADDDL,30H
MOV[SI],DL
DECSI
LOOPDAY
LEASI,DATE
ADDSI,6
MOVCX,2
POPAX
MOVAL,AH
MOVAH,0
MONTH:
XORDX,DX
DIVBX
ADDDL,30H
MOV[SI],DL
DECSI
LOOPMONTH;
MOVAH,2CH;取当前本地时间
INT21H
MOVDX,CX
MOVDH,0;minute
PUSHDX
MOVCL,CH
MOVCH,0;hour
PUSHCX
MOVBX,10;将本地时间存入时间字符串
LEASI,TIME
ADDSI,1
MOVCX,2
POPAX
HOUR:
XORDX,DX
DIVBX;(dx,ax)/bx;,商送ax,余数送dx
ADDDL,30H
MOV[SI],DL
DECSI
LOOPHOUR
LEASI,TIME
ADDSI,4
MOVCX,2
POPAX
MINUTE:
XORDX,DX
DIVBX
ADDDL,30H
MOV[SI],DL
DECSI
LOOPMINUTE
MOVBH,0;
MOVDX,1746H;显示日期和时间
MOVAH,2
INT10H
MOVDX,OFFSETDATE
MOVAH,09H
INT21H
MOVBH,0
MOVDX,1648H
MOVAH,2
INT10H
MOVDX,OFFSETTIME
MOVAH,09H
INT21H
程序调试结果图:
主界面:
音乐播放:
键错提示:
六、调试情况,设计技巧及体会
1,本次的汇编语言多任务程序设计过程历时26天,较为不易。
程序总体上分为三大部分,音乐伴奏程序,音乐播放计时程序,本地日期和时间显示。
音乐是利用音乐简谱及相关简谱知识写出其对应的音乐频率和延时,然后利用系统端口发声。
音乐伴奏总体上较为清晰,但是,由于系统端口无法发出空闲音(暂时不发声),改为小频率发声,音调略有失真。
本地时间和日期存入字符串后显示,比较完美。
音乐计时利用1CH硬中断,中断一次约10ms,一秒中断约55次,但实际运行时1秒约中断20次。
总之,我们对本次的程序运行结果比较满意。
但由于时间有限,也有不足之处可以改进。
例如音乐播放时只能停止,无法暂停,无法直接进行上一曲,下一曲的切换。
这可通过在数据段定义一个正在播放的音乐的序号标志,在音乐播放过程中对按键检测,根据按键对音乐的序号标志进行相应的加1或减1等操作,音乐播放程序根据音乐序号标志播放音乐。
而且,让音乐播放时显示相对应歌曲的简谱或英文歌词等功能。
2,在这次课程设计中,我和我的组员利用dos中断和bios中断相关的端口实现显示系统日期和时间,音乐播放和计时等功能。
在本次课程设计中我和组员共同完成了程序的编写,以及实验的调试。
在整个程序的编写中,调试占了很大部分的时间。
要想写好汇编语言的程序,必须认真对待代码的每一个细节,还必须熟练的掌握debug命令,这对程序的调试是非常重要的。
通过程序设计中的编程和对编程过程中遇到的问题的思考,有效的提高了我们对汇编的认识和理解。
通过这次课程设计我们学到了汇编语言的知识,掌握了它的部分设计思想,也了解了自己的不足之处。
同时,加深了我与组员之间的那种团结协作的精神,收获很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 大赛 终极