汇编语言课程设计论文_第1页
汇编语言课程设计论文_第2页
汇编语言课程设计论文_第3页
汇编语言课程设计论文_第4页
汇编语言课程设计论文_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、目目录录 一概述.3 二总体方案设计 .6 三详细设计.9 四程序的调试与运行结果说明 .13 五课程设计总结.14 附录.15 参考文献.24 一一 概述概述 汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利 用计算机所有特性并能直接控制硬件的唯一语言。借助于汇编程序,计算机本身 可以自动地把 汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序 设计工作的部分自动化。 1 1 课程设计的目的课程设计的目的 1理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2培养综合运用所学知识独立完成课题的能力。 3培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,

2、 全方位考虑问题等科学技术人员应具有的素质。 4掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中 找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 5掌握利用单片机接口技术解决问题的基本方法 2 2 课程设计的要求课程设计的要求 1、需要的基本知识与技能。 具备汇编语言设计、编写、调试和运行程序的方法和技巧。在 PC 机上 运行汇编程序需要经过以下几个阶段: 编辑源程序。利用文本编辑工具编辑源程序,生成一个汇编语言的纯文 本文件。文件的扩展名为.ASM 汇编源程序。用汇编器汇编源程序生成目标代码文件,目标代码文件的 扩展名是.OBJ,汇编器还可以生成列表文件和交叉参考文件

3、。汇编器相当于 高级语言中的编译器。汇编语言按照汇编语言的语法检查源程序,如果源程 序语法有错误, 汇编器就不生成目标代码文件, 这时, 必须重新编辑源程序, 修改语法错误。 当发现源程序有的行含有不确定因素, 汇编器会给出警告信, 但按却省处理方法生成目标代码文件。此时,可以重新编辑源程序,消去不 确定因素。 连接目标程序。利用连接器连接目标代码程序和库函数代码生成可执行 程序文件。一般单个模块的连接可以顺利地生成可执行程序文件。当多个模 块连接,或者库函数连接时,如果在目标代码中找不到所需的连接信息,连 接器就会发生错误提示信息,而不是生成可执行文件。这时,这就要重新编 辑源程序,并汇编程

4、序。 调试可执行程序。程序的动态调试是在形成可执行文件后,针对可执行 2 程序进行的。 DEBUG 是简单的动态调试工具,利用调试工具动态的调试程序, 找出程序中的问题,那么就要重新编辑,汇编源程序。 2、尚未掌握的知识点。 有时在程序中定义了较多的宏,或者可以把自己编译中常用的宏定义建 立一个独立的文件,这个只包含若干定义宏文件的文件可称为宏库,通常用 扩展名 MAC 或 INC 来表示。当应用程序中需要用到宏库中的宏定义时,只需 要用语句说明。 有时汇编语言程序需要连续重复地完成相同或者几乎完全相同的一组代 码,这时,可使用重复汇编。汇编程序把重复模块代码重复几次,每次重复 把重复块中的哑

5、元用自变量表中的一项取代,下一次取代一次,重复次数由 自变量表中的自变量个数来确定。条件汇编中,汇编程序能够根据条件把一 段源程序或者把它排去在外,这里用到条件伪操作。条件伪操作可以用在宏 定义体内,也可以用在宏定义体外,并且可以嵌套任意次。 模块化程序设计方法是按照各部分程序所实现的不同功能把程序划分成 为多个模板。各个模板在明确各自的功能和相互间的约定后,就可以编制和 调试程序,最后把它们连接起来形成一个大程序,子程序结构是模块化程序 设计的基础。子程序相当于高级语言中的过程和函数。在一个程序的不同部 分,往往就要用到类似的程序段,这写程序段的功能个结构形式都相同,只 是有的变量赋值不同,

6、此时就可以把这些程序写成子程序形式,以便需要时 调拥它。 计算机中有一个可编程时间间隔定时器 8253/54,它能根据程序提供的 计数值和工作模式,产生各种计数/定时脉冲,提供给系统的各个部分使用。 先要设定控制字,以选择计数器,确定工作模式和计数的值。每个计数器由 3 个外引腿与外部联系,在对任一个计数妻编程时,首先将控制字节写入控 制寄存器。控制字的作用是告诉 8253/54 选择那一个计数器工作,要求输入 什么样的脉冲波形。另外对其初始化工作好包括,向选定计数器送一个初值。 PC 机上的大多数 I/O 都是主板的 8255 的可编程外围接口芯便管理的,PPI 包括三个 8 位寄存器,两个

