汇编课程设计:音乐播放器详解
程序说明:
这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽有只小羔羊”;
按大写字母“B”,唱乐曲“太湖船”
按大写字母“C”,唱乐曲“祝福歌”
按"X"鍵,退出
函数图:
DATA SEGMENT PARA 'DATA' ;数据段;数据对齐到para,1 para=16;相当于段首址;link过程中,同一程序的不同模块中, 相同组合名的段会组合到一起
INFO1 DB 0DH,0AH,'WELCOME YOU TO COME HERE!$' ;显示信息
INFO2 DB 0DH,0AH,'this is a music program!$'
INFO3 DB 0DH,0AH,'please select!$'
INFO4 DB 0DH,0AH,'INPUT ERROR!$'
INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'
MUSLIST DB 0DH,0AH,'A MUSIC1'DB 0DH,0AH,'B MUSIC2'DB 0DH,0AH,'C MUSIC3'DB 0DH,0AH,'Q EXIT'db 0dh,0ah,'$'
MUS_FREG1 DW 330,294,262,294,3 DUP (330) ;音乐频率表DW 3 DUP (294),330,392,392DW 330,294,262,294,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*8MUS_FREG2 DW 330,392,330,294,330,392,330,294,330DW 330,392,330,294,262,294,330,392,294DW 262,262,220,196,196,220,262,294,332,262,-1
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100DW 2 DUP(50,50,25,25),100DW 3 DUP(50,25,25),100MUS_FREG3 DW 262,262,294,262,349DW 330,262,262,294,262DW 392,349,262,262,523DW 440,349,262,262,466DW 466,440,262,392,349,-1MUS_TIME3 DW 50,50,100,100,100DW 100,100,50,50,100,100DW 100,100,100,50,50,100DW 100,100,100,100,100,50DW 50,100,100,100,100,100
DATA ENDSSTACK SEGMENT PARA STACK 'STACK' ;堆栈段DB 200 DUP ('STACK')
STACK ENDSCODE SEGMENT ;代码段ASSUME DS:DATA,SS:STACK,CS:CODE
MAIN PROC FAR ;跨间调用main;系统把主程序当作DOS调用的一个子程序;DOS内核与主程序不是在同一个段地址内;所以主程序参数要用farMOV AX,DATA MOV DS,AX ;把data放到数据段中MOV aH, 0 ;终止进程MOV AL,4 INT 10H MOV AH,0BH ;检测键盘状态MOV BH,0 MOV BL,4INT 10HMOV AH,0BH ;检测键盘状态MOV BH,01H MOV BL,00INT 10H
;*****定义一个宏*****
SHOW MACRO b ;输出字符串b,show为宏名LEA DX,b MOV AH,9INT 21HENDM
;**********************show INFO1 show INFO2 show INFO3 show MUSLIST
INPUT: MOV AH,01H INT 21HCMP AL,'Q'JZ retuCMP AL,'A'JNZ B0CALL MUSIC1 ;跳转子函数MUSIC1JMP EXIT1
B0: CMP AL,'B'JNZ C0CALL MUSIC2 ;跳转子函数MUSIC2JMP EXIT1
C0: CMP AL,'C'JNZ exitCALL MUSIC3 ;跳转子函数MUSIC3
EXIT1: show INFO5JMP INPUT
EXIT: call clear ;跳转子函数clearshow INFO4show INFO5show INFO1show INFO2show INFO3show MUSLISTjmp input
RETU: MOV AH,4CHINT 21H
MAIN ENDP MUSIC1 PROC NEARPUSH DSSUB AX,AXPUSH AXLEA SI,MUS_FREG1 ;频率的地址赋给siLEA BP,DS:MUS_TIME1 ;节拍的地址赋给bp
FREG1: MOV DI,[SI] CMP DI,-1 ;-1是频率的结束标志JE END_MUS1 ;zf=0时跳转MOV DX,DS:[BP] MOV BX,1400 CALL GENSOUND ;跳转gensoundADD SI,2 ADD BP,2 JMP FREG1
END_MUS1:RET
MUSIC1 ENDP;实现音乐的播放函数
GENSOUND PROC NEARPUSH AX ;保护现场PUSH BXPUSH CXPUSH DXPUSH DIMOV AL,0B6H ;初始化控制字OUT 43H,AL ;将al写入端口43h,程序中断计时器MOV DX,12H MOV AX,533H*896 ;计算非896hz的声音的计数值。;其它频率声音的时间计数值应为:;533H×896÷给定频率=123280H÷给定频率 DIV DI OUT 42H,AL ;将al写入端口42h,磁带或者扩音器的程序中断计时器;8253中的42端口送一个控制字0B6H(10110110B);该控制字对定时器2进行初始化,使定时器2准备接收计数初值MOV AL,AH OUT 42H,AL ;传入时间计数值IN AL,61H ;al从61h端口中读取,扬声器端口MOV AH,ALOR AL,3 ;逻辑或运算(3要进行二进制运算,也就是0011)把输出端口61H的PB0、PB1两位 置1,发出声音OUT 61H,AL ;将al写入端口61hWAIT1: MOV CX,8FF0H ;相当于不断分配cpu时钟周期,使播放能够完成
DELAY1: LOOP DELAY1 ;循环是bx不断减少DEC BX JNZ WAIT1 ;bx不为0就跳到wait1,等待bx*8ff0h*loop使用的cpu时钟周期MOV AL,AH OUT 61H,AL POP DI ;恢复现场POP DXPOP CXPOP BXPOP AXRET
GENSOUND ENDPMUSIC2 PROC NEARPUSH DSSUB AX,AXPUSH AXLEA SI,MUS_FREG2LEA BP,DS:MUS_TIME2
FREG2: MOV DI,[SI]CMP DI,-1JE END_MUS2MOV DX,DS:[BP]MOV BX,1400CALL GENSOUNDADD SI,2ADD BP,2JMP FREG1
END_MUS2:RET
MUSIC2 ENDP
MUSIC3 PROC NEARPUSH DSSUB AX,AXPUSH AXLEA SI,MUS_FREG3LEA BP,DS:MUS_TIME3
FREG3: MOV DI,[SI]CMP DI,-1JE END_MUS3MOV DX,DS:[BP]MOV BX,1400CALL GENSOUNDADD SI,2ADD BP,2JMP FREG1
END_MUS3:RET
MUSIC3 ENDP
;输错了的情况
clear proc nearpush axpush bxpush cxpush dxmov ah,6 ;直接控制台i/o,输出dl中ascii码对应的字符mov al,0 ;初始化各种参数mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hpop dxpop cxpop bxpop axret
clear endp
CODE ENDSEND MAIN
参数传递
本题无参数传递
中断向量计算
中断向量:
本题用到了10H、21H函数库的函数调用,入口地址为0:40h ,0:84h。
10H号函数库:CS=410h+2h=42h , IP=410h=40h 。中断向量为0:40H。
21H号函数库:CS=421h+2h=86h , IP=421h=84h 。中断向量为0:84h。
汇编课程设计:音乐播放器详解相关推荐
- Android的媒体播放器------简易音乐播放器(详解)
一.案例效果 二.欢迎界面的设计与功能 2.1 .案例效果 设计一个倒计时自动跳转的页面 2.2. 布局界面 activity_welcome.xml 参考代码: <?xml version=& ...
- java课程设计-音乐播放器_java课程设计---java音乐播放器.doc
java课程设计---java音乐播放器 Java程序设计课程设计 题 目 java音乐播放器 学 号: 姓 名: 指导教师: 完成时间: 目 录 第一章 系统概述3 1.需求分析3 1.1任务目的: ...
- 【swjtu】数字电路课程设计-音乐播放器
数字电子技术B 课程设计报告 (2021-2022第1学期) 课题名称:音乐播放器 指导教师:郑 狄 项目成员:
- java课程设计-音乐播放器_Java程序设计课程设计报告音乐播放器
Java程序设计课程设计报告音乐播放器 <Java及Java web应用开发>实验报告 设计题目: Java音乐播放器 专 业 计算机信息管理 班 级 1班 学 号 姓 名 2014年12 ...
- java课程设计-音乐播放器,基于java的音乐播放器设计.doc
摘要:音乐是生活的必需的,它能够缓解人们焦躁的心情,调节现代化生活的节奏,让人们能够舒缓身心.一个好的音乐播放器,能够实现个性化的功能,它能够根据个人的喜好来推荐歌曲.深流音乐播放器正是实现了此功能, ...
- Java乐乐_java音乐播放器-乐乐音乐播放器详解
乐乐音乐目前是基于musique开发的一个java音乐播放器,支持桌面歌词,卡拉ok歌词.详细请移步到我的博客. http://my.oschina.net/u/437124/blog/598749 ...
- 音乐播放器设置滑动杆JAVA_嵌入式系统课程设计---音乐播放器
下一首按纽播放列表中当前MP3文件的下一首MP3文件 打开按钮选择一首MP3文件 列表按钮显示隐藏播放列表窗口 歌词按钮显示隐藏歌词显示窗口 静音按钮打开/关闭播放器的输出声音 音量控制条对播放器的音 ...
- Java课程设计------音乐播放器
技术:基于Java8.JavaFx知识 适用: 大部分MP3文件 功能: 1.实现基本播放器的功能,如上下曲.播放暂停.循环播放和顺序播放等: 2.实现播放条和音量条的进度: 3.实现已经播放.未播放 ...
- 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...
最新文章
- python http接口_python处理http接口请求
- Git 常用命令速查表(图文+表格)
- 12、Power Query-透视列实例应用(多单元格记录合并及汇总)
- ubuntu下超级用户和普通用户
- 今日代码(200727)--全局空间自相关性
- [渝粤教育] 广东-国家-开放大学 21秋期末考试中国近现代史纲要(A)10881k1 (2)
- 2021年90后脱发调研报告
- 以“百钱买百鸡”问题练习使用 C语言 goto 语句
- 华为年度旗舰Mate 30 Pro真机现身,既惊喜又失望...
- matlab循环码差错图样,基于循环码的差错控制编码建模与仿真1.doc
- fatjar: eclipse导出工具
- ORACLE数据库新增表空间的数据存储文件
- 布局篇(1)—If you love css …
- 刺客信条全球眼终结者 绿色破解版
- 三成手机电子书暗藏陷阱 诱骗下载强行吸费
- 十字链表法和邻接多重表法
- StyTr^2:Image Style Transfer with Transformers
- VSCode 摸鱼神器,确定不试一下?
- 合作动态 | 方正璞华与日立签订战略合作协议,加快推进数字化管理变革!
- 数字涂色 疫情过后希望小学终于又重新开学了