收藏 分享(赏)

汇编语言课程设计.doc

上传人:dcs1276 文档编号:7094356 上传时间:2019-05-05 格式:DOC 页数:23 大小:677.50KB
下载 相关 举报
汇编语言课程设计.doc_第1页
第1页 / 共23页
汇编语言课程设计.doc_第2页
第2页 / 共23页
汇编语言课程设计.doc_第3页
第3页 / 共23页
汇编语言课程设计.doc_第4页
第4页 / 共23页
汇编语言课程设计.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、 课程设计报告设计题目:课设 1.光标轨迹程序 课设 2.利用定时器编写两只老虎乐曲学 院 信息科学与工程学院 年级专业 学生姓名 学 号 指导教师 张忠平 何海涛 邹晓红 课程名称 汇编语言与接口技术 提交日期 2014 年 7 月 11 日 摘 要课程设计一在 TDDEBUG 上,利用 0B800H 设置彩色适配器的单色显示缓冲区,在黑色的屏幕上显示光标轨迹,画城墙、水平线等图,光标的移动受键盘上光标键的控制,如果键入 ESCape 键,则程序结束,返回 DOS,其中 UP DOWN RIGHT LEFT ESC 的运动受 ASCII 码控制燕山大学本科生课程设计报告1目 录课设一第 1

2、章 绪论 .41. 课题背景.4第 2 章课程设计 .42.1、课题设计目的.42.2、课题设计内容.42.3、课题中使用的关键技术及方法.42.3.1、位触发.4.2.3.2、扬声器驱动.52.3.3、乐曲构成.6第 3 章、设计步骤 63.1、设计思路 .63.2 程序流程图 .63.3、关键代码段实现与分析 .7第 4 章、设计测试与结果 .94.1 测试 .94.2.结果 .9附件.10.课设二第 1 章、绪论14燕山大学本科生课程设计报告21.课题背景14.第 2 章、课程设计142.1、课题设计目的.14.2.2、课题设计内容.142.3、课题中使用的关键技术及方法.142.3.1

3、、定时器14第 3 章、设计步骤 .153.1、设计思路 .153.2 程序电路图 .15附件(程序段).16参考文献22燕山大学本科生课程设计报告3第 1 章 绪论1.1、课题背景完成了汇编语言程序设计的 4 个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。第 2 章2.1、课程设计目的利用汇编学到的语言与接口知识,外加对计算机内部芯片的了解及音乐的一些知识完成用位触发编写两只老虎的乐曲。2.2、课程设计要求程序能在屏幕上画出光标移动的轨迹,画城墙、水平线等图。光标的移动受键盘上光标键的控制,如果键入 ESCape 键,则程序结束,返回 DOS2.3、课题中使用的关键技术

4、及方法ROM BIOS 中有个 BEEP 子程序,这能根据 BL 种组出的时间计数值控制 8253 定时器,我们可以通过修改 BEEP,使其产生任一声音,并且可以调整声音的持续时间。发声程序包括 3 个步骤:1)在 8253 中的 42 端口送入一个控制字 0B6,该控制字对定时器 2 进行初始化,使定时器 2 准备接收计数值。2)在 8253 中的端口 42h 装入一个 16 位的计数值(533H*895/频率),以建立将要产生的声音频率。3)把输出端口 61H 的 PB0、PB1 置 1,发出声音。2.3.1、位触发程序直接控制 PPI(8255)的输出控制器(61H)的第一位,使该位频率

5、按照 1 和 0 交替变化,从而控制开关电路产生一串波形,这些波形放大后驱动扬声器发声,控制波形的脉宽和长度就可以产生不用频率不同时间的声音。扬声器发声通用子程序 CFSOUND(网上查阅):Cfsound proc near燕山大学本科生课程设计报告4Push dxPush ax 保存将要用到的寄存器In al,61hMov ah,alAnd al,11111100h 关断定时器 2 的门控Sound:xor al,2 触发 61h 端口第 1 位Out 61h,alMov ax,2801Mov bx,50Mul bxDiv cx (cx)=freqMov dx,ax (dx)=控制脉宽的计

