




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录一 概述2二 总体方案设计4三 详细设计8四 程序的调试与运行结果说明13五 课程设计总结14参考文献15一 概述 汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利用计算机所有特性并能直接控制硬件的唯一语言。借助于汇编程序,计算机本身可以自动地把 汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序设计工作的部分自动化。1课程设计的目的掌握一些程序设计的基本方法,要指导主程序,子程序以及推栈段的使用,.了解通用发声程序了解与掌握定时.计数.音乐.频率.时间之间的关系,学会用发声程序的设计方法,学会用汇编语言编辑音乐程序2课程设计的要求1、需要的基本知识与技能。 具备汇编语言设计、编写、调试和运行程序的方法和技巧。在pc机上运行汇编程序需要经过以下几个阶段:编辑源程序。利用文本编辑工具编辑源程序,生成一个汇编语言的纯文本文件。文件的扩展名为.asm汇编源程序。用汇编器汇编源程序生成目标代码文件,目标代码文件的扩展名是.obj,汇编器还可以生成列表文件和交叉参考文件。汇编器相当于高级语言中的编译器。汇编语言按照汇编语言的语法检查源程序,如果源程序语法有错误,汇编器就不生成目标代码文件,这时,必须重新编辑源程序,修改语法错误。当发现源程序有的行含有不确定因素,汇编器会给出警告信,但按却省处理方法生成目标代码文件。此时,可以重新编辑源程序,消去不确定因素。连接目标程序。利用连接器连接目标代码程序和库函数代码生成可执行程序文件。一般单个模块的连接可以顺利地生成可执行程序文件。当多个模块连接,或者库函数连接时,如果在目标代码中找不到所需的连接信息,连接器就会发生错误提示信息,而不是生成可执行文件。这时,这就要重新编辑源程序,并汇编程序。调试可执行程序。程序的动态调试是在形成可执行文件后,针对可执行程序进行的。debug是简单的动态调试工具,利用调试工具动态的调试程序,找出程序中的问题,那么就要重新编辑,汇编源程序。2、尚未掌握的知识点。有时在程序中定义了较多的 宏,或者可以把自己编译中常用的宏定义建立一个独立的文件,这个只包含若干定义宏文件的文件可称为宏库,通常用扩展名mac或inc来表示。当应用程序中需要用到宏库中的宏定义时,只需要用语句说明。有时汇编语言程序需要连续重复地完成相同或者几乎完全相同的一组代码,这时,可使用重复汇编。汇编程序把重复模块代码重复几次,每次重复把重复块中的哑元用自变量表中的一项取代,下一次取代一次,重复次数由自变量表中的自变量个数来确定。条件汇编中,汇编程序能够根据条件把一段源程序或者把它排去在外,这里用到条件伪操作。条件伪操作可以用在宏定义体内,也可以用在宏定义体外,并且可以嵌套任意次。模块化程序设计方法是按照各部分程序所实现的不同功能把程序划分成为多个模板。各个模板在明确各自的功能和相互间的约定后,就可以编制和调试程序,最后把它们连接起来形成一个大程序,子程序结构是模块化程序设计的基础。子程序相当于高级语言中的过程和函数。在一个程序的不同部分,往往就要用到类似的程序段,这写程序段的功能个结构形式都相同,只是有的变量赋值不同,此时就可以把这些程序写成子程序形式,以便需要时调拥它。计算机中有一个可编程时间间隔定时器8253/54,它能根据程序提供的计数值和工作模式,产生各种计数/定时脉冲,提供给系统的各个部分使用。先要设定控制字,以选择计数器,确定工作模式和计数的值。每个计数器由3个外引腿与外部联系,在对任一个计数妻编程时,首先将控制字节写入控制寄存器。控制字的作用是告诉8253/54选择那一个计数器工作,要求输入什么样的脉冲波形。另外对其初始化工作好包括,向选定计数器送一个初值。pc机上的大多数i/o都是主板的8255的可编程外围接口芯便管理的,ppi包括三个8位寄存器,两个用于输入功能,一个用于输出功能。利用cpu产生延迟时间是最常用的方法,但是对于不同的计算机,它们产生的延迟时间都是不一样的。组成乐曲的每个音符的频率和持续时间是乐曲程序发声所需要的两个数据。音符的持续时间是根据乐曲的速度及每个音符的节拍来确定的。在4/4中,四分音符为一拍,每小节四拍,全音符持续四拍,四分音符持续一拍,八分音符持续半拍等。3、教师对本题目所提出的要求等。 (1)重视实验方案设计 (2)认真作好实验准备 (3)仔细观测实验现象,如实记录实验数据 (4)分析故障原因,精心排除故障二 总体方案设计主程序流程图: 开始 输入字符 判断是否为q y n 判断是否为a 结束 y n 判断是否为b调用宏address y n 判断是否为cmusic子程序调用宏address y n music子程序clear子程序调用宏address music子程序图1 主程序流程图music子程序流程图:di= -1返回dos界面并重新输入字符gensound子程序取下一频率值和下一时间值开始结束 图2 music子程序流程图这次课程设计的设计思想是在熟练掌握汇编程序的设计方法的基础上,利用通用发生程序编写音乐程序组成音乐的每个音符的频率值和持续时间是音乐程序发声所需要的两个数据,根据音调与频率和时间之间的关系,把要编辑的音乐的每个音符的频率和持续时间定义成两个数据表,进而把它们写入通用发声程序,音乐程序就完成。在编制此音乐演奏程序时,应该知道rom bios 中有个beep子程序,这能根据bl中组出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896hz的声音,我们可以利用并修改beep,使其产生任一频率的声音。首先要了解计算机是如何产生声音和乐曲的。找出相关程序源代码,弄清楚各功能的环节间的联系、联接方法,搞清楚单调与频率和时间的关系,利用计算机控制发声的原理,依照基本的算法思想写程序,测试,更正,扩充功能,修饰细节。本次设计在具体设计过程中的整体设计思路如下:该程序主要分成1根据音阶表和简谱为演奏的乐曲定义一个频率表mus_freq和一个时间表mus_time。2分别将两个表的偏移地址放入si和bp。lea si, mus_freqlea bp, ds:mus_time3从表中取出音符的频率放入di,取出音符的持续时间(实际上是10ms的倍数)放入bx。mov di, simov bx, ds:bp频率表中最后一个数据-1作为乐曲的结束符,也可用其他的特殊值来代替。4调用通用发声子程序soundf发出音调。这个程序比较简单,如果想演奏另一个乐曲,只需把mus_freq和mus_time两个表中的数据换成另一个乐曲的频率和节拍时间就可以了。该算法的整体思路是在这个设计中用到了beep通用发声程序,我们利用对beep程序的修改让它产生任何一种频率的声音,也可以让声音的持续时间更容易被调整 在编译的过程中,用到了子程序调用,分别根据输入调用music1,music2,music3程序还要调用子程序gensound发出音调,主要特点是程序简单明了,有良好的交互界面。程序的主要功能是给用户提供三首已经写好的短曲,根据用户的选择演奏乐曲,演奏完一首乐曲后跳回起始状态,如此循环,直到用户输入结束的信息为止。本程序设计过程的整体设计思路是通过定义数据段,堆栈段和代码段实现程序的各种要求。其中堆栈段是为乐曲的音调及频率的数据分配空间;数据段是记录程序运行过程中所需的信息,包括字符信息,单调数据,音频数据;代码段则是程序算法部分, 通过对各数据的调用,实现音乐演奏功能。我所承担的部分设计工作是找出相关程序源代码,弄清楚各功能的环节间的联系、联接方法,搞清楚单调与频率和时间的关系,写出其中的一个音乐文件的代码,理解其在总程序中的作用。依照基本的算法思想写程序,测试,更正,扩充功能,修饰细节。5系统的主要功能:给用户提供三首已经写好的短曲,根据用户的选择演奏乐曲,演奏完一首乐曲后跳回起始状态,如此循环,直到用户输入结束的信息为止。6发声原理图:图3 发声原理图三 详细设计本程序通过intel汇编语言来实现一个简单的奏乐。程序中提供一个音乐菜单,用键盘数字键选择相应的音乐后,便开始播放原先编制好的音乐。程序将帮助你进一步的了解intel汇编语言编程的一些原理。演奏音乐程序: 编写用键盘选择计算机演奏乐曲的程序,要求程序运行首先在屏幕上显示出乐曲菜单.例: a.玛丽有只小羔羊 b.太湖船 c.祝福歌键盘输入各音乐对应的字母,便可插放音乐。输入q,则退出。输入除a到c以外的字符,提示输入出错,提示再次输入。播放完音乐,再次提供乐曲清单。可再次选择乐曲。 ;音乐程序.运行行程序,按大写字母“a”,唱乐曲“玛丽有只小羔羊”;;按大写字母“b”,唱乐曲“太湖船”;按大写字母“c”,唱乐曲“祝福歌”;按x鍵,退出程序清单如下:;数据段data segment para datainfo1 db 0dh,0ah,welcome you to come here!$info2 db 0dh,0ah,this is a music program!$info3 db 0dh,0ah,please select!$info4 db 0dh,0ah,input error!$info5 db 0dh,0ah,please input again!$muslist db 0dh,0ah,a music1 db 0dh,0ah,b music2 db 0dh,0ah,c music3 db 0dh,0ah,q exit db 0dh,0ah,$mus_freg1 dw 330,294,262,294,3 dup (330) ;音乐1的频率表1,2小节 dw 3 dup (294),330,392,392 ;3,4小节 dw 330,294,262,294,4 dup (330) ;5,6小节 dw 294,294,330,294,262,-1 ;7,8小节mus_time1 dw 6 dup (25*8),50*8 ;音乐1的时间节拍表1,2小节 dw 2 dup (25*8,25*8,50*8) ;3,4小节 dw 12 dup (25*8),100*8 ;58小节mus_freg2 dw 330,392,330,294,330,392,330,294,330 dw 330,392,330,294,262,294,330,392,294 dw 262,262,220,196,196,220,262,294,332,262,-1mus_time2 dw 3 dup(50),25,25,50,25,25,100 dw 2 dup(50,50,25,25),100 dw 3 dup(50,25,25),100mus_freg3 dw 262,262,294,262,349 dw 330,262,262,294,262 dw 392,349,262,262,523 dw 440,349,262,262,466 dw 466,440,262,392,349,-1 mus_time3 dw 50,50,100,100,100 dw 100,100,50,50,100,100 dw 100,100,100,50,50,100 dw 100,100,100,100,100,50 dw 50,100,100,100,100,100data ends;堆栈段stack segment para stack stack db 200 dup (stack) ;初始化堆栈stack ends;代码段code segment assume ds:data,ss:stack,cs:codemain proc far mov ax,data ;数据段装入段寄存器ds mov ds,ax mov ah, 0 ;bios功能调用,设置显示方式 mov al,4 int 10h ;十号doc中断? mov ah,0bh ;0b号doc调用? mov bh,0 mov bl,4 int 10h mov ah,0bh mov bh,01h mov bl,00 int 10hshow macro b ;定义一个宏 lea dx,b mov ah,9 ;9号doc调用? int 21h endm show info1 show info2 show info3 show muslistinput: mov ah,01h ;键盘输入并回显 int 21h cmp al,q jz retu ;退出 cmp al,a jnz b0 call music1 jmp exit1b0: cmp al,b jnz c0 call music2 jmp exit1c0: cmp al,c jnz exit call music3exit1: show info5 ;宏调用 jmp input exit: call clear show info4 show info5 show info1 show info2 show info3 show muslist jmp inputretu: mov ah,4ch ;带返回码终止 int 21hmain endp music1 proc near push ds sub ax,ax ;ax清零 push ax lea si,mus_freg1 lea bp,ds:mus_time1freg1: mov di,si cmp di,-1 ;音符的频率是否结束 je end_mus1 ;若是则返回 mov dx,ds:bp ;取出音符的持续时间放入bx mov bx,1400 call gensound ;调用gensound子程序发出音调 add si,2 add bp,2 jmp freg1end_mus1: retmusic1 endpgensound proc near push ax ;保存将要用到的寄存器 push bx push cx push dx push di mov al,0b6h ;向8253-5/8254-2计数器写入控制字 out 43h,al ;方式3、双字节写和二进制计数方式写到控制口 mov dx,12h ;设置被除数 mov ax,533h*896 div di ;其商(ax)为预置值 out 42h,al ;先送lsb mov al,ah out 42h,al ;后送msb in al,61h ;读8255端口b(61h)原值 mov ah,al ;保存端口原值 or al,3 out 61h,al ;接通扬声器wait1: mov cx,8ff0h ;在80486/dx2/66中取delay1: loop delay1 dec bx jnz wait1 mov al,ah ;写回61h口原值,关闭扬声 out 61h,al pop di ;恢复寄存器 pop dx pop cx pop bx pop ax ret ;子程序结束返回gensound endpmusic2 proc near push ds sub ax,ax push ax lea si,mus_freg2 lea bp,ds:mus_time2freg2: mov di,si cmp di,-1 je end_mus2 mov dx,ds:bp mov bx,1400 call gensound add si,2 add bp,2 jmp freg1end_mus2: retmusic2 endpmusic3 proc near push ds sub ax,ax push ax lea si,mus_freg3 lea bp,ds:mus_time3freg3: mov di,si cmp di,-1 je end_mus3 mov dx,ds:bp mov bx,1400 call gensound add si,2 add bp,2 jmp freg1end_mus3: retmusic3 endpclear proc near ;清屏子程序 push ax push bx push cx push dx mov ah,6 ;屏幕初始化或上卷 mov al,0 mov ch,0 ;左上角行号为0 mov cl,0 ;左上角列号为0 mov dh,24 ;右下角行号为24mov dl,79 ;右下角列号为79 mov bh,7 ;卷入行属性为7 int 10h ;调用显示bios pop dx pop cx pop bx pop ax retclear endpcode ends end main四 程序的调试与运行结果说明一 程序的调试:1. 编辑源程序,假定源文件名为yinyue.asm。2. 汇编源程序yinyue.asm。调用宏汇编程序masm对源文件yinyue.asm进行汇编,生成目标文件yinyue.obj。若汇编无错误,则进入第三步。3. 用连接命令link连接目标程序文件yinyue.obj。若连接成功,则进入下一步。4. 运行可执行文件yinyue.exe。5debug调试的具体步骤:debug命令均为一个字母,其后可以跟一个或多个参数。命令中参数之间必须用分界符号隔开。命令和参数可以用大写或小写混合的方式输入,每个命令以回车键作结束符。在执行命令过程中,可以按ctrl+break来终止一个命令的执行,然后返回到debug提示符下。这里我用到了(显示内存单元内容的)d命令和(跟踪命令)t命令。在dos的提示符下,键入命令: c:debug typegame在debug程序调入后,将出现提示符,此时就可用debug命令来调试程序。二 程序开始运行后,出现如图界面: 图4 运行界面按大写字母“a”,唱乐曲“玛丽有只小羔羊”;按大写字母“b”,唱乐曲“太湖船”按大写字母“c”,唱乐曲“祝福歌”按q鍵,退出五 课程设计总结设计中遇到的问题在此次课程设计的过程中,我遇到了很多的问题,主要有以下一些:(1) 在编程初期首先遇到的是结构化程序的结构很重要,刚开编的时候没有写流程图和算法,结果程序可读性很差,也很难查错,从中了解到写程序需要一步步来,不能操之过急。(2) 在编程中时常出现逻辑错误。因为这个错误在编译中不会被发现,所以很难找出,要对程序一步一步的检查才行,可以用对子程序稍加修改后单独运行来查错。这体现我经历的程序不够多,需要在这方面加把劲。(3)在编写音乐的时候,不懂的节拍的把握。后来上网查资料和老师的帮助,才对音乐的节拍有所了解,最后终于解决了这问题。问题的解决方法此次课程设计中遇到了很多问题,在指导老师的帮助下,加上我自己的努力及同学朋友的全力
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年各种气象要素智能传感器项目发展计划
- 安全文明施工规范与实操指导
- 经济改革与高质量发展
- 2024年1月化粪池疏通与市政管网对接工程质保合同
- 2024年软件定义汽车全球制造商就绪情况研究报告
- 晋级年终总结报告
- 2024年11月份防雷击加固车库电子设备存储条款
- 客户回访服务协议(2篇)
- 2024年三月文物保护专用材料库存清算协议
- 2024年5月份工程保险理赔与合同责任匹配机制
- 研究生三年学习计划
- 2024年国网山东省电力公司招聘笔试参考题库附带答案详解
- 动物饲养与养殖中的危险源识别与风险评估
- 《电话的发明》课件
- 酒店投资项目融资计划书
- 人教版新教材高中英语选择性必修四全册单词语境记忆(复习必背)
- 蔬菜水果配送投标方案
- 西藏自治区班戈县班嘎错、(3湖)盐湖液体矿补充勘查环评报告
- 电机设计计算公式
- 赫尔《期权、期货及其他衍生产品》(第10版)笔记和课后习题详解
- 继父(2015浙江杭州中考记叙文阅读试题含答案)
评论
0/150
提交评论