7、用于输入功能,一个用于输出功能。利用 CPU 产 生延迟时间是最常用的方法,但是对于不同的计算机,它们产生的延迟时间 都是不一样的。 组成乐曲的每个音符的频率和持续时间是乐曲程序发声所需要的两个数 据。音符的持续时间是根据乐曲的速度及每个音符的节拍来确定的。在 4/4 中,四分音符为一拍,每小节四拍,全音符持续四拍,四分音符持续一拍, 八分音符持续半拍等。 3 3、教师对本题目所提出的要求等。 (1)重视实验方案设计 (2)认真作好实验准备 (3)仔细观测实验现象,如实记录实验数据 (4)分析故障原因,精心排除故障 4 二二 总体方案设计总体方案设计 主程序流程图主程序流程图: : 开始 输入

8、字符 Y Y 判断N N 是否 结束 Y Y 判 断 是 N N 否为 A 调用宏 ADDRESSY Y 判 断 是 否为 B N N Music 子程序 Y Y 调 用 宏判 断 是 N N ADDRES否为 C Music 子程序 Clear子程序 调 用 宏 ADDRESS Music 子程序 图图 1 1主程序流程图主程序流程图 5 MusicMusic 子程序流程图:子程序流程图: 图图 2 2MusicMusic 子程序流程图子程序流程图 这次课程设计的设计思想是在熟练掌握汇编程序的设计方法的基础上, 利用 通用发生程序编写音乐程序 组成音乐的每个音符的频率值和持续时间是音乐程 序

9、发声所需要的两个数据,根据音调与频率和时间之间的关系,把要编辑的音乐 的每个音符的频率和持续时间定义成两个数据表,进而把它们写入通用发声程 序,音乐程序就完成。 在编制此音乐演奏程序时,应该知道 ROM BIOS 中有个 BEEP 子程序,这能根 据BL中组出的时间计数值控制 8254 定时器,产生持续时间为1 个或几个 0.5 秒, 频率为 896HZ 的声音,我们可以利用并修改 BEEP,使其产生任一频率的声音。 首先要了解计算机是如何产生声音和乐曲的。找出相关程序源代码, 弄清楚各功 能的环节间的联系、联接方法,搞清楚单调与频率和时间的关系,利用计算机控 制发声的原理,依照基本的算法思想

10、写程序,测试,更正,扩充功能,修饰细节。 本次设计在具体设计过程中的整体设计思路如下: 该程序主要分成 1 1 根据音阶表和简谱为演奏的乐曲定义一个频率表 mus_freq 和一个时间表 mus_time。 2 2分别将两个表的偏移地址放入 SI 和 BP。 6 开始 DI= -1 返回 DOS 界面 并重新输入字符 GENSOUND 子程序 结束 取下一频率值 和下一时间值 lea si, mus_freq lea bp, ds:mus_time 3 3从表中取出音符的频率放入 DI,取出音符的持续时间(实际上是 10ms 的倍数)放入 BX。 mov di, si mov bx, ds:b

11、p 频率表中最后一个数据-1 作为乐曲的结束符,也可用其他的特殊值来代替。 4 4调用通用发声子程序调用通用发声子程序 SOUNDFSOUNDF 发出音调。发出音调。 这个程序比较简单,如果想演奏另一个乐曲,只需把 mus_freq 和 mus_time 两个表中的数据换成另一个乐曲的频率和节拍时间就可以了。 该算法的整体思路 是在这个设计中用到了 BEEP 通用发声程序, 我们利用对 BEEP 程序的修改让它产 生任何一种频率的声音,也可以让声音的持续时间更容易被调整 在编译的过程 中,用到了子程序调用,分别根据输入调用 music1,music2,music3 程序还要调 用子程序 gen

12、sound 发出音调,主要特点是程序简单明了,有良好的交互界面。程 序的主要功能是给用户提供三首已经写好的短曲,根据用户的选择演奏乐曲,演 奏完一首乐曲后跳回起始状态,如此循环,直到用户输入结束的信息为止。 本程序设计过程的整体设计思路是通过定义数据段 ,堆栈段和代码段实现程 序的各种要求。 其中堆栈段是为乐曲的音调及频率的数据分配空间;数据段是记 录程序运行过程中所需的信息,包括字符信息,单调数据,音频数据;代码段则 是程序算法部分, 通过对各数据的调用,实现音乐演奏功能。 我所承担的部分设计工作是做出该程序的设计的欢迎界面并阅读程序源代 码, 弄清楚各功能的环节间的联系、 联接方法, 搞清