6、数值Wait: loop waitMov ax,8Mu bxMov bx,ax (bx)=扩大 8 倍的节拍计时器Dec bx (bx)=脉冲持续的时间Jnz soundPop axPop dx 恢复寄存器MOV al,ahOut 61h,al 写回 61h 口的庋,关闭扬声器RetCfsound endp2.3.2、扬声器驱动Pc 机上的大多数 I/O 都是由主办上的 8255 可编程接口芯片 PPI 管理的。PPI 包括 8 个寄存器,2 个输入,1 个输出。输入寄存器分配的 I/O 为 60H和 62H,输出为 61H。由 PPI 输出寄存器中的 0 和 1 两位来控制扬声器的驱动方式。

7、连接到扬声器的是定时器 2.GATE2 与端口 61H 的 PB0,当 PB0=1时,定时器 2 可以在模式 3 下工作。定时器 2 的 OUT2 与端口 61H 的 PBI与扬声器驱动电路相连。当 PBI=1 时,允许 OUT2 输出信号到达扬声器。控制扬声器的代码:In al,16hMov ah,alOr al,03Out 61h,alMov al,ah燕山大学本科生课程设计报告5Out 61h,al2.3.3、乐曲构成乐曲是按照一定的高低、长短和强弱关系组成的已调,每个音符的音高和音长与频率和节拍有关。中高与频率如下表1 2 3 4 5 6 7262 294 330 349 392 22

8、0 494第 3 章3.1、设计思路编写这个乐曲程序可分为四个步骤1)定义频率表和时间表根据音阶表和简谱为演奏的乐曲定义了一个频率表 FREQ 和一个节拍时间表 TIME。2)将两个表的偏移地址放入 SI 和 DILEA SI,MUS_FREQLEA BP,DS:MUS_TIME3)取频率和时间MOV di,si4)调用 SOUND 子程序发出音调3.2、程序流程图燕山大学本科生课程设计报告63.3、关键代码段实现与分析1.程序段说明1)datas 为数据段,其中存放在程序中的所要显示的选择信息,还有乐曲的频率表和节拍表和键盘控制发声对应的音符表。2)CODES 代码段,由于在整个程序中各个子

9、程序都定义为 NEAR,所以只需要一个代码段,各个子程序的定义及实现都放在其中。2.乐曲演奏程序的实现及分析燕山大学本科生课程设计报告7播放音乐的子程序完成的功能是通过 SI(频率表的偏移地址)BP(节拍表的偏移地址)(通过主程序传来的参数)找到对应的频率(DI)、节拍(BX)外加 DI,BX 为参数调用 SOUNDF 子程序发声。关键代码:FREQ:Mov di,siCmp di,-1Je end_musicCall sound ;以 DI(频率)、BX(节拍)为参数,add si,2 调用 soundadd bp,2jmp freqsi,bp 是频率表和节拍表的偏移地址,通过寄存器间接寻址

10、方式找到数据段中定义数据,传递给 BX、DI,然后调用 SOUND 发出一个频率为DI,节拍为 BX 的声音注意:在频率表中应该设置一个结束标志,“CMP DI,-1”,这里以-1 为结束标志。2.SOUNDF 通用程序的实现与分析SOUNDF 为传递过来的频率和节拍数,发出一个音符的频率的子程序。关键代码分析:Mov al,0b6hOut 43h,al置 43H 为 0B6H,选择计数器 2,读/写 LSB,MSB,模式 3,计数值为 2 进制Mov dx,12hMov ax,348chDiv di按照公式计数值=12348Cf,商存在 ax 中Out 42h,alMov al,ahOut

11、42h,al8253 的数据总线为 8 位,而计数值为 16 位,所以分两次传递计数值。In al,61hMov ah,alOr al,3Out 61h,al用 WAITF 产生一个 10MS 的延时,BX 是节拍(10ms 的倍数)Mov al,ahOut 61h,al燕山大学本科生课程设计报告8恢复寄存器状态4.WAITF 延迟程序的实现与分析WAITF 为通过监控口 61H 的 PB4 固定不变的触发时间来产生延迟时间的子程序。关键代码分析:Mov cx,663Waitf1:In al,61hAnd al,10h ;查看 61h 寄存器的第四位(PB4)Cmp al,ahJe waitf

