版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书学生姓名: 专业班级: 指导教师: 工作单位: 题目: 乐曲程序的设计与实现初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握程序直接控制I/O方式,掌握计算机发声程序的设计。具体的设计任务及要求:1采用位触发方式编写程序,使计算机发出音响并奏出两只老虎的乐曲。1) 通过查阅相关资料,进一步理解程序直
2、接控制I/O方式和位触发方式控制声音的工作原理。2) 一首乐曲是由不同频率和节拍的音调组成,因此控制脉冲的频率和持续时间是编写乐曲程序的关键。根据已知的音符频率对照表,给出乐曲的频率表;设二分音符持续时间为0.5秒(50*10ms),50作为2拍的计数值,给出乐曲的节拍时间表;3) 编写程序并调试通过。2进一步学习利用定时器产生声音的方法,使计算机奏出乐曲(例如两只老虎等)。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC汇编语言程序设计实验教程3.1节2)IBMPC汇编语言程序设计(第2版)10.4节,10.5节时间安排:设计
3、安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目 录一.课程设计任务书2二.正文41设计内容及要求42设计中使用的关键技术和方法53设计方案说明10 3.1模块层次图和各模块说明11 3.2详细的算法描述11 3.3主要数据结构的定义和说明12 3.4程序界面的描述144测试及评估155设计心得186致谢197参考文献198附录(源代码)20三.评分表27乐曲程序的设计与实现1 设计内容及要求1. 进一步理解和掌握程序直接控制I/O方式,掌握计算机发声程序的设计。具体的设计任务
4、及要求: 1.采用位触发方式编写程序,使计算机发出音响并奏出两只老虎的乐曲。1)通过查阅相关资料,进一步理解程序直接控制I/O方式和位触发方式控制声音的工作原理。2)一首乐曲是由不同频率和节拍的音调组成,因此控制脉冲的频率和持续时间是编写乐曲程序的关键。根据已知的音符频率对照表,给出乐曲的频率表;设二分音符持续时间为0.5秒(50*10ms),50作为2拍的计数值,给出乐曲的节拍时间表。3)编写程序并调试通过。 2 进一步学习利用定时器产生声音的方法,使计算机奏出乐曲(例如两只老虎等)。 3. 进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,为学习后继的基
5、础课和专业课打下坚实的基础。通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。4. 在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。5. 通过这次课程设计来巩固所学过的知识,能用汇编语言熟练地运用三大结构,进一步掌握各个指令的功能,特别是转向指令,能掌握子程序的定义及调用,包括段间及段内调用,以及正确地运用DEBUG指令。6.通过课程设计的编程和对编程过程中遇到的问题的思考,能有效的提高我对汇编的认识和理解,能切实的提高我们的编程能力,补全我们的不足。更进一步的了解汇编程序设计,掌握学习
6、和探索的方法,提高自己的能力。2 设计中使用的关键技术和方法 ROM BIOS 中有个BEEP子程序,这能根据BL中组出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。为此我们需要做两点修改,首先,BEEP程序只能产生896HZ的声音,我们的通用发声程序应能产生任一频率的声音。其次,BEEP产生声音的持续时间(音长)只能是0.5秒的倍数,我们希望声音的持续时间更易于调整,例如可以是10ms的倍数。我们知道BEEP能将计数值533H送给定时器2产生896HZ的声音的,那么产生其它频率声音的时间计数值应为
7、:533H896给定频率=H给定频率假定发声的频率存放在DI寄存器中,下面的指令在AX中得到送往定时器2的计数值。在这个设计中用到了BEEP通用发声程序,我们利用对BEEP程序的修改让它产生任何一种频率的声音,也可以让声音的持续时间更容易被调整 在编译的过程中,用到了子程序调用,先编译出主程序main,然后分别根据输入调用music程序还要调用子程序gensound发出音调。2.1位触发方式 程序直接控制PPI(8255A可编程序外围接口芯片)的输出控制器(I/O端口为61H)的第一位,使该位按所需的频率进行1和0的交替变化,从而控制开关电路产生一串脉冲波形,这些脉冲波形经放大后驱动扬声器发出
8、声音。如果控制波形的脉宽和长度就可以产生不同频率和不同音长的声音。扬声器发声通用子程序:通用发声程序CFSOUND。cfsound proc near push dx ;保存将要用到的寄存器 push ax in al,61h mov ah,al and al,b ;关断定时器通道2的门控sound: xor al,2 ;触发61h端口第1位 out 61h,al mov ax,2801 mov bx,50 mul bx div cx ;(cx)=freq mov dx,ax mov cx,dx ;(dx)=控制脉宽的记数值wait: loop wait ;延时循环 mov ax,8 mul
9、bx mov bx,ax ;(bx)=扩大8倍的节拍计数值 dec bx ;(bx)=脉冲持续的时间 jnz sound pop ax ;恢复寄存器 pop dx mov al,ah ;写回61H口原值,关闭扬声 out 61h,al ret ;子程序结束返回cfsound endp 2.2利用定时器产生声音利用机器硬件即INTEL 8253/8254定时器产生声音的一种方法。 CPU通过对定时器的通道2(端口地址为42H)进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低位控制通道2门控的开断,以产生特殊的音响。当定时器接收的计数值为533H时,能产生896Hz的
10、声音,因此产生其它频率(Freq)的计数值就可由下式计算出来:533H*896/Freq =1234DCH / Freq在送出频率计数值之前,还要给方式寄存器(端口地址为43H)送一个方式值,也称为幻数。这个幻数由8为组成即D7,D6,D5,D4,D3,D2,D1,D0。D0-选择计数值的格式,1为BCD码格式,0为二进制格式。D3,D2,D1-选择操作模式,它决定了输出脉冲的形状。D5,D4读写指示位。D7,D6选择计数器,确定控制字是对哪一个计数器进行初始化。利用定时器产生指定频率声音的程序段 Mov al, b ;为组合格式:通道2,两字节技术,模式3,二进制码 Out 43h, al
11、;幻数送方式寄存器 Mov dx, 12h Mov ax, 34Dch Div di ;(di)=Freq Out 42h, al ;频率计数值送通道2 Mov al, ah Out 42h, al 控制音长的时间可以简单的通过反复执行循环指令来得到。我们已经执行2810次LOOP指令约需要10ms时间,因此使用10ms的倍数值来控制扬声器气开关的时间间隔,就可以控制音长。具体实现的指令序列如下: in al, 61h mov ah, al or al, 3 out 61h, al ;接通扬声器 leng: mov cx, 2801 ;10ms音长的计数器 delay: loop delay
12、dec bx ;(bx)=10ms的倍数值 jnz leng mov al,ah out 61h,al ;关闭扬声器2.3扬声器驱动方式 PC机上的大多数I/O都是由主办上的8255可编程序外围接口芯片PPI管理的。PPI包括三个8位寄存器,两个用于输入功能,1个用于输出功能。输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。由PPI输出寄存器中的0和1两位来控制扬声器的驱动方式。 连接到扬声器上的是定时器2.GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3下工作。定时器2的OUT2与端口61H的PB1通过一个与
13、门与扬声器的驱动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器电路。控制扬声器的代码: IN AL,16H MOV AH,AL OR AL,B OUT 61H,AL . MOV AL,AH OUT 61H,AL2.4 主要的发声器件(可编程时间间隔定时器8252/54)在8253/54定时器内部有3个独立工作的计数器:Counter0,Counter1和Counter2,个计数器都分配有一个端口地址,分别为40H,41H和42H。8253/54内部还有一个公用的控制寄存器,端口地址为43H。端口地址输入到8253/54的CS,A1,A0端,分别对3个计数器和控制器寻址。如图(1)所
14、示:图(1)8253/54定时器结构图 对8253/54编程时,先要设定控制字,来选择计数器,确定工作模式和计数值的格式。每个计数器由3个引腿和外部联系。CLK为时钟输入端,GATE为门控信号输入端,OUT为技术/定时信号输出端。每个计数器中包含一个16位的计数寄存器,这个计数器是以倒计数的方式计数的,也就是说,从计数初值开始逐次减1,直到减为0为止。同时8253/54三个计数器是分别编程的,对任一个计数器编程时,必须首先将控制字写入控制寄存器。控制字的作用是确定需要使用的计数器,同时确定要求输出的脉冲波形。另外,对8253/54的初始化工作还包括,向选定的计数器送入一个计数初值,因为这个计数
15、值可以是8位的,也可以使16位的,而8253/54的数据总线是8位的,所以要用两条输出指令来写入初值。控制字节由8位组成即D7,D6,D5,D4,D3,D2,D1,D0。D0-选择计数值的格式,1为BCD码格式,0为二进制格式。D3,D2,D1-选择操作模式,它决定了输出脉冲的形状。D5,D4读写指示位。D7,D6选择计数器,确定控制字是对哪一个计数器进行初始化。对8353/54设置初始值时,一定要符合控制的格式规定,是二进制数还是BCD码表示的数,是只写高(低)字节,还是高低字节都写。控制字一旦做出决定,程序中给出的计数值就要和控制的要求一致。2.5乐曲构成由于把很多发声程序“结合”就构成理
16、论上的曲子,所以利用计算机控制发声的原理,可以编写演奏乐曲的音调。在一首乐曲中,每个音符的音高和音长与频率和节拍有关。组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定。在4/4(四四拍)中,四分音符为1拍,每小节4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续半拍等。如果给全音符分配1s(100*10ms)的时间,则二分音符的持续时间为0。5s(50*10ms),四分音符的持续时间为0。25s(25*10ms),八分音符的持续时间为0。125s(12.5*10ms)。音符的频率参考下表编写:1234
17、567低音131147165175196220247中音262294330349392220494高音524588660698784880984 表(2)音符的频率表3 设计方案说明3.1模块层次图和各模块说明 图(3)模块层次图 整个程序的模块之间的层次和调用关系如图(3)所示,现对它的各主要模块功能介绍如下所示: 1.MAIN模块:控制程序的执行和选择播放不同的乐曲,在乐曲播放完毕后,再回到用户界面进行其他操作。 2.MUSIC0模块:弹奏各种普通乐曲的子程序。 3.MUSIC1模块:手动控制弹奏乐曲的子程序。 4.MUSIC2模块:弹奏字符颜色随节拍变化的乐曲子程序。 5.GENSOUN
18、D模块:产生某一乐曲频率声音的子程序。 6.WAITF模块:产生N*15.08us时间延时的子程序。3.2详细的算法描述1.根据音阶表和简谱为演奏的乐曲定义一个频率表MUS_FREG和一个时间表MUS_TIME。 2.分别将两个表的偏移地址放入SI和BP。 LEA SI,A ;将A(频率表)的地址传给SI寄存器 LEA BP,DS : B ;将数据段Data内B(节拍表)的地址传给BP寄存器3.从表中取出音符的频率放入DI,取出音符的持续时间(实际上是10ms的倍数)放入 BX。 MOV DI,SI; MOV BX,DS:BP频率表中最后一个数据-1作为乐曲的结束符,也可用其他的特殊值来代替。
19、4. 调用通用发声子程序GENSOUND发出音调。这个程序比较简单,如果想演奏另一个乐曲,只需把MUS_FREG和MUS_TIME两个表中的数据换成另一个乐曲的频率和节拍时间就可以弹奏了。详细的程序流程如下图所示: 图(4)程序流程图3.3主要数据结构的定义和说明DATA SEGMENT INFO1 DB 0DH,0AH,- . ;提示信息INFO的数据内容 MUSLIST DB 0DH,0AH, . ;用户界面MUSLIST的内容 MUS_FREG dw . . ;定义窗口的显示内容数据和Two Tigers等乐曲 MUS_TIME dw . . ;频率和节拍表数据以及用于显示提示信息的IN
20、FO语句 DATA ENDS ;定义数据段STACK SEGMENT DB 200 DUP(STACK) STACK ENDS ;定义堆栈段 CODE SEGMENT MAIN PROC NEAR . ;控制程序的执行和选择播放不同的乐曲,在乐曲播放完 . ;毕后,再回到用户界面进行其他操作。定义了两个宏 . ;SHOW MACRO b 和 ADDRESS MACRO A,B 分别用来 . ;显示提示信息和将MUS_FREG和MUS_TIME的地址保存 . ;到SI和BP寄存器中。 MAIN ENDP GENSOUND PROC NEAR . ;先产生某一普通乐曲频率声音的子程序。控制字对定时
21、器2进行 . ;初始化,再在43端口送一个控制字,DX存放高地址,AX存放低 . ;地址。DI中存放给定的频率值。 IN AL,61H ;把端口61H的内容送到AL MOV AH,AL ;保存端口61H的初始内容 OR AL,3 OUT 61H,AL ;turn on the speaker WAIT1: ;时间延迟 MOV CX,5000;循环次数,wait for specified interval GENSOUND ENDP WAITF PROC NEAR IN AL,61H ;监控端口61H存放到AL中 AND AL,10H ;检测PB4位是否为1 CMP AL,AH ;did it
22、 just change JE WAITF1 ;wait for change . ;产生某一乐曲节拍的子程序。通过检测PB4位是否为1来实现。 WAITF ENDP MUSIC0 PROC NEAR . ;弹奏各种普通乐曲的子程序。 MOV DI,SI ;将SI指向的内容传给DI MOV BX,DS:BP ;将数据段的内容(节拍表)传给BX ADD SI,2 ;SI变为频率表的下个地址 ADD BP,2 ; BP变为节拍表的下个地址 MUSIC0 ENDP MUSIC1 PROC NEAR . ;手动控制弹奏乐曲的子程序。 new_note: ;new_note用来实现键盘输入值和“0”比较
23、,当等于“0” MOV AH,01H ;时,程序则弹奏下一个音调。否则程序将停止演奏下个 INT 21H ;音调。 CMP AL,0 jne new_note . MUSIC1 ENDP MUSIC2 PROC NEAR . ;弹奏字符颜色随节拍变化的乐曲子程序。 MOV DI,SI ;将SI指向的内容(频率表)传给DI CMP DI,-1 ;判断是否到了到了最后 JE END_MUS2 MOV BX,DS:BP ;将数据段的内容(节拍表)传给BX .MUSIC2 PROC NEAR CODE ENDS ;定义代码段3.4程序界面的描述程序的界面如图(5)所示: 图(5)程序界面描述流行音乐乐
24、曲演奏程序的歌曲清单如下:1、 Two Tigers2、 Two Tigers(quick version)3、 Two Tigers(time)4、 Two Tigers(Media Player)5、 Mary Had a Little Lamb6、 Exit操作说明如下表:输入操作字符“1”弹奏普通的Two Tigers乐曲字符“2”弹奏加快版的Two Tigers乐曲字符“3”手动控制节拍弹奏Two Tigers乐曲字符“4”一边字符串颜色随节拍变化,一边弹奏Two Tigers乐曲字符“5”弹奏Mary Had a Little Lamb乐曲字符“Q”退出程序 表(6)操作说明表 4
25、 测试及评估 4.1程序开发操作平台 51汇编集成开发环境2.7.4 Windows XP Professional操作系统4.2程序测试与评估 两只老虎简谱1C 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 - | 1.当点击汇编集成开发环境中的“运行”按钮,DOS窗口显示如图(7)所示:图(7)开始菜单2. 当在DOS界面中输入“1”时,程序将演奏Two Tigers乐曲,同时显示如图(8)所示:图(8)程序弹奏Two Tigers3. 等程序弹奏完Two Tigers乐曲,
26、再输入“2”后,程序弹奏加快版Two Tigers乐曲。同时显示类似图(8)的DOS界面。4. 等程序弹奏完加快版Two Tigers乐曲后,在输入“3”,程序将进入弹奏状态。当每次按下“0”后,程序都将演奏下一个音调,这样在按下32个“0”后,程序演奏完毕。DOS界面显示如图(9)所示:图(9)手动控制Two Tigers5. 程序演奏完毕后,再输入“4”,程序演奏“Media Player”版的Two Tigers乐曲。同时随着乐曲演奏时的节拍的变化,显示的系列字符串的颜色随着节拍变化,DOS界面显示如图(10)所示:图(10)显示颜色随节拍变化6. 当弹奏完“Media Player”版
27、的Two Tigers乐曲后,再输入“5”,程序将弹奏Mary Had a Little Lamb,同时显示类似与图(8)的界面。7. 当弹奏完Mary Had a Little Lamb后,再输入“Q”,程序将退出,DOS界面显示如图(11)所示。图(11)程序退出界面5 设计心得 通过这次编程,我体会到,汇编语言是一门非常重要的计算机基础课,我们必须重视它,并努力把它学好。在学习过程中还是有很多的收获,学会了音乐程序的基本设计,能做一些简单的小程序来实现播放乐曲的功能。想写好汇编语言的程序,首先要有非常严肃认真的态度,因为一个小小的输入错误带来的后果可能是不堪设想,遇到最多的就是输入错误,
28、证明我程序编写练习不足,需要多练习。所以我们必须认真对待每一个细节。在编程初期首先遇到的是结构化程序的结构很重要,刚开编的时候没有写流程图和算法,结果程序可读性很差,也很难查错,从中了解到写程序需要一步步来,不能操之过急。 经过了一周的汇编语言程序设计课程,使我能够如期地完成老师布置的课题,同时通过此次流行乐曲演奏程序的实习动手操作,使我解决了计算机是如何产生声音和乐曲的。原来在计算机中有一个可编程时间间隔定时器8253/54(PIT),它能够根据程序提供的计数值和工作模式,产生各种形状和各种频率的计数/定时脉冲,提供给系统的各个部件使用。知道了计算机是如何发出声音的,再通过复习了书本上的乐曲
29、程序这一小节,以及通过互联网上的查找学习,使我在很短的时间内掌握了演奏乐曲的程序。对于刚掌握汇编语言基础的我们来说,通过课程设计的编程和对编程过程中遇到的问题的思考,能有效的提高我对汇编的认识和理解,能切实的提高我们的编程能力,补全我们的不足。在编程中时常出现逻辑错误。因为这个错误在编译中不会被发现,所以很难找出,要对程序一步一步的检查才行,可以用对子程序稍加修改后单独运行来查错。更进一步的了解汇编程序设计,掌握学习和探索的方法,提高自己的能力。在编程的过程中,我也遇到了一些比较头疼的问题,但是通过检查发现原来都是比较细小的地方出现了问题。通过这个发现,使我意识到在编写代码的过程中必须时刻保持
30、清醒的头脑,切忌细小的地方出现差错。采用位触发方式编写此程序的时候与电脑的频率有关,不是太好控制,所以此实验主要以定时器方式为主。进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,为学习后继的基础课和专业课打下坚实的基础。通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。在接下来的两天内我一边编写程序代码,一边也在学习汇编语言的一些基本知识。所以通过这一周的课程设计,在实际动手编程中,使我的汇编编程知识得到了进一步的提高和升华,同时也使我对汇编学习充满了浓厚的兴趣。6 致谢汇编与我的实际生活联
31、系并不是非常密切,但是学校和老师给我们这次课程设计的机会,让我们能够感受到自己动手实践的感觉,从而在实战过程中获得了高贵的经验和教训。在这次课程设计过程中,我发现了许多问题,学到了更多的知识,进一步提高了对汇编语言的认识。虽然指导老师工作比较忙,但还是一有时间就会去机房指导我们,认真细致,而且不厌其烦地为我们解答问题。我的课程设计是在我的老师杨青的亲切关怀和悉心指导下完成的。在此,我真诚地向她及其他指导老师表达最深诚的谢意。我碰到大多数的错误在老师的指导下得到了解决。我还要感谢我们班和我一起生活两年多的同学,他们给我的设计提供了很多有创意的建议,我的成果离不开他们的热情帮助。最后还要感谢我的父
32、母,谢谢他们含辛茹苦地把我养大!7 参考文献 IBM-PC汇编语言程序设计实验教程 沈美明 主编 清华大学出版社 IBM-PC汇编语言程序设计(第2版) 沈美明 主编 清华大学出版社汇编语言程序设计 Richard Blum 著 机械工业出版社微型计算机原理与接口技术 何宏 主编 天津大学出版社80X86汇编语言程序设计教程 杨季文编 清华大学出版社8 附录(源代码);Assemble with:masm music;Link with:link music;Author:ZhuLiang;-数据段-DATA SEGMENT INFO1 DB 0DH,0AH,- INFO2 DB 0DH,0A
33、H, Welcome To Music World$ INFO3 DB 0DH,0AH,Input error!$ INFO4 DB 0DH,0AH,Please input again!$INFO5 DB 0Dh,0AH,$INFO6 DB 0Dh,0Ah,.$INFO7 DB 0DH,0AH, Welcome To Music World $ MUSLIST DB 0DH,0AH, DB 0DH,0AH, The Menu DB 0DH,0AH,- DB 0DH,0AH, DB 0DH,0AH, 1. DB 0DH,0AH, Please input:1 DB 0DH,0AH, DB 0D
34、H,0AH, 2. DB 0DH,0AH, Please input:2 DB 0DH,0AH, DB 0Dh,0AH, 3. DB 0DH,0AH, Please input:3 DB 0DH,0AH, DB 0DH,0AH, 4. DB 0DH,0AH, Please input:4 DB 0DH,0AH, DB 0DH,0AH, 5. DB 0DH,0AH, Please input:5 DB 0DH,0AH, DB 0DH,0AH, 6.EXIT-exit DB 0DH,0AH, Please input:Q DB 0DH,0AH, DB 0DH,0AH,- DB 0DH,0AH,$
35、;音乐播放时,提示的字符msgdoing DB 0DH,0AH,0DH,0AH DB 0DH,0AH,Now,playing the music which you chose DB 0DH,0AH,please waiting. DB 0DH,0AH,0DH,0AH,$ ;-音乐 -MUS_FREG1 dw 262,294,330,262,262,294,330,262 ;两只老虎_频率表 dw 330,349,392,330,349,392,392,440 dw 392,349,330,262,392,440,392,349 dw 330,262,294,196,262,294,196,2
36、62,-1 MUS_TIME1 dw 10 dup(25) ;两只老虎_节拍时间表 dw 50,25,25,50,4 dup(12),25,25 dw 4 dup(12),4 dup(25),50,25,25,50MUS_FREG2 dw 262,294,330,262,262,294,330,262 ;两只老虎_频率表 dw 330,349,392,330,349,392,392,440 dw 392,349,330,262,392,440,392,349 dw 330,262,294,196,262,294,196,262,-1MUS_TIME2 dw 10 dup(12) ;两只老虎(加
37、快版)_节拍时间表 dw 25,12,12,25,4 dup(6),12,12 dw 4 dup(6),4 dup(12),25,12,12,25MUS_FREG3 dw 330,294,262,294,3 dup(330),3 dup(294),330,392,392 ;Mary Had a little Lamb频率表 dw 330,294,262,294,4 dup(330),294,294,330,294,262,-1 ;Mary Had a little Lamb最后一个-1控制结束MUS_TIME3 dw 6 dup(25),50,2 dup(25,25,50),12 dup(25
38、),100 DATA ENDS;-数据段finsh-;-堆栈段-STACK SEGMENT DB 300 DUP(STACK) STACK ENDS ;-堆栈段finsh-;-代码段-CODE SEGMENT ;-main proc far ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AH, 0 ;ah设置显示方式 MOV AL,00 ;AL=00代表采用40*25 黑白文本,16级灰度 INT 10H ;-用来调用显示字符串的宏SHOW MACRO b LEA DX,b MOV AH,9 ;显示字符串 IN
39、T 21H ENDM ;-音乐地址宏 ADDRESS MACRO A,B LEA SI,A ;将A的地址传给SI寄存器 LEA BP,DS:B ;将数据段Data内B的地址传给BP寄存器ENDM ;-show INFO1 show MUSLIST INPUT: MOV AH,01H ;输入1和Q来选择开始和退出 INT 21H CMP AL,Q JZ RETU CMP AL,1 JNZ B0 ADDRESS MUS_FREG1,MUS_TIME1 CALL MUSIC0 JMP EXIT1 B0: CMP AL,2 JNZ C0 ADDRESS MUS_FREG2,MUS_TIME2 CALL
40、 MUSIC0 JMP EXIT1 C0: CMP AL,3 JNZ D0 ADDRESS MUS_FREG1,MUS_TIME1 CALL MUSIC1 D0: cmp al,4 jnz E0 address MUS_FREG1,MUS_TIME1 CALL MUSIC2 JMP EXIT1E0: CMP AL,5 JNZ EXIT ADDRESS MUS_FREG3,MUS_TIME3 CALL MUSIC0EXIT1: show INFO4 JMP INPUT EXIT: show INFO3 show INFO4 show INFO1 show MUSLIST jmp INPUT RETU: MOV AH,4CH INT 21H RETmain endp ;-发声 GENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;该控制字对定时器2进行初始化 OUT 43H,AL ;43端口送一个控制字 MOV DX,12H ;DX存放高地址 MOV AX,348ch ;AX存放低地址 DIV DI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广灵辅警招聘真题及答案
- 国家知识产权局专利局专利审查协作湖北中心2026年度专利审查员公开招聘40人备考题库含答案详解
- 厦门大学附属第一医院漳州招商局开发区分院2025年第四批公开招聘编外工作人员备考题库附答案详解
- 咸安区2026年面向教育部直属师范大学公费师范毕业生专项招聘备考题库完整参考答案详解
- 2025年西安市雁塔区第一小学教师招聘考试备考题库及答案解析
- 2025年12月云南玉溪市易门县华亿投资有限责任公司(第二次)招聘8人备考核心题库及答案解析
- 2025年卫生健康局招聘备考题库及1套参考答案详解
- 2025年第十师北屯市公安局面向社会公开招聘警务辅助人员备考题库及1套完整答案详解
- 构建区域教育评价改革模型:人工智能评价结果应用与效果评估教学研究课题报告
- 国家知识产权局专利局专利审查协作四川中心2026年度专利审查员公开招聘备考题库有答案详解
- 火灾自动报警系统故障应急预案
- 人货电梯施工方案
- 南大版一年级心理健康第7课《情绪小世界》课件
- 光大金瓯资产管理有限公司笔试
- 算力产业园项目计划书
- 塔式起重机安全管理培训课件
- 老年髋部骨折快速康复治疗
- 【初中地理】跨学科主题学习探 索外来食料作物的传播史课件-2024-2025学年七年级上学期(人教版2024)
- 四川省南充市2024-2025学年高一地理上学期期末考试试题含解析
- 化学品管理控制程序
- 探索·鄱阳湖智慧树知到期末考试答案2024年
评论
0/150
提交评论