13、楚单调与频率和时间的关系。 依照基本的算法思想写程序,测试,给源代码润色。 5 5系统的主要功能系统的主要功能 给用户提供三首已经写好的短曲,根据用户的选择演奏乐曲,演奏完一首乐 曲后跳回起始状态,如此循环,直到用户输入结束的信息为止。 7 三三 详细设计详细设计 1 1 数据段定义数据段定义 数据段分别定义了 INFO1、INFO2、INFO3 、INFO4、INFO5 各字符串分别显 示程序运行之初对用户的提示。MUSLIST 中显示用户能选择的三首歌曲列表。 程序用 MUS_FREG、MUS_TIME 分别定义了音乐频率和节拍。使得发声程序可 以按照理想的要求发出连续的乐曲。节拍和频率定

14、义原理如下: 乐曲是按照一定的高低、长短和强弱关系组成的音调,在每一首乐曲中,每 个音符的音高和音长与发声系统中的频率、节拍有关。可参考下表: 音名CDEFGABCDEFGABC 唱名12345671234567i 频率 (HZ) 131 147 165 175 196 220 247 262 294 330 349 392 440 492 523 其中,低音阶从低音 C(131HZ)到中央 C(262HZ) ,高音阶从中央 C(262HZ) 到高音 C(523HZ) 。组成乐曲的音符的频率值和持续时间是乐曲程序发声所必需 的两组数据, 频率可以查上表,音符的持续时间根据乐曲的速度及每个音符的

15、节 拍数来确定。在4/4 拍中,四分音符为一拍,每小节四拍,全音符持续四拍,二 分音符持续二拍,四分音符持续一拍,八分音符持续半拍。如果给全音符分配1 秒(100*10ms)的时间,则二分音符持续时间为 0.5 秒,四分音符持续时间为 0.25 秒,八分音符持续时间为 0.125 秒。 知道了音调及频率、 时间的关系后, 可以按照乐曲的乐谱将每个音符的频率 和持续时间定义为两个数据表,然后编写程序依次取出表中的频率值和时间值。 “玛丽有只小羊羔”的乐谱如下: 3 2 1 2 | 3 3 3 | 2 2 2 | 3 5 5 | 3 2 1 2 | 3 3 3 3 | 2 2 3 2 | 1 |

16、可设置该乐曲的频率表如下: MUS1_ F DW 330,294,262,294,3DUP (330) DW 3DUP (294),330,392,392 DW 330,294,262,294,4DUP (330) DW 294,294,330,294,262,-l 设置该乐曲的节拍时间表如下:一般延迟时间取 10ms 的倍数。 MUSlT DW 6 DUP (25*8),50*8 8 DW 2 DUP (25*8,25*8,50*8) DW12DUP(25*8),100*8 2 2 主界面设计主界面设计 主界面的设计包括设置文本的显示方式, 设置背景颜色,设置图形欢迎界面 的显示方式。 (1

17、)本次设计文本的显示方式主要运用 BIOS 功能调用 10 号中断 0 号功能 MOVAH,0H MOVAL,08H INT10 但在此功能调用过程中, 若与主机型号不符则调试不成功,在本次设计中由 于找不到与主机型号相符的显示文本,故采用了默认文本的显示方式。 (2) 本次设计背景的颜色, 并未采用传统的 BIOS 功能调用而是先定义 160 200 个空格 然后调用 BIOS 中断的 13 号功能输出空格,并且对空格进行颜色 定义。 MOV ES,AX MOV BP,OFFSET SPACE MOV DX,0000H MOV CX,32000D MOV BX,00A1H MOV AX,13

18、00H INT 10H (3)主界面设计图形的输出是静态的,是通过文本格式画出来的。 STRINGDB DB DB |,10,13 |,10,13 #,10,13 #O_#,10,13 #/_. _|Piano|#,10,13 ,10,13 DB DB DB DB DB DB DB DB DB DB #|_|# # # _|# #,10,13 * _*,10,13 *Amary have gaoyang* *Btai hu chuang* ,10,13 ,10,13 *C liang zhi lao hu*,10,13 *Q exit*,10,13 *,10,13 OO,10,13DB DBO

19、 | OO | O,10,13 DB_|/_|/_,10,13 9 DB / /,10,13 DB DB _/_/,10,13 % %,10,13 DB,10,13,$ DBMUSA ,0AH,0DH DBSong:maryhavegaoyang ,0AH,0DH DB ,0AH,0DH,$ MUSBDB ,0AH,0DH DBSong: tai hu chuang,0AH,0DH DB ,0AH,0DH,$ MUSCDB ,0AH,0DH DBSong:liang zhi lao hu,0AH,0DH DB ,0AH,0DH,$ 3 3 主要的宏和过程的实现主要的宏和过程的实现 为将事先定义