12、 ;PB4 每 15.8 秒发声一次Mov ah,alMOV ah,alLoop waitf1第 4 章、设计测试与结果4.1、测试在 TDDEBUG 中进行了调试并改正了其中的错误。4.2、结果燕山大学本科生课程设计报告9附件:datas segmentmessg1 dbWELCOME COME HERE!,$messg2 dbplay the two tigers?y/n,$messg3 db two tigers,$messg4 db the rythm is like this:,$messg5 db 1 2 3 1|1 2 3 1|3 4 5 -|,$messg6 db 3 4 5

13、-|56 54 3 1|56 54 3 1|,$messg7 db 2 5 1 -|2 5 1 -|,$ ;显示字符messg1-7 定义 musfreq dw 2 dup (262,294,330,262)dw 2 dup (330,349,392) dw 2 dup (392,440,392,349,330,262)dw 2 dup (294,196,262),-1 ;musfreq 是音符频率表的首地址,-1 用来做结束标志 mustime dw 8 dup (100)dw 2 dup (100,100,200)dw 2 dup (4 dup (50),100,100)dw 2 dup

14、(100,100,200) ;mustime 是音符的持续时长表首地址 datas endsstacks segment para stack stackdb 64 dup (stack.)stacks endscodes segmentassume cs:codes,ds:datasmain proc far燕山大学本科生课程设计报告10start:push ds ;保存将要用到的寄存器 ds sub ax,ax push ax ; 保存将要用到的寄存器 axmov ax,datasmov ds,axlea dx,messg1mov ah,09hint 21hcall crlfcall cr

15、lf ;2 号输出子程序crlf lea dx,messg2mov ah,09hint 21h ;输出字符串messg1、messg2 mov ah,1int 21h ;1 号单字符输入 cmp al,4eh jz end_muscall instruction ;instruction 是输出 messg3-7 的子程序lea si,musfreqlea bp,ds:mustimefreq:mov di,sicmp di,-1je end_musmov bx,ds:bpcall soundfadd si,2add bp,2jmp freqend_mus:mov al,48hout 61h,a

16、l燕山大学本科生课程设计报告11ret ;调用音频的子程序块main endpsoundf proc near ;发声程序块mov al,0b6h ;在 8253 的 42 端口送入 0b6 对计时器 2 进行初始化 out 43h,almov dx,12hmov ax,348chdiv di ;用端口号*896/freq 产生任一频率 out 42h,almov al,ahout 42h,alin al,61h mov ah,alor al,3out 61h,al ;打开扬声器 wait1:mov cx,663*5call waitf ;dec bxjnz wait1mov al,ahout

17、 61h,al ;关闭扬声器 retsoundf endpwaitf proc nearpush axwaitf1:in al,61hand al,10hcmp al,ahje waitf1mov ah,alloop waitf1 ;检测音频变化pop axwaitf endpinstruction proc near燕山大学本科生课程设计报告12lea dx,messg3mov ah,09hint 21h call crlf lea dx,messg4mov ah,09hint 21hcall crlflea dx,messg5mov ah,09hint 21hcall crlflea dx

18、,messg6mov ah,09hint 21hcall crlflea dx,messg7mov ah,09hint 21hcall crlfinstruction endp ;边唱边显示 messg3-7 子程序块crlf proc nearmov dl,13 ;13:DC3(设备控制 3)mov ah,2int 21hmov dl,10 ;10:DLE(数据链换码)mov ah,2int 21hretcrlf endp ;codes endsend start第 1 章1.课题背景燕山大学本科生课程设计报告13在汇编接口实验的基础上,利用定时器产生声音的方法编写程序,使 PC 机奏出两只

19、老虎的乐曲。第 2 章2.1、课题设计目的利用汇编学到的语言与接口知识,外加对试验箱里内部芯片的了解及音乐的一些知识完成用定时器编写两只老虎的乐曲。2.2、课题设计内容利用定时器产生声音的方法编写程序,使 PC 机奏出两只老虎的乐曲。提示:(1)乐谱中的每个音符具有音高和音长两种属性,按照乐谱将每个音符的频率和节拍定义成两个数据表,程序从频率表中取出一个音符的频率值以产生一定音高的声音,同时取出相应的节拍计数值以控制这一频率的声音延长的时间。(2)每个音符的频率值 Freq 经过转换后送入定时器的 42H 端口,以产生相应频率的脉冲。转换的公式为:533H896Freq123280HFreq(

20、或是 12348CHFreq)(3)节拍时间表中存放的计数值是音长的 110,如 2 拍的音长定为 0.5 秒,对应的计数值应为 50,l 拍的音长是 0.25 秒,对应的计数值应为 25。然后控制 LOOP 指令反复执行 2800n 次来取得音符的延长时间(n 为音长所对应的计数值)。(4)乐曲演奏完后,同样要完成对 6lH 端口的复位操作以避免死机。10ms 延迟时间指令:WAIT: MOV CX, 2800DELAY: LOOP DELAY2.3、课题中使用的关键技术及方法2.3.1、定时器(书上查阅)利用机器硬件即 INTEL8253/8254 定时器产生声音的一种方法。CPU 通过对

