汇编语言课程设计论文设计题目乐曲演奏程序的设计.doc_第1页
汇编语言课程设计论文设计题目乐曲演奏程序的设计.doc_第2页
汇编语言课程设计论文设计题目乐曲演奏程序的设计.doc_第3页
汇编语言课程设计论文设计题目乐曲演奏程序的设计.doc_第4页
汇编语言课程设计论文设计题目乐曲演奏程序的设计.doc_第5页
免费预览已结束,剩余48页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机与信息工程学院汇编语言课程设计论文设计题目: 乐曲演奏程序 的设计 专 业: 计算机科学与技术 班 级: 学 号: 姓 名: 指导教师: 起止日期: 成 绩: 课程设计任务书一、设计题目: 二、设计 的主要内容: 指 导 教 师: 教 研 室 主 任: 1课程设计指导教师评阅意见书评阅成绩: 2摘要该程序通过DOS 提供了一组对磁盘文件 的建立、打开、关闭 和读写等操作 的功能调用,利用 DOS 和 BIOS 的功能调用,汇编语言可实现对磁盘文件 的存取。对磁盘文件 的管理采用文件句柄方式。现菜单选择以及处理各种功能键 的多种中级功能。实现复制、剪切、粘贴等高级功能,并且制作一个菜单,使用菜单条选择功能,让用户选择演奏 的乐曲,实现音阶演奏。实现枪声,界面美观,程序结构化程度高,模块结构合理。关键词 计算机,汇编语言,文本编辑器,乐曲演奏程序AbstractThe procedure provides a set of DOS disk document on the establishment of open and closed operations, such as reading and writing of the function calls, using DOS and the BIOS function calls, the compilation of language can be realized on the disk file access. On the management of a disk file documents handler way. And the menu choices are now dealing with a variety of mid-level function key functions. Implementation copy, cut, paste, and other advanced features, and create a menu, use the menu of choice functions, allows users to choose the music playing, and scale performance. Implementation gunfire, the interface aesthetic, procedures and a high degree of structure, a rational structure moduleKey words Computers, assembly language, text editor, music concert program 目录 摘 要.Abstract.一、设计背景及意义.1二、设计思想.1三、主要功能.2 四、软硬件环境要求.2五、程序流程图.3六、使用说明.5设计总结.7参考文献.9附录.10II一、设计背景及意义(一)音乐演奏程序实现 的是演奏已经写好 的曲谱,利用BIOS中 的通用发声程序,通过设置相应 的频率 和延迟时间,使发声有音调 的高低长短,进而演奏出写好 的曲子。(二)可以分为四个模块:(1)为演奏 的乐曲定义一个频率表 和一个节拍时间表;(2)分别将两个表 的偏移地址放入 SI 和BP;(3)从表中 的音符 的频率放任DI,取出音符 的持续时间放入BX;(4)调用GENSOUND子程序发出音调。(三)歌曲子程序MUSIC1、MUSIC2、MUSIC3,分别用于演奏三首曲子,发声子程序GENSOUND通过向定时器发送数值使定时器蜂鸣器发声、清屏子程序clear清除屏幕显示,使回到显示菜单清晰,否则将发生错误,显示不正常。二、总体设计思想 用汇编实现文本编辑器及乐曲演奏程序需要有接口与模块化思想,通过 添加更为详细 的注释会更加方便阅读程序,中间加入标识符 的合适命名,先把程序接口 和界面写好,同时设置留下每个函数 的接口,再编写相应 的函数来实现它。基本实现了音乐播放功能,实现了大部分 的文本编辑功能,包括比较难以实现 的复制、剪切、粘贴功能友好 的界面主要体现在:在最后一行我们是信息提示区,每一个功能中我们都有相应 的信息提示,引导用户做出正确 的动作。三、主要功能设计一个文本编辑器,发声系统控制及多种编程技术 的训练,包括功能如下:1、DOS 提供了一组对磁盘文件 的建立、打开、关闭 和读写等操作 的功能调用,利用 DOS 和 BIOS 的功能调用,汇编语言可实现对磁盘文件 的存取。对磁盘文件 的管理采用文件句柄方式。2、实现菜单选择以及处理各种功能键 的多种中级功能。3、实现复制、剪切、粘贴等高级功能4、制作一个菜单,使用菜单条选择功能,让用户选择演奏 的乐曲。5、用定时器方式演奏两只老虎乐曲6、实现音阶演奏。7、实现枪声8、提ESC键,退出当前过程或返回DOS。9、使用F3提供帮助10、界面美观,程序结构化程度高,模块结构合理。四、软硬件环境要求软件:MASM5.0逻辑 ,WINDOW 或DOS操作系统,EDITplus或其他编辑程序;硬件:8086及以上机型;五、程序流程图1.乐曲演奏程序主程序流程图,如图1所示。 图1 乐曲演奏程序主程序流程图2.FILE菜单响应流程图,如图2所示。图2 File菜单响应流程3.EditFile函数流程图,如图3所示。 图3 EditFile函数流程使用说明汇编语言是一种很低级 的语言,没有很多诸如C+中 的名字空间 的机制来保护名字 的作用域,因此,在汇编中所有 的名字即标号、过程名、宏名、变量名都是全局变量。也正是这个原因,在我们编写汇编程序 的时候一定要注意名字冲突问题。我们采用 的方法是:尽量取有意义 的名字,取与作用域相关 的名字,如在我们 的程序中:toSave,toOpen,exitOpen, exitLeft、LOOPahead等等名字让我们一看就知道是在哪个作用域中,他 的意义又是什么。跳转问题在程序比较大时表现得很为突出,经常要出现跳转几次才能解决问题 的情况,这里有一点值得注意 的是,当你分几次跳 的时候,那个中转站一定要选好,如果没有合适 的中转站,可以把以前 的程序代码断开,但一定要加一条无条件跳转指令跳到以前 的地方,否则程序会出现莫明其妙 的问题!如:JMP tonew4tonew2: JMP tonew ;中转站 tonew4: 还有:为了让程序更易于读懂 和维护,在分几次跳转 的情况中标号 的命名问题,我喜欢 的方式是,在要跳到 的地方加1表示第一跳,加2表示第二跳!如:JZ toexit1 Toexit1: jmp toexit2Toexit2: jmp toexit当你觉得寄存器不够用时,不小心用了FS,那你一定要加上一个伪指令:.386。需要加此伪指令 的情况还有比如用到了POPA、PUSHA之类 的伪指令等等。汇编程序设计中最需要注意 的一点就是环境 的保护了,为此我特地定义了两个宏指令:saveE,recover前者为保存环境,后者是为恢复环境 的。当在某个地方调用某个函数时,在这个函数 的调用前后,我们都保证所有 的寄存器 的值还是没有变,这样就不会引起很多棘手 的问题。当然,保护寄存器 的值只是保护现场 的一部分,在本程序中,保护环境还包括保存 和恢复光标位置、保存 和恢复视频缓冲区等等内容。其中保存 和恢复光标位置是靠全局变量:row 和column有及宏指令: poscur x,y 和posgets来实现 的。保存 和恢复视频缓冲区是靠:BackDisplay:将BAK中储存 的视频缓冲区 的内容显示到屏幕上.savedisplay:将视频缓冲区 的内容储存到BAK中备份两个函数来实现 的。当没有进行好环境保护 的工作时,在运行程序 的过程中,会出现比如:无效指令之类 的问题。设计总结(1) 系统分析 和总结做这个程序设计,让我学到最多 的是两个思想:接口与模块化设计思想。详细 的注释使得程序更容易阅读。我们在每个函数、每种数据类型 的定义、每条关键语句都不得有相应 的注释。每个重要 的函数我都解释了入出口参数 和他 的主要功能与思想。我大都采用了良好 的命名规则,尽量使标识符“词能达意”,增强可读性。如在显示文件菜单函数showMenuF中:标号to*为当前选中项* 的处理分支,to*&,其中&是数字,为了解决汇编中 的一些跳转指令分几次跳 的问题。而exitAhead中表示退出Ahead函数。我在编程时有个习惯,就是先把程序接口 和界面写好,同时设置留下每个函数 的接口,再编写相应 的函数来实现它。这样做 的好处是让我很清楚自己需要什么样 的函数,有什么样 的接口,当然就更容易维护了。而且在编程 的过程中我把需要扩充 和需要修改 的地方都已标记出来,方便以后 的维护。我们这一组 的设计可能是功能比较完善 的,我基本实现了音乐播放功能,实现了大部分 的文本编辑功能,包括比较难以实现 的复制、剪切、粘贴功能我都已实现了。友好 的界面主要体现在:在最后一行我们是信息提示区,每一个功能中我都有相应 的信息提示,引导用户做出正确 的动作。另外,我 的菜单做得很是人性化也很漂亮。(2) 个人心得 经过两年 的对计算机 的追寻与探索,我应该算是入了门了,不过也仅仅是入了门而已,我也选择了我以后 的发展方向:操作系统加无线网络。而与这两个方向都密切相关 的课程就是汇编语言了。而且我觉得:学计算机应该是不能只迷失于各种应用,而是应该更深一步 的去学习计算机 的原理,计算机 的实现技巧,而汇编则是真正掌握计算机 的必经之路。真正可称得上“好程序”是要满足一大堆 的条件 的。可读性、健壮性、可维护性、高效性等等条件。其实大部分功能我早就已经实现了,(只用了两天),但其后 的测试、修改、完善、注释、润色 和现在 的编写系统文档也用了不少 的时间。要提高自己 的编程能力,你必须亲自去体验、去设计、编辑、编译、调试、运行。每一个程序员都是在失败、尝试、失败、尝试与收获中成长起来 的。学习 的模式有很种,我比较喜欢,比较推崇 的一种是积累创新发展:当你学习某个知识点时,你开始时只有去了解、去学习它,这都是一种积累,当你对它 的学习积累到一定 的时候,你可能会有一些新 的想法,并由此产生你自己 的理解、自己 的东西,这便是创新了,当然你 的创新是建立在一种积累并对此知识点有包括原理层面 的认识 的基础上 的。这种学习 的模式应用到学习计算机上来就是“应用底层应用”了,比如学习操作系统,你开始时可能只是应用它,当你打算学习其中 的原理并已掌握好它 的工作机制后,你就可以在其基础上开发你自己 的东西、你自己 的程序了,把你对原理 的认识应用到应用层面,你便是其中 的“高级用户”了,而不仅仅是用用它而已!。参考文献1 IBM-PC 汇编语言程序设计 沈美明等 清华大学出版社 2 8086/8088宏汇编语言程序设计教程 第二版 王正智/编 电子工业出版社3 80X86汇编语言程序设计教程 杨季文/等编 清华大学出版社4 8086/8088 和ARM核汇编程序设计 主编:李敬兆 中国科学技术大学出版社5 东阳生等编著:宏汇编语言MASM6实用大全,科学出版社,1993附 录I源程序滚动窗体宏定义 winMACROlux,luy,rdx,rdy,attrMOVAH,6MOVAL,0MOVBH,attr;前景背景属性MOVCH,luxMOVCL,luyMOVDH,rdxMOVDL,rdyINT10h ENDM;滚动窗体宏定义2 win2MACROlal,lux,luy,rdx,rdy,attrMOVAH,6MOVAL,lalMOVBH,attr;前景背景属性MOVCH,luxMOVCL,luyMOVDH,rdxMOVDL,rdyINT10hENDM saveE MACRO PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS PUSH SI ENDMrecover MACRO POP SI POP DS POP DX POP CX POP BX POP AX ENDM fileIOMACRO X,Y LEADX,X MOVAH,Y INT21H ENDM showM MACRO messM poscur 24,0 LEA DX,messM MOV AH,09H INT 21H ENDM ;-;字符串显示宏定义showMACROmess LEADX,messMOVAH,09hINT21hENDM;-;光标定位宏定义posget MACRO ;读光标位置 MOV AH,03h MOV BH,0 INT 10hENDM posgetS MACRO saveE MOV AH,03h MOV BH,0 INT 10h MOV row,DH MOV column,DL recover ENDM poscur MACRO x,y MOVAH,2 MOVDH,x MOVDL,y MOVBH,0 INT10hENDM ;-;读取键盘readChar MACRO MOV BH,0 MOVAH,8h INT 10h ENDMputchar MACRO x MOV DL,x MOV AH,02H INT 21H ENDM getchar MACRO MOV AH,0 INT 16h ENDM ;*;*;EXTRN fileProc:NEAR ;数据段定义 ; .386 data_seg SEGMENT totalCharsDB 0;字符总数,以此来控制数据缓冲区, CHar1DB 0b3h ;常量,是一个竖线 tempchar DB ?;临时字节变量 musicInt DB 0 ;文件数量 musicIndex DB 30h ;默认文件名 的最后一个字符,随新建打开而增1,关闭减1 SaveAsFlag DB 0 ;已调用过filesaveas函数 modifyFlag DB 0;为0时已做修改 AsOrIfFlagDB 0;为0时是saveas调用 saveActive DB 78h ;根据musicInt来判断是否激活save,saveAs菜单 copyActiveDB 78h ;根据copyFlag来判断是否激活copy,cut菜单 pasteActiveDB 78h;根据paste来判断是否激活paste菜单 CLearFlagDB 0;clearFlag为0时表示不需要处理选择文本,如将反色显示还原 pasteFlagDB 0;pasteFlag为0时为不能粘贴, copyFlagDB 0;copyFlag为0时为不能复制与剪切, pasteNumDB 0;粘贴缓冲区中字符个数. PasteBufferDB 25 DUP (0) DB $ ;复制粘贴缓冲区 INsertNumDB 1;insertNum为插入字符 的个数 save DB 0; path DB 30 DUP (0);文件名存放缓冲区 DB $ buffer DB 2000 DUP(?);buffer为数据缓冲区 bak DB 3850 DUP(0) ;视频缓冲区 的备份 row DB 2 ;保存行号, column DB 1 ;保存列号. rowBakDB 2 columnbakDB 1 peak DB 0Dah, 78 DUP(0C4h) ,0BFh,13,10,$ ;顶端横线 errormess1DBcan not creat the file,path is wrong! ,$ errormess2 DBcan not write to the file! ,$ errormess3 DB the filename is too long! ,$ errormess4DBcan not open the file,filename is wrong,$ errormess5DBcan not read the file! ,$ mess1 DB Please input save file name:,$ mess2 DB Please input open file name:,$ mess3 DB *The file is not save! Save it now? (Y/N)*: ,$ mess4DBplease input the filename again ,$ mess5DByour put is wrong!please input Y/N again,$ mess6DB0b3H, row:? column:?,$ mess7DBCreat a new file ,$ mess8DB loads an exiting file from disk ,$ mess9DBsave current file ,$ mess10DBsave current file with new name ,$ mess11DBExits the editor ,$ mess12DBF1:file menu F2:Play Music F3:help ,$ mess21DBCopy selected text to buffer ,$ mess22DBDeletes selected text and copys it ,$ mess23DBInserts buffer contents here ,$ mess13DB0b3H,modified ,$ mess14DB0b3h,NoModified,$ mess15DB editing. press Esc can escape ,$ mess16DB IBM PC Assemble Language Course Design,13,10,$ mess17DB MusicEdit 1.0 ,13,10,$ mess18DB Made by GuSui etc. ,13,10,$ mess19DB Dec,30,2004 ,13,10,$ mess20 DB Press any keys to return,$ musicname DB d:music0,0 RFDB 13,10,$ musicDW2 DUP(262,294,330,262);两只老虎DW2 DUP(330,349,392)DW2 DUP(392,440,392,349,330,262)DW2 DUP(294,196,262),0 timeDW8 DUP(4)DW2 DUP(4,4,8)DW2 DUP(2,2,2,2,4,4)DW2 DUP(4,4,8) music1DW262,294,330,349,392,440,494,523;音阶DW523,494,440,392,349,330,294,262,0time1DW16 DUP(25) ;文件相关数据定义 handler DW 0 filename DB e:/tiger.vol,0 CHartemp DB0 Buffertemp DB4 DUP(0) Bufferflag DW 0 musicFinishDB0 musicTempDW0 timesDW1 musicBuffer DW 100 DUP(0) bufferIndex DW 0 timeBuffer DW100 DUP(0) ;菜单数据定义 str_menu DB File(F1) Play(F2) Edit(F3) Help(F4),13,10,$ file_0 DB 0dah , 11 DUP(0C4H),0BFH ,13,10,$ file_1 DB 0B3H, New ,0B3H,13,10,$ file_2 DB 0B3H, Open ,0B3H,13,10,$ file_3 DB 0B3H, Save ,0B3H,13,10,$ file_4 DB 0B3H, Save as ,0B3H,13,10,$ file_5 DB 0B3H, Exit ,0B3H,13,10,$ file_6 DB 0c0H, 11 DUP(0c4h),0d9H,13,10,$ play_0 DB 0dah , 10 DUP(0C4H),0BFH ,13,10,$ play_1 DB 0B3H, tiger ,0B3H,13,10,$ play_2 DB 0B3H, music2 ,0B3H,13,10,$ play_3 DB 0B3H, scale ,0B3H,13,10,$ play_4 DB 0B3H, gun ,0B3H,13,10,$ play_5 DB 0c0H, 10 DUP(0c4h),0d9H,13,10,$ edit_0 DB 0dah , 10 DUP(0C4H),0BFH ,13,10,$ edit_1 DB 0B3H, Copy ,0B3H,13,10,$ edit_2 DB 0B3H, cut ,0B3H,13,10,$ edit_3 DB 0B3H, Paste ,0B3H,13,10,$ edit_4 DB 0c0H, 10 DUP(0c4h),0d9H,13,10,$ error0 DB Open File failed,13,10,$ error1 DB the file have illegal character, 13,10,$ error2 DB the file have illegal character2, 13,10,$ data_seg ENDS;*代码段*8 code_seg SEGMENT ASSUME CS:code_seg,DS:data_seg ;*主过程开始* start: MOVAX,data_segMOVDS,AX CALL welcome INit: CALL INitwin GEtchar;读键盘 CMPAH,3bh ;F1 JZshowFile CMP AH,3ch;F2 JZ showPlay CMP AH,3dh JZ showE CMP AH,3Eh;F3 JZ showh CMP AH,01h JZ exitf JMP INit showFile: CALL showmenuF JMP INit showPlay: CALL showMenuP JMP INit showE: CALL showMenuE JMP INit showh: CALL showmenuh JMP INit exitf: MOV AH, 4ch INT 21h ;主执行代码结束,下面都是要调用 的函数定义. ;*;*欢迎模块* welcome PROC saveE recover RET welcome ENDP ;- ;*初始化模块* ;功能:初始化屏幕,显示菜单,提示信息,设置工作模式为3号字符模式 ;* INitwin PROC saveE MOV AH,01h MOV CH,03h INT 10h ;设置为字符模式03 win0,0,24,79,70h ;清屏 win 1,0,23,79,07h win 2,1,23,78,27H poscur 0,0 show str_menu poscu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论