20、的数据段字符串显示在屏幕上,定一个参数为 b 的宏。将 b 的地址传到 DX。 随后调用 DOS 09 号功能调用。 将字符串显示到屏幕。 调用 DISPLAY 的实例为: DISPLAY INFO1 DISPLAY INFO2 DISPLAY INFO3 DISPLAY MUSLIST 在此段代码中,程序显示提示作用的字符串和歌曲列表。 DISPLAY 宏具体实现如下: DISPLAY MACRO b LEA DX,b MOV AH,9 INT 21H 10 ENDM 歌曲包含节拍和频率。 此处定义的音乐地址宏包含两个参数,将歌曲频率地 址导入 SI 将歌曲节拍导入 BP。当选择不同的歌曲时

21、,主程序调用该宏,将用户 要求的歌曲的频率和节拍导入,以便在 MUSIC 中实现发声。 音乐地址宏实现如下: ADDRESS MACRO A,B LEA SI,A LEA BP,DS:B ENDM 4 4 源程序代码见附录源程序代码见附录 11 四四 程序的调试与运行结果说明程序的调试与运行结果说明 1 1 程序的调试程序的调试 (1) 编辑源程序,假定源文件名为 YINYUE.ASM。 (2) 汇编源程序 YINYUE.ASM。 调用宏汇编程序 MASM 对源文件 YINYUE.ASM 进行汇编,生成目标文件 YINYUE.OBJ。若汇编无错误,则进入第三步。 (3) 用连接命令 LINK

22、连接目标程序文件 YINYUE.OBJ。 若连接成功,则进入下一 步。 (4)运行可执行文件 YINYUE.EXE。 2 2 程序开始运行后,出现如图界面:程序开始运行后,出现如图界面: 12 按大写字母“A” ,唱乐曲“玛丽有只小羔羊” ; 按大写字母“B” ,唱乐曲“太湖船” ; 按大写字母“C” ,唱乐曲“两只老虎” ; 按Q鍵,退出。 五五 课程设计总结课程设计总结 1. 设计中遇到的问题设计中遇到的问题 在此次课程设计的过程中,我遇到了很多的问题,主要有以下一些: (1)由于在此次课程设计的过程中我负责的部分为欢迎界面的制作,那么 在制作的过程中如何制作图形界面的方式即为整个界面制作

23、的灵魂。 指导老师曾 介绍过调用 BIOS 功能来画出线条,但在此次设计中我并没有采用传统的方法, 而是定义了 32000 个空格来填充整个字符串界面。但在设计图形形状的过程中, 经常会出现乱码的现象。 (2) 在编程中时常出现逻辑错误。因为这个错误在编译中不会被发现,所 13 以很难找出, 要对程序一步一步的检查才行,可以用对子程序稍加修改后单独运 行来查错。这体现我经历的程序不够多,需要在这方面加把劲。 2.问题的解决方法 问题的解决方法 此次课程设计中遇到了很多问题,在指导老师的帮助下,加上我们团队其他小 组成员积极努力地讨论与查找资源,我的这些问题基本上得到完满的解决。如界 面字符的乱

24、码现象,我通过和组员讨论、网上查资料,最终解决了这个问题。 3. 3.设计后的感想和收获 设计后的感想和收获 通过一学期的汇编语言的学习,我对汇编的认识有了更深理解,切实的提高 了我的编程能力通过这次课程设计,我对学过的知识有了更深层次的运用,能用 汇编语言熟练地运用顺序、 选择、 循环三大结构, 进一步掌握了各个指令的功能, 特别是转向指令,掌握了子程序的定义及调用,以及正确地运用 DEBUG 指令。 在整个程序的编写中,调试占了很大部分的时间。要想写好汇编语言的程序,必 须认真对待代码的每一个细节,还必须熟练的掌握 debug 命令,这对程序的调试 是非常重要的。 通过这次实际动手能力的培

25、养,我进一步熟悉了汇编语言的结构 和使用方法, 基本达到了能独立阅读、编制和调试一定规模的汇编语言程序的水 平 总之,我认为我本次课程设计基本达到了要求 ,所编程序的功能也基本完善 , 而且程序有友好的交互界面和可扩充性,就是说可以在数据段中定义音乐的频率 表和时间节拍表,然后在代码段中修改一下即可或者如果想演奏另一个乐曲,只 需把mus_freq和mus_time两个表中的数据换成另一个乐曲的频率和节拍时间就 可以了。当然本程序也存在一定不足,就是不能在运行程序后只要你输入任一首 音乐的频率表和时间表确认后就可以演奏此音乐。 附录附录 源代码:源代码: DATASEGMENT SPACEDB