21、定时器的通道 2(端口地址 42H)进行编程,使其 I/O寄存器接收一个控制声音频率的 16 位计数值,端口 61H 的最低位控制通道 2 门控的开断,以产生特殊的音响。当定时器接收的计数值为 533H 时,能产生 896Hz 的声音,因此产生其他频率(freq)的计数值就可以由:533H896/freq=1234dc/freq在送出频率计数值之前,还要给方式寄存器(端口其值为 43H)送一个方式值,也称为幻数。这个幻数由 8 为组成即D7,D6,D5,D4,D3,D2,D1,D0 选选择计数值的格式,1 为 BCD 码格式,燕山大学本科生课程设计报告140 为二进制格式。D3,D2D1 选择

22、操作模式,它决定了输出脉冲的形状。D5,D4 读写指示位。D7,D6 选择计数器,确定控制字是对哪一个计数器进行初始化。利用定时器产生声音的程序段:Mov al,10110110b 为组合格式:通道 2,2 字节技术,模式 3,2 进制码Out 43h,al 幻数送方式寄存器Mov dx,12hMov ax,34dchDiv di (di)=freqOut 42h,al 频率计数值送通道 2Mov al,ahOut 42h,al控制音长的时间可以简单的通过反复循环指令来实现。我们已经执行了 2800 次 LOOP 指令约需要 10ms 的倍数值来控制扬声器开关的时间间隔,就可以控制音长。具体的

23、指令如下:10ms 延迟时间指令:WAIT: MOV CX, 2800DELAY: LOOP DELAY第 3 章、设计步骤3.1、设计思路1. 查阅定时器方法所使用的硬件的性能及使用方法2. 编写代码3. 纠错处理4. 运行3.2 程序电路图燕山大学本科生课程设计报告15附件:IOY3 EQU 06C0HMY8254_COUNT0 EQU IOY3+00H ;8254 计数器 0 端口地址MY8254_MODE EQU IOY3+06H ;8254 控制寄存器端口地址DATA SEGMENT DATA1 DB 0DH,0AH,please select ONE music!$DATA2 DB

24、 0DH,0AH,input error,repeat!$DATA3 DB 0DH,0AH,ok,listen!$DATA4 DB 0DH,0AH,press c to continue!DB 0DH,0AH,$PLAYLIST DB 0DH,0AH,1 two tigers,DB 0DH,0AH,2 fenshuajiang,DB 0DH,0AH,K kuaifang DB 0DH,0AH,M manfang DB 0DH,0AH,Z zheng_chang DB 0DH,0AH,Q EXIT DB 0DH,0AH,$MUS_FREG1 DW 2 dup(262,294,330,262) ;

25、两只老虎频率表DW 2 dup(330,349,392)DW 2 dup(392,440,392,349,330,262)DW 2 dup(294,196,262),-1MUS_TIME1 DW 8 dup(8) ;两只老虎时间表燕山大学本科生课程设计报告16DW 2 dup(8,8,16) DW 2 dup(4,4,4,4,8,8) DW 2 dup(8,8,16) MUS_FREG2 DW 392,330,392,330,392,330,262,294,349,330,294,392DW 392,330,392,330,392,330,262,294,349,330,294,262DW 2

26、94,294,349,349,330,262,392DW 294,349,330,294,392DW 392,330,392,330,392,330,262 DW 294,349,330,294,262,-1 ;粉刷匠频率表MUS_TIME2 DW 2 dup(4,4,4,4,4,4,8,4,4,4,4,16)DW 4,4,4,4,4,4,8DW 4,4,4,4,16DW 4,4,4,4,16 ;粉刷匠时间表DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART: MOV AX,DATA ;数据段装入段寄存器 DSMOV DS,AXMOV BX,0 T

