汇编课程设计高杰.docx
- 文档编号:30314570
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:18
- 大小:229.32KB
汇编课程设计高杰.docx
《汇编课程设计高杰.docx》由会员分享,可在线阅读,更多相关《汇编课程设计高杰.docx(18页珍藏版)》请在冰豆网上搜索。
汇编课程设计高杰
汇编课程设计高杰
[键入文档标题]
姓名:
高杰
学号:
110104010133
班级:
计算机应用3班
指导教师:
张忠平何海涛
日期:
2014年7月10日
一、课程设计的目的和意义
1.1课程设计目的
1.进一步了解汇编语言指令的功能和用法。
2.进一步了解汇编接口的功能和用法。
3.了解用汇编语言实现声音的编程。
1.2课程设计的意义
本次课程设计,给同学们一个把理论知识转化为实际动手能力的机会,使同学们能够更深入的理解汇编语言,掌握汇编语言指令的用法,掌握8255、8253接口的功能和控制方法。
本次课程设计的题目难度适中,既可以培养同学们的自信心又可以锻炼同学们解决困难的能力。
二、设计题目
2.1乐曲程序
2.1.1设计要求
利用定时器产生声音的方法编写程序,使PC机奏出《两只老虎》的乐曲。
2.1.2设计原理
1.乐谱中的每个音符有音高和音长两种属性,按照乐谱把每个音符的频率和节拍定义成两个数据表,程序从频率表中取出一个音符的频率值,以产生一定音高的声音,同时取出相应的节拍计数值控制这一频率的声音延长的时间。
图1两只老虎乐谱
音阶
1
2
3
4
5
6
7
对应频率
262
294
330
349
392
440
494
图2音阶
2.每个音符的频率值Freq经过转化后送入定时器的42H端口,以产生相应频率的脉冲。
转换的公式为:
533H*896/Freq=123280H/freq
MUS_FREG1DW2dup(262,294,330,262);频率表
DW2dup(330,349,392)
DW2dup(392,440,392,349,330,262)
DW2dup(294,196,262),-1
3.节拍时间表中存放的计数值是音长的1/10,如2拍的音长定为0.5秒,对应的计数值应为50;一拍的音长是0.25秒,对应的计数值应为25.然后控制100p指令反复执行2801*n次来取得音符的延长时间(n为音长所对应的计数值)
10ms延迟时间指令:
D1:
MOVCX,2801
D0:
LOOPD0
TIMEDW8dup(100);时间表
DW2dup(100,100,200)
DW2dup(50,50,50,50,100,100)
DW2dup(100,100,200)
4.8254是可编程间隔定时器。
为8253的改进型,比8253具有更优良的性能。
8254具有一些基本功能:
1.有三个独立的16位计数器;
2.二进制可按二进制或十进制计数;
3.工作于6种不同的工作方式;
4.有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容;
5.计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值如下:
其中fclki是输入脉冲的频率fouti,n=fclki/fouti
8254的工作方式如下:
∙方式0:
计数到0结束输出正跃变信号方式。
∙方式1:
硬件可重触发单稳方式。
∙方式2:
频率发生器方式。
∙方式3:
方波发生器。
∙方式4:
软件触发选通方式。
∙方式5:
硬件触发选通方式。
本实验采用计数器0产生基本时钟,选择方式3(方波发生器),初值为0,也就是最大的65536,则其方波的输出频率1.193MHZ/65536=18.2
8254的方式控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
计数器选择
读写格式选择
工作方式选择
计数码制选择
∙计数器0
∙计数器1
10-计数器2
11-读出控制字标志
00-锁存计数值
01-读/写低八位
10-读/写高八位
11-先读/写低八位、再读/写高八位
000-方式0
001-方式1
010-方式2
011-方式3
100-方式4
101-方式5
0-二进制数
1-十进制数
8254读出控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0-锁存计数值
0-锁存状态信息
计数器选择(同方式控制字)
0
2.1.3电路连接图
2.2光标轨迹程序draw
2.2.1设计要求
程序在屏幕上画出光标移动的轨迹,画城墙、水平线等图,光标的移动受键盘上的方向键控。
如果输入ESC键,则程序结束,返回DOS
2.2.2设计原理
PC机的视频系统都有用于反映屏幕图像数据的缓冲区,通过扫描缓冲区中的数据,在屏幕上显示相应的字符或图形,对不同的适配器,显示缓冲区的大小和在内存中的位置不同。
对彩色适配器有16k字节的容量,内存起始地址为B800:
0000,以常规的RAM作为缓冲区,在BIOS初始化系统时,现有存储容量的前16K被定义为显示缓冲区。
存储器总共分配了4000个字节,对应屏幕上2000个字符位置(25行*80列),每个字符位置对应2个字节,其中低字节内是ASCII码,高字节是字符显示特性的信息。
在文本方式下,屏幕上的字符位置对应的显示缓冲区的偏移地址为:
行号(0~24)*160+列号(0~79)*2
2.2.3程序流程图
N
Y
N
N
Y
N
Y
N
YN
YN
Y
N
YN
三、程序代码
3.1题目一代码
MY8254_COUNT0EQU06C0H;8254计数器0端口地址
MY8254_MODEEQU06C6H;8254控制寄存器端口地址
DATASEGMENT
ERRORMDB0DH,0AH,'INPUTERROR!
$'
CONLISTDB0DH,0AH,'QEXIT,SSTART,PPAUSE'
DB0DH,0AH,'$'
PMESSAGEDB0DH,0AH,'PRESSSTOSTART'
DB0DH,0AH,'$'
FREGDW2dup(262,294,330,262);频率表
DW2dup(330,349,392)
DW2dup(392,440,392,349,330,262)
DW2dup(294,196,262),-1
TIMEDW8dup(100);时间表
DW2dup(100,100,200)
DW2dup(50,50,50,50,100,100)
DW2dup(100,100,200)
PAUSEMESSAGEDB0DH,0AH,'PRESSpTORESTART'
DB0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
START:
MOVAX,DATA;数据段装入段寄存器DS
MOVDS,AX
SHOWMACROA
LEADX,A
MOVAH,09h
INT21H
ENDM
INPUT:
SHOWCONLIST
INPUT1:
MOVAH,01H;键盘输入字符并回显
INT21H
CMPAL,'Q'
JZEXIT;退出
CMPAL,'q'
JZEXIT
CMPAL,'S'
JZMSTART
CMPAL,'s'
JZMSTART
CMPAL,'P'
JZPAUSE
CMPAL,'p'
JZPAUSE
JNZINPUTERROR
INPUTERROR:
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,11H;定时器0、方式0
OUTDX,AL
MOVAL,0
MOVDX,MY8254_COUNT0
OUTDX,AL
SHOWERRORM;宏调用,输入错误,重新输入
JMPINPUT
MSTART:
CALLMUSIC
ENDPAUSE:
CALLMUSIC1
PAUSE:
MOVDX,MY8254_MODE
MOVAL,11H
OUTDX,AL
MOVAL,0
MOVDX,MY8254_COUNT0
OUTDX,AL
SHOWPAUSEMESSAGE
MOVAH,01H
INT21H
CMPAL,'P'
JZENDPAUSE
CMPAL,'p'
JZENDPAUSE
JNZINPUTERROR
EXIT:
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,11H;定时器0、方式3
OUTDX,AL
MOVAL,0
MOVDX,MY8254_COUNT0
OUTDX,AL;装入计值
MOVAH,4CH
INT21H
MUSICPROC
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,36H;定时器0、方式3
OUTDX,AL
MOVSI,OFFSETFREG;装入频率表起始地址
MOVDI,OFFSETTIME;装入时间表起始地址
JMPPLAY
RET
MUSICENDP
MUSIC1PROC
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,36H;定时器0、方式3
OUTDX,AL
JMPPLAY
RET
MUSIC1ENDP
PLAY:
MOVAH,1
INT16H
JZSOUND
JMPINPUT1
SOUND:
MOVDX,0FH;输入时钟为1MHz,1M=0F4240H
MOVAX,4240H
DIVWORDPTR[SI]
MOVDX,MY8254_COUNT0
OUTDX,AL;装入计数初值
MOVAL,AH
OUTDX,AL
MOVDL,[DI];取出演奏相对时间,调用延时子程序
CALLDELAY
ADDSI,2
ADDDI,2
CMPWORDPTR[SI],-1;判断是否到曲末?
JZMSTART
JMPPLAY
DELAYPROC;延时子程序
D1:
MOVCX,2801
D0:
LOOPD0
DECDL
JNZD1
RET
DELAYENDP
CODEENDS
ENDSTART
3.2题目二代码
DATASEGMENT
UPEQU48H;键盘扫描码
DOWNEQU50H
RIGHTEQU4DH
LEFTEQU4BH
BLOCKEQU0DBH
ESCEQU1BH;ASCII码
CLEAR1EQU43H
DATAENDS
VIDEOSEGMENTAT0B800H
WDBUFFLABELWORD
VBUFFDB25*80*2DUP(?
)
VIDEOENDS
CODESEGMENT
ASSUMECS:
CODE,ES:
VIDEO
START:
MOVAH,0
MOVAL,03H
INT10H
XORAX,AX
MOVAX,VIDEO
MOVES,AX
MOVCX,80*25
MOVBX,0
CLEAR:
MOVES:
[WDBUFF+BX],0700H
ADDBX,2
LOOPCLEAR
MOVCH,12D
MOVCL,39D
GETCHAR:
MOVAH,0
INT16H
CMPAL,ESC
JZEXIT
CMPAL,CLEAR1
MOVAL,AH
JZSTART
JMPNOTEXIT
EXIT:
MOVAH,4CH
INT21H
NOTEXIT:
CMPAL,UP
JNZNOTUP
DECCH
CMPCH,0
JLUPBJ
JMPLITE
UPBJ:
MOVCH,24D
INCCL
CMPCL,79D
JGKEEP1
JMPLITE
KEEP1:
MOVCH,0
MOVCL,79D
JMPGETCHAR
NOTUP:
CMPAL,DOWN
JNZNOTDOWN
INCCH
CMPCH,24D
JGDOWNBJ
JMPLITE
DOWNBJ:
MOVCH,0
DECCL
CMPCL,0
JLKEEP2
JMPLITE
KEEP2:
MOVCL,0
MOVCH,24D
JMPGETCHAR
NOTDOWN:
CMPAL,RIGHT
JNZNOTRIGHT
INCCL
CMPCL,79D
JGRIGHTBJ
JMPLITE
RIGHTBJ:
INCCH
CMPCH,24D
JGKEEP3
MOVCL,0
JMPLITE
KEEP3:
MOVCH,24D
MOVCL,79D
JMPGETCHAR
NOTRIGHT:
CMPAL,LEFT
JNZLITE
DECCL
CMPCL,0
JLLEFTBJ
JMPLITE
LEFTBJ:
DECCH
CMPCH,0
JLKEEP4
MOVCL,79D
JMPLITE
KEEP4:
MOVCL,0
MOVCH,0
JMPGETCHAR
LITE:
MOVAL,160D
MULCH
MOVBL,CL
SALBL,1
MOVBH,0
ADDBX,AX
MOVAL,BLOCK
MOVES:
[VBUFF+BX],AL
JMPGETCHAR
CODEENDS
ENDSTART
四、程序运行结果
4.1题目一运行结果
编译并连接程序,打开实验箱,按电路图连线,加载并运行程序,按s键,演奏出两只老虎乐曲;按p键乐曲停止,再按p键继续播放;按q键演奏停止并退出。
4.2题目二运行结果
运行TDDEBUG程序,编译并连接程序,然后执行,出现以下结果。
(1)直线:
(2)城墙线
五、心得体会
这次汇编语言与接口技术课程设计充分锻炼我们的动手能力和思考问题的能力,通过此次实验我加深了对8254定时计数器和汇编语言的了解。
不仅如此,这次课程设计让我对软件和硬件的协同工作有了一个更加深刻的了解,知道了如何通过编码来控制硬件的工作,这次课程设计让我积累了相关方面的专业知识,对以后的工作学习有着借鉴作用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 课程设计