26、32000 DUP ( ) INFO1DB 0DH,0AH,welcome to this programe!$ INFO2DB 0DH,0AH,there are some music!$ INFO3DB 0DH,0AH,please select which one to play:(A,B,C,Q)$ INFO4DB 0DH,0AH,input error!$ INFO5DB 0DH,0AH,please input again!$ BUF1DB 0D,0AH,Do you want to come back?(Y/N)$ STRINGDB|,10,13 14 ,10,13 ,10,13

27、 ,10,13 ,10,13 ,10,13 ,10,13 ,10,13 ,10,13 ,10,13 ,10,13 ,10,13 DB| DB# DB#O_# DB#/_._|Piano|# DB DB #|_|#,10,13 #_|# DB DB DB DB DB DB * _*,10,13 *Amary have gaoyang*,10,13 *Btai hu chuang*,10,13 *C liang zhi lao hu*,10,13 *Q exit*,10,13 * DBOO DBO | OO | O DB_|/_|/_ DB / / DB_/_/ DB % %,10,13 DB D

28、B ,10,13,$ MUSA 15 ,0AH,0DH DBSong: mary have gaoyang ,0AH,0DH DB ,0AH,0DH,$ MUSBDB ,0AH,0DH DBSong:tai huchuang ,0AH,0DH DB ,0AH,0DH,$ MUSCDB ,0AH,0DH DBSong:liang zhi lao hu ,0AH,0DH DB ,0AH,0DH,$ ;* 音乐一玛丽有只小羊羔 MUS_FREG1 DW 330,294,262,294,3 DUP (330) DW 3 DUP (294),330,392,392 DW 330,294,262,294,

29、4 DUP (330) DW 294,294,330,294,262,-1 MUS_TIME1 DW 6 DUP (25*8),50*8 DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8 ;* *音乐二 太湖船 MUS_FREG2 DW 330,392,330,294,330,392,330,294,330 DW 330,392,330,294,262,294,330,392,294 16 DW 262,262,220,196,196,220,262,294,332,262,-1 MUS_TIME2 DW 3 DUP(50),25,25,50,2

30、5,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100 ;*音乐三 两只老虎 MUS_FREG3 DW 262,294,330,262 DW 262,294,330,262 DW 330,349,392 DW 330,349,392 DW 392,440,392,349,330,262 DW 392,440,392,349,330,262 DW 294,196,262 DW 294,196,262,-1 MUS_TIME3 DW 50,50,100,100,100 DW 100,100,50,50,100,100 DW 100,100

31、,100,50,50,100 DW 100,100,100,100,100,50 DW 50,100,100,100,100,100 DATAENDS ;* STACKSEGMENT STACK DB 200 DUP (0) STACKENDS CODESEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AH,0 MOV AL,08 INT 10H MOV AX,DATA MOV DS,AX MOV ES,AX 17 MOV BP,OFFSET SPACE MOV DX,0000H MOV CX,32000D MOV BX,00A1H MOV

32、AX,1300H INT 10H ;* 定义一个宏显示 DISPLAYMACRO b LEA DX,b MOV AH,9 INT 21H ENDM ;*音乐地址宏 ADDRESS MACRO A,B LEA SI,A LEA BP,DS:B ENDM ;* DISPLAY INFO1 DISPLAY INFO2 DISPLAY STRING DISPLAY INFO3 INPUT:MOV AH,01H INT 21H CMP AL,Q JNZ A0 JMP RETU A0:CMP AL,A JNZ B0 18 CALL CLEAR DISPLAY MUSA ADDRESS MUS_FREG1,

33、MUS_TIME1 CALL MUSIC JMP EXIT1 B0:CMP AL,B JNZ C0 CALL CLEAR DISPLAY MUSB ADDRESS MUS_FREG2,MUS_TIME2 CALL MUSIC JMP EXIT1 C0:CMP AL,C JNZ exit CALL CLEAR DISPLAY MUSC ADDRESS MUS_FREG3,MUS_TIME3 CALL MUSIC EXIT1: DISPLAY INFO5 JMP INPUT EXIT: call clear DISPLAY INFO4 DISPLAY INFO5 DISPLAY INFO1 DISPLAY INFO2 DISPLAY STRING DISPLAY INFO3 jmp input RETU: MOV AH,4CH INT 21H ;*发声 19 GENSOUN

温馨提示

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

评论

0/150

提交评论