27、OOUT macro aLEA DX,aMOV AH,09hINT 21Hendm ;显示字符串的宏if_error: TOOUT DATA1 TOOUT PLAYLIST INPUT: MOV AL,11H ;控制字 选择计数器 0,读取低八位,方式 0,二-十进制MOV DX,MY8254_MODEOUT DX,AL MOV AL,1 ;输入一个电平MOV DX,MY8254_COUNT0OUT DX,AL MOV AH,01H ;键盘输入字符并回显INT 21HCMP AL,Q燕山大学本科生课程设计报告17JZ exit ;退出CMP AL,pJZ pause ;暂停CMP AL,KJZ

28、 kuai_fang ;快放CMP AL,MJZ man_fang ;慢放CMP AL,ZJZ zheng_chang ;正常放CMP AL,1JZ again1CMP AL,2JZ again2error: TOOUT DATA2 ;宏调用,输入错误,重新输入 JMP if_errorkuai_fang:MOV BX,1JMP SOUNDman_fang: MOV BX,-1JMP SOUNDzheng_chang: MOV BX,0JMP SOUNDpause: TOOUT DATA3TOOUT DATA4MOV AH,01H ;键盘输入字符并回显INT 21HCMP AL,C ;继续JZ

29、 continue JMP INPUTcontinue:MOV DX,MY8254_MODE ;初始化 8254 工作方式MOV AL,36H ;定时器 0、方式 3(方波发生器/分频器)、二进制OUT DX,ALJMP SOUND燕山大学本科生课程设计报告18again1: MOV DX,MY8254_MODE ;初始化 8254 工作方式MOV AL,36H ;定时器 0、方式 3(方波发生器/分频器)、二进制OUT DX,ALCALL MUSIC1again2: MOV DX,MY8254_MODE ;初始化 8254 工作方式MOV AL,36H ;定时器 0、方式 3(方波发生器/分

30、频器)、二进制OUT DX,ALCALL MUSIC2exit: MOV AH,4CH INT 21HMUSIC1 PROC MOV SI,OFFSET MUS_FREG1 ;装入频率表起始地址MOV DI,OFFSET MUS_TIME1 ;装入时间表起始地址CALL PLAYJMP again1RETMUSIC1 ENDPMUSIC2 PROC MOV SI,OFFSET MUS_FREG2 ;装入频率表起始地址MOV DI,OFFSET MUS_TIME2 ;装入时间表起始地址CALL PLAYJMP again2RETMUSIC2 ENDPPLAY PROCMOV AH,1INT 16

31、H ;类型 16H 提供基本键盘操作(01 读键盘缓冲区到 AL 中) JZ SOUNDshow MUSLIST JMP inputSOUND:MOV DX,12H ;输入时钟为 1234dch HzMOV AX,34DCH DIV WORD PTR SI;取出频率值计算计数初值,MOV DX,MY8254_COUNT0OUT DX,AL ;装入计数初值燕山大学本科生课程设计报告19MOV AL,AHOUT DX,ALMOV DL,DI ;取出演奏相对时间,调用延时子程序 CMP BX,0JE L1JG L2CALL DELAY_MJMP L3L1:CALL DELAYJMP L3L2:CAL

32、L DELAY_KJMP L3L3:ADD SI,2ADD DI,2CMP WORD PTR SI,-1 ;判断是否到曲末JE END_MUSCALL PLAYEND_MUS:RETPLAY ENDPDELAY PROC ;延时子程序D0: MOV CX,35535D1: LOOP D1DEC DLJNZ D0RETDELAY ENDPDELAY_K PROC ;延时子程序D2: MOV CX,20535D3: LOOP D3DEC DLJNZ D2RETDELAY_K ENDPDELAY_M PROC ;延时子程序D4: MOV CX,60535D5: LOOP D5DEC DLJNZ D4燕山大学本科生课程设计报告20RETDELAY_M ENDPCODE ENDSEND START六、参考文献燕山大学本科生课程设计报告21IBM-PC 汇编语言程序设计实验教程IBM-PC 汇编语言程序设计汇编语言与接口技术

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报