《汇编语言》课程设计用汇编语言进行音乐动画功能的实现.docx
- 文档编号:14919064
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:25
- 大小:114.88KB
《汇编语言》课程设计用汇编语言进行音乐动画功能的实现.docx
《《汇编语言》课程设计用汇编语言进行音乐动画功能的实现.docx》由会员分享,可在线阅读,更多相关《《汇编语言》课程设计用汇编语言进行音乐动画功能的实现.docx(25页珍藏版)》请在冰点文库上搜索。
《汇编语言》课程设计用汇编语言进行音乐动画功能的实现
《汇编语言》课程设计
一、设计题目
用汇编语言进行音乐动画功能的实现
二、设计主要功能
建立一个菜单,菜单上有7个功能,根据选择的菜单项执行相应的功能,功能包括:
(1)编写一个乐曲程序;
(2)编写指令以文本方式在品红底上显示5个蓝色的笑脸符号;
(3)编写程序,使一只“鸟”飞过屏幕;
(4)在模拟游戏程序中用随机数来控制其图形在屏幕移动;
(5)编写驱动打印机打印字符的程序
(6)写一个2台计算机互相通信的程序,要求只编写近距离通信,传输速率和4800波特,字长8位,终止位1位,无奇偶校验,在A机上发送信息“Howareyou?
”,在B机上回答“verygood!
”;
(7)编写建立、写入、读出磁盘文件的程序;
三、系统分析与设计
编写主程序,在主程序中用数字标出各个子功能,当用户从键盘输入某个数字时,就去执行相应的功能。
1.乐曲是按照一定的高低、长短和强弱关系组成的音调,在一首乐曲中,每个音符的高低和音长,与频率和节拍有关。
要实现乐曲的演奏,可通过调用发声程序来达到输出音乐的效果。
在程序中,可以设定两个变量分别用来存储音符的频率值和持续的时间。
音符的频率可以通过查阅有关资料获得,音符的持续时间根据乐曲的速度及每个音符的节拍数来确定。
得到了音频和时间的关系,就可以按照乐曲的曲谱。
将每个音和持续时间定义成两个数据表,然后编写程序依次取出表中的频率和时间值,调用程序发出声音。
(1)通过对计数器2设定不同的值来得到不同频率;
(2)通过监控端口61H的PB4,使PB4每隔15.08µS触发一次,产生一个固定的时间基准也可以通过程序来延迟声音的时间。
2.文本的显示是通过调用BIOS10H的子功能09H来显示字符,其中BL中的值为前景和背景彩色属性值。
程序的实现可分为如下三步:
(1)彩色文本方式的属性字节的设置;
(2)调用BIOS下的中断类型10H;
(3)使用CX来控制显示符号的个数。
3.用小写字母v变为破折号来模仿飞鸟的动作。
调用BIOS的字符显示功能10H,使这两个字符先后在两列显示,每个字符显示固定的时间后消失。
形成鸟飞翔的效果。
4.模拟游戏程序中用随机数来控制其图形在屏幕上移动。
(1)该功能实现的关键是如何得到一个随机数,随机数的生成是通过调用1AH中断来访问系统时间,用这样的办法来实现随机数种子。
(2)然后通过一些运算,如将行、列值分别加上一个数字,来实现图形的移动。
(3)另外,程序的图形采用多字符组合实现。
首先在屏幕上显示出来,延迟一个时间周期,让图形更清晰。
然后清除图形,调用随机数种子,计算出下一步图形的位置,让图形在相应的位置显示。
循环执行上一步过程,直到移出屏幕位置为止。
5.用户从键盘输入一个文件,在屏幕上回显出来。
每输入一行180个字符,用户检查一遍,如果用户认为无须修改,则键入回车,此时这行字符就存入BUFFER缓冲区保存,同时打印机把这行字符打印出来并换行。
6.计算机之间进行远程通信时,可以用调制解调器(MODEM),借助于电话电缆线进行,这需要计算机串行地发送或接收数据与信息。
由于串行数据通信使用的传输线条数少,微型机中已经装有异步接收发送器8250及一些通信接口,因此两台微型计算机之间在进行近距离通信时,可以不用调制解调器,通过电缆线直接进行串行通信。
(1)使用串行通讯口BIOS功能(INT14H)实现通信;
PC上的串行接口是标准的RS-232接口,串行通讯口BIOS功能INT14H的AH=0子功能,把指定的串行通讯口初始化,即可进行通信。
(2)使用8250中断方式进行通信。
IBMPC机内装有通信适配器板,它使PC机有能力与其它具有标准RS-232C串行通信接口的计算机进行通信。
PC机中异步接收发送器组件8250芯片UART可以完成大多数串行协议中的要求,通过此芯片实现异步通信。
在通信之前,根据协议规定的波特率、数据、停止位等,对8250进行初始化。
初始化之后,就可以进行发送和接收数据了。
7.文件是常用的数据存储形式,也是磁盘存储的基本内容。
用汇编语言可以有效地管理和控制磁盘资源,建立自己特有的文件并体会DOS的功能。
用汇编语言实现DOS的TYPE和COPY功能。
具体要求是:
(1)读入一个文本文件,将大写的字母转换为小写字母并将结果显示在屏幕上。
对于读文件,应首先打开文件,顺序读取文件内容并显示,同时将其中的大写字母转换为小写字母,最后关闭文件。
(2)将刚转换成小写字母的文件拷贝到另一个文件中。
本功能实现DOS中的COPY命令,可首先打开源文件和目标文件,其次顺序读取源文件,将每个字节赋给目的文件对应位置,源文件读完时,目的文件就拷贝完成了。
四、设计框图
五、程序清单
DATASEGMENT
;-----------------------------------------------------菜单
LISTDB0DH,0AH
DB'******************************',0DH,0AH
DB'*Pleaseinput:
*',0DH,0AH
DB'*1.Smilingface*',0DH,0AH
DB'*2.Playmusic*',0DH,0AH
DB'*3.Flyingbird*',0DH,0AH
DB'*4.random*',0DH,0AH
DB'*5.Printing*',0DH,0AH
DB'*6.Communication*',0DH,0AH
DB'*7.File*',0DH,0AH
DB'*0.Exit*',0DH,0AH
DB'******************************',0DH,0AH,'$'
;-----------------------------------------------------音乐频率表和节拍时间表
mus_fregdw330,294,262,294,3dup(330)
dw3dup(294),330,392,392
dw330,294,262,294,4dup(330)
dw294,294,330,294,262,-1
mus_timedw6dup(250),500
dw2dup(500,250,500)
dw12dup(250),1000
;-----------------------------------------------------小鸟
BIRD_DBDB'V',0010B;绿色小鸟
DB'_',0010B
;-----------------------------------------------------随机数
RANDOM_DWDW?
RANDOM_HIDB?
RANDOM_WIDB?
;-----------------------------------------------------打印
INTR_MSGDB'YOUareusingatypersimulator.'
DB'Toquitthisprogram,pressEsc',13,10,'$'
PROMPT_MSGDB9EH,10H,'$'
KEY_ESCEQU1BH
KEY_CREQU0DH
KEY_LFEQU0AH
;-----------------------------------------------------通讯
COM_MESSAGEDB'SerialcommunicationviaCOM2,4800,nop,1stop,8bitdata',0AH,0DH
DB'AnykeypressissenttootherPc',0AH,0DH
DB'PressEsctoexit','$'
;-----------------------------------------------------文件
FILE1DB'd:
\masm\1.txt',0;要打开的文件的路径和文件名
FILE2DB'd:
\masm\2.txt',0;创建的文件的路径和文件名
BUF1DB256DUP(0);文件内容暂存区
BUF2DB256DUP(0);文件内容暂存区
ERROR_MsgDB0dh,0AH,'error!
','$';出错时的提示
finish_MSGDB0dh,0AH,'success!
$';操作成功后的提示
HANDLEDW?
;保存文件代号
;-----------------------------------------------------
DATAENDS
;-----------------------------------------------------
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
MAINPROCNEAR;主程序
START:
MOVAX,DATA
MOVDS,AX
MOVAH,09
LEADX,LIST;输出菜单
INT21H
MOVAH,01H;选项输入
INT21H
CMPAL,'0'
JZEXIT
CMPAL,'1'
JNZJ1
CALLFACE;访问FACE
JMPSTART
J1:
CMPAL,'2'
JNZJ2
CALLMUSIC;访问MUSIC
JMPSTART
J2:
CMPAL,'3'
JNZJ3
CALLBIRD;访问BIRD
JMPSTART
J3:
CMPAL,'4'
JNZJ4
CALLRANDOM;访问RANDOM
JMPSTART
J4:
CMPAL,'5'
JNZJ5
CALLPRINTING;访问PRINTING
JMPSTART
J5:
CMPAL,'6'
JNZJ6
CALLCOM;访问COM
JMPSTART
J6:
CMPAL,'7'
JNZSTART
CALLFILE;访问FILE
JMPSTART
EXIT:
MOVAH,4CH
INT21H
MAINENDP
;-----------------------------------------------------笑脸
FACEPROCNEAR
MOVDS,AX
MOVAH,09
MOVAL,01;笑脸字符
MOVBH,0;第一页
MOVBL,01010001B;品红背景,蓝色笑脸
MOVCX,05;5个
INT10H
RET
FACEENDP
;-----------------------------------------------------音乐
MUSICPROCNEAR
LEASI,DS:
MUS_FREG
LEABP,DS:
MUS_TIME
FREQ:
MOVDI,[SI];循环播放音乐
CMPDI,-1
JEEND_MUS;为-1结束
MOVBX,DS:
[BP]
CALLSOUNDF;访问发声程序
ADDSI,2
ADDBP,2
JMPFREQ
END_MUS:
RET
MUSICENDP
SOUNDFPROCNEAR;发声程序
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAL,0B6H;(10110110B)
OUT43H,AL;对定时器2进行初始化,使其准备接收计数初值
MOVDX,12H
MOVAX,348CH
DIVDI;频率DX=12H
OUT42H,AL;42H端口装入一个16位的计数值(533*896/频率),以建立将要产生的声音的频率
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,3;把61H的0,1两位置1,发出声音
OUT61H,AL
MOVBX,10000
WAIT_mus:
MOVCX,8FF0H
DELAY:
LOOPDELAY;时间延迟loop执行100000*8ff0h次
DECBX
JNZWAIT_mus
MOVAL,AH
OUT61H,AL;恢复端口
POPDI
POPDX
POPCX
POPBX
POPAX
RET
SOUNDFENDP
;-----------------------------------------------------小鸟
BIRDPROCNEAR;小鸟子程序
MOVAH,0;设置300*200彩色图形方式
MOVAL,3
INT10H
MOVDL,1;小鸟起始位置
BEGIN_BIR:
MOVDH,8
MOVSI,2
MOVCX,1;小鸟个数
LEADI,BIRD_DB;DI指向小鸟字符表的首字母
DISP_BIR:
INCDH
MOVAH,2;设置光标位置
INT10H
MOVAH,9;显示小鸟字符V
MOVAL,[DI]
MOVBL,[DI+1]
INT10H
CALLDLY_BIR;延时
MOVAL,'';覆盖小鸟
MOVBL,0
INT10H
ADDDI,2
INCDL
CMPDL,80;看是否到边界
JAEEXIT_BIR;是,退出
DECSI
JNZDISP_BIR
JMPBEGIN_BIR
EXIT_BIR:
RET
BIRDENDP
DLY_BIRPROCNEAR;延时子程序
PUSHCX
PUSHDX
MOVDX,10000
DL1:
MOVCX,6801
DL2:
LOOPDL2;10000*6801
DECDX
JNZDL1
POPDX
POPCX
RET
DLY_BIRENDP
;-----------------------------------------------------随机数
RANDOMPROCNEAR
MOVSI,10
MOVAH,0;设置屏幕
MOVAL,03;25*80,16色文本
INT10H
DISP_RAN:
MOVAX,DATA
MOVDS,AX
CALLRAND
MOVAX,RANDOM_DW
ANDAH,3;清高6位
MOVDL,25
DIVDL
MOVRANDOM_HI,AH;除25,余数存hi,作随机数
MOVAX,RANDOM_DW
ANDAH,1;清高7位
MOVDL,80
DIVDL
MOVRANDOM_WI,AH;除80,余数存wi,作随机数
MOVDH,RANDOM_HI
MOVDL,RANDOM_WI
MOVAH,2
MOVBH,0
INT10H
MOVAH,9
MOVAL,'*';显示*
MOVBH,0
MOVBL,5
MOVCX,1
INT10H
MOVBX,20
DELAY_RAN:
MOVCX,20000;延迟
CALLWAITF_RAN
DECBX
JNZDELAY_RAN
JMPNEXT
WAITF_RANPROCNEAR
PUSHAX
WAITF_RAN_0:
INAL,61H
ANDAL,10H
CMPAL,AH
JEWAITF_RAN_0
MOVAH,AL
LOOPWAITF_RAN_0
POPAX
RET
WAITF_RANENDP
NEXT:
CALLCLEAR_SCR
DECSI
JZEXIT_RAN
JMPDISP_RAN
EXIT_RAN:
CALLMAIN
RANDOMENDP
CLEAR_SCRPROCNEAR;清屏
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,6;卷屏
MOVAL,0;黑屏
MOVBH,7;黑线
MOVCH,0;左上行
MOVCL,0;左上列
MOVDH,24;右下行
MOVDL,79;右下列
INT10H
MOVDX,0;定义光标位置
MOVAH,2
INT10H
POPDX
POPCX
POPBX
POPAX
RET
CLEAR_SCRENDP
RANDPROCNEAR;访问时钟
PUSHCX
PUSHDX
PUSHAX
STI
MOVAH,0;读时钟计数器值
INT1AH
MOVRANDOM_DW,DX;(DH:
DL=秒:
1/100秒)
POPAX
POPDX
POPCX
RET
RANDENDP
;-----------------------------------------------------打印
PRINTMACROSTR_ADDR;宏定义显示信息
PUSHDX
PUSHAX
LEADX,STR_ADDR
MOVAH,09
INT21H
POPAX
POPDX
ENDM
PRINTINGPROCNEAR
MOVAH,0;设置屏幕
MOVAL,02;25*80黑白文本
INT10H
STI
CLD
MOVAH,0;初始化打印机
MOVDX,0
INT17H
MOVAX,DATA
MOVDS,AX
MOVDX,0;显示输出
MOVAH,2
INT21H
PRINTINTR_MSG
PRINTPROMPT_MSG
GET_CHAR:
MOVAH,1;键盘输入字符
INT21H
CMPAL,0
JZGET_CHAR
CMPAL,KEY_ESC;是否位ESC
JZPRINT_EXIT
MOVDL,AL;打印一个字符
MOVAH,5
INT21H
CMPAL,KEY_CR;是否为回车
JNZGET_CHAR
MOVDL,KEY_LF;换行
MOVAH,2;显示换行
INT21H
MOVAH,5;打印换行
INT21H
PRINTPROMPT_MSG;打印标志
JMPGET_CHAR
print_EXIT:
RET
PRINTINGENDP
;-----------------------------------------------------通讯
COMPROCNEAR
MOVAX,DATA
MOVDS,AX
MOVAH,09;显示信息
MOVDX,OFFSETCOM_MESSAGE
INT21H
MOVAH,0;初始化COM端口
MOVDX,1;COM2
MOVAL,0C3H;4800,n,1,8
INT14H
AGAIN_COM:
MOVAH,01;获取键盘状态
INT16H
JZNEXT_COM;如果ZF=1,没有按键
MOVAH,0;有按键,取之
INT16H
CMPAL,1BH;是否为ESC
JEEXIT_COM
MOVAH,1;向端口通信口写字符
MOVDX,1
INT14H
NEXT_COM:
MOVAH,3;取COM通信口状态
MOVDX,1;DX=通信口号
INT14H
ANDAH,1;删掉所有字节,除了D0
CMPAH,1;数据准备是否好
JNEAGAIN_COM;没有字符,跳到AGAIN_COM
MOVAH,2;是,从端口COM2通信口读字符
MOVDX,1
INT14H
MOVDL,AL
MOVAH,2;输出字符
INT21H
JMPAGAIN_COM
EXIT_COM:
RET
COMENDP
;-----------------------------------------------------文件
FILEPROCNEAR
READ:
MOVAX,DATA;读文件
MOVDS,AX
MOVDX,OFFSETFILE1
MOVAL,0
MOVAH,3DH;打开文件
INT21H
JCERROR_FIL;若打开出错,转error
MOVHANDLE,AX;保存文件代号
MOVBX,AX
MOVCX,255
MOVDX,OFFSETBUF1
MOVAH,3FH;从文件中读255字节→buf
INT21H
JCERROR_FIL;若读出错,转error
MOVBX,AX;实际读到的字符数送入bx
MOVBUF1[BX],'$';在文件结束处放置一“$”结束符
MOVBX,HANDLE
MOVAH,3EH;关闭文件
INT21H
MOVSI,-1
EXCHANGE:
INCSI;大写转小写,并->BUF2
MOVAL,BUF1[SI]
CMPAL,'A'
JBchuan_FIL
CMPAL,'Z'
JGchuan_FIL
ADDAL,20H
MOVBUF1[SI],AL
chuan_FIL:
MOVBH,BUF1[SI]
MOVBUF2[SI],BH;把字符变为小写后,传给BUF2
CMPbh,'$';是否结束?
JnzEXCHANGE
MOVDX,OFFSETBUF2;在屏幕显示文件FILE1的内容
MOVAH,9
INT21H
WRITE:
MOVDX,OFFSETFILE2;写文件
MOVCX,0
MOVAH,3CH;创建文件,若磁盘上原有此文件,则覆盖
INT21H
JCERROR_FIL;创建出错,转error处
M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 课程设计 进行 音乐 动画 功能 实现