分支结构实验报告.docx
《分支结构实验报告.docx》由会员分享,可在线阅读,更多相关《分支结构实验报告.docx(11页珍藏版)》请在冰点文库上搜索。
分支结构实验报告
天津大学
<<汇编语言程序设计>>课程设计
学院:
职业技术教育学院
学号:
3008212012
姓名:
黄立宁
班级:
1
指导教师:
谢永超
2010-4-26
内容简介
本程序为利用q、w、e、r、t、y、u、1-7作演奏音符制任意音乐的程序。
该程序能记录所演奏的音乐,能回放所演奏的音乐。
运行过程中,通过屏幕上显示的音符,输入一个不同的数发出不同的音调,即制作出不同的音乐。
每输入一数,屏幕上音符及提示闪烁一次,当输入数为9时,终止音乐的制作,将之前的音乐存入堆栈中,随后送入端口地址,即演奏出刚刚制作的音乐。
成绩:
教师签字:
目录
开发环境………………………………………………………………1
功能描述…………………………………………………………1
系统功能结构框图…………………………………………….2
程序代码……………………………………………………3
运行结果………………………………………………………11
课程设计体会…………………………………………………………12
参考文献…………………………………………………………13
题目:
键盘控制发声程序
----电子琴
一、开发环境
1.硬件环境
微型计算机一台
2.软件环境
WindowsXP操作系统
使用工具MASM5.0,要进行汇编语言的编辑和运行,需要以下工作环境:
⑴编辑程序,如EDIT.EXE、WORD
⑵汇编程序,如MASM.EXE
⑶连接程序,如LINK.EXE
⑷调试程序,如DEBUG.EXE
二、功能描述
利用q、w、e、r、t、y、u、1-7作演奏音符制任意音乐的程序。
该程序能记录所演奏的音乐,能回放所演奏的音乐。
运行过程中,通过屏幕上显示的音符,输入一个不同的数发出不同的音调,即制作出不同的音乐。
每输入一数,屏幕上音符及提示闪烁一次,当输入数为9时,终止音乐的制作,将之前的音乐存入堆栈中,随后送入端口地址,即演奏出刚刚制作的音乐。
三、系统功能结构图
(续上图):
四、程序代码
;利用q、w、e、r、t、y、u、1-7演奏音符的程序,能记录所演奏的音乐,能回放所演奏的音乐
;**********************************************************
DATASEGMENT
msgDB0DH,0AH,''
DB0DH,0AH,'[1234567]'
DB0DH,0AH,'[qwertyu]'
DB0DH,0AH,'_________________'
DB0DH,0AH,''
DB0DH,0AH,''
DB0DH,0AH,'*************************************'
DB0DH,0AH,'NOTICE'
DB0DH,0AH,'Press1-7tomakemusicandplayit.'
DB0DH,0AH,'Press9tointerrupt.'
DB0DH,0AH,'********************************','$'
;音调(后面用到-1判断音乐播是否放完)
sound_0DW-1
sound_11DW441,-1
sound_12DW495,-1
sound_13DW556,-1
sound_14DW589,-1
sound_15DW661,-1
sound_16DW742,-1
sound_17DW833,-1
sound_1DW882,-1
sound_2DW990,-1
sound_3DW1112,-1
sound_4DW1178,-1
sound_5DW1322,-1
sound_6DW1484,-1
sound_7DW1655,-1
timeDW25
DATAENDS
;**********************************************************
STACKSEGMENT
Db200DUP('STACK');将音符放入堆栈中
STACKENDS
;**********************************************************
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE;段说明
START:
MOVAX,DATA
MOVDS,AX
MOVaH,00;初始化显示方式
MOVAL,00
INT10H
;------------------定义一个显示宏
SHOWMACROb
LEADX,b
MOVAH,9;将以"$"结尾的字符串显示在屏幕上,并将入口参数字符串的首地址的段基址和偏移地址分别放入DS和DX中
INT21H
ENDM
;------------------定义一个声音宏
onesoundmacrosoundis,jumpis,letteris
CMPAL,letteris
JNZjumpis
LEASI,soundis
LEABP,DS:
time
CALLMUSIC
JMPinput
ENDM
;--------------------
showmsg;显示音符和提示
;--------------------
INPUT:
MOVAH,01H
INT21H;从键盘输入一个字符并显示
CMPAL,'9'
jnzgo
movah,4ch;若输入9则返回DOS,终止制作音乐
int21h
go:
onesoundsound_11,a0,'q'
a0:
onesoundsound_12,b0,'w'
b0:
onesoundsound_13,c0,'e'
c0:
onesoundsound_14,d0,'r'
d0:
onesoundsound_15,e0,'t'
e0:
onesoundsound_16,f0,'y'
f0:
onesoundsound_17,g0,'u'
g0:
onesoundsound_1,h0,'1'
h0:
onesoundsound_2,i0,'2'
i0:
onesoundsound_3,j0,'3'
j0:
onesoundsound_4,k0,'4'
k0:
onesoundsound_5,l0,'5'
l0:
onesoundsound_6,m0,'6'
m0:
onesoundsound_7,n0,'7'
n0:
onesoundsound_0,o0,al
o0:
jmpinput
;---------------------发声(将堆栈中的音符数据送到端口地址)
GENSOUNDPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
;时间间隔定时器(计数器2的初始化过程)
MOVAL,0B6H
OUT43H,AL;给公用的控制寄存器(地址为43H)赋值
MOVDX,12H
MOVAX,348ch;频率除数
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H;扬声器驱动(61H为输出寄存器分配I/O端口号)
MOVAH,AL
ORAL,3
OUT61H,AL;打开扬声器
WAIT1:
MOVCX,3314;等待下一音符的到来
callwaitf
DELAY1:
DECBX;声音的延迟
JNZWAIT1
MOVAL,AH;关闭扬声器
OUT61H,AL
POPDI
POPDX
POPCX
POPBX
POPAX
RET
GENSOUNDENDP
;*******************************
waitfprocnear
pushax
waitf1:
inal,61h
andal,10h
cmpal,ah
jewaitf1
movah,al
loopwaitf1;CX=0时退出循环,继续键入音符制作音乐
popax
ret
waitfendp
;******************************
MUSICPROCNEAR
PUSHDS
SUBAX,AX
PUSHAX
FREG:
MOVDI,[SI]
CMPDI,-1;音乐是否放完
JEEND_MUS
MOVBX,DS:
[BP];将音符放入堆栈
CALLGENSOUND;调发声子程序
ADDSI,2
ADDBP,2
JMPFREG
END_MUS:
RET
MUSICENDP
CODEENDS
;*******************************
ENDSTART
五、运行结果
图1生成OBJ文件
图2生成EXE文件
图3运行结果
六、课程设计体会
这次课程设计使我对汇编语言有了更进一步的了解和熟悉,实际操作编写程序,并使之能在计算机上正确运行真的有点困难。
平时觉得只要把课本上的知识学会就好了,没想到一付诸实际就全没了头脑。
课程设计只是书本上知识的灵活运用,与所学的有相当大的联系,但又高于所学的。
一个看似简单的题目,要动手把它设计出来就十分困难。
所以以后要注意把从课本上所学到的知识与实际联系起来,灵活运用,举一反三。
同时通过本次汇编语言程序的课程设计,我学到了许多课上老师没讲到的知识,开拓了我的眼界。
课程设计不但让我巩固了所学知识,也使我把理论与实际从真正意义上结合起来,更重要的是增强了学习的兴趣,培养了我们借助互联网络搜集、查阅相关文献资料和组织材料的综合学习能力。
七、参考文献
[1]沈美明、温冬蝉编,IBM-PC汇编语言程序设计,北京:
清华大学出版社,2001.
[2]网址: