程序说明:
这是一个音乐程序,按大写字母“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。

汇编课程设计:音乐播放器详解相关推荐

  1. Android的媒体播放器------简易音乐播放器(详解)

    一.案例效果 二.欢迎界面的设计与功能 2.1 .案例效果 设计一个倒计时自动跳转的页面 2.2. 布局界面 activity_welcome.xml 参考代码: <?xml version=& ...

  2. java课程设计-音乐播放器_java课程设计---java音乐播放器.doc

    java课程设计---java音乐播放器 Java程序设计课程设计 题 目 java音乐播放器 学 号: 姓 名: 指导教师: 完成时间: 目 录 第一章 系统概述3 1.需求分析3 1.1任务目的: ...

  3. 【swjtu】数字电路课程设计-音乐播放器

    数字电子技术B 课程设计报告 (2021-2022第1学期) 课题名称:音乐播放器 指导教师:郑  狄 项目成员:

  4. java课程设计-音乐播放器_Java程序设计课程设计报告音乐播放器

    Java程序设计课程设计报告音乐播放器 <Java及Java web应用开发>实验报告 设计题目: Java音乐播放器 专 业 计算机信息管理 班 级 1班 学 号 姓 名 2014年12 ...

  5. java课程设计-音乐播放器,基于java的音乐播放器设计.doc

    摘要:音乐是生活的必需的,它能够缓解人们焦躁的心情,调节现代化生活的节奏,让人们能够舒缓身心.一个好的音乐播放器,能够实现个性化的功能,它能够根据个人的喜好来推荐歌曲.深流音乐播放器正是实现了此功能, ...

  6. Java乐乐_java音乐播放器-乐乐音乐播放器详解

    乐乐音乐目前是基于musique开发的一个java音乐播放器,支持桌面歌词,卡拉ok歌词.详细请移步到我的博客. http://my.oschina.net/u/437124/blog/598749 ...

  7. 音乐播放器设置滑动杆JAVA_嵌入式系统课程设计---音乐播放器

    下一首按纽播放列表中当前MP3文件的下一首MP3文件 打开按钮选择一首MP3文件 列表按钮显示隐藏播放列表窗口 歌词按钮显示隐藏歌词显示窗口 静音按钮打开/关闭播放器的输出声音 音量控制条对播放器的音 ...

  8. Java课程设计------音乐播放器

    技术:基于Java8.JavaFx知识 适用: 大部分MP3文件 功能: 1.实现基本播放器的功能,如上下曲.播放暂停.循环播放和顺序播放等: 2.实现播放条和音量条的进度: 3.实现已经播放.未播放 ...

  9. 100个vc小项目开发:二、一步一点设计音乐播放器 [I]

    100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...

最新文章

  1. python http接口_python处理http接口请求
  2. Git 常用命令速查表(图文+表格)
  3. 12、Power Query-透视列实例应用(多单元格记录合并及汇总)
  4. ubuntu下超级用户和普通用户
  5. 今日代码(200727)--全局空间自相关性
  6. [渝粤教育] 广东-国家-开放大学 21秋期末考试中国近现代史纲要(A)10881k1 (2)
  7. 2021年90后脱发调研报告
  8. 以“百钱买百鸡”问题练习使用 C语言 goto 语句
  9. 华为年度旗舰Mate 30 Pro真机现身,既惊喜又失望...
  10. matlab循环码差错图样,基于循环码的差错控制编码建模与仿真1.doc
  11. fatjar: eclipse导出工具
  12. ORACLE数据库新增表空间的数据存储文件
  13. 布局篇(1)—If you love css …
  14. 刺客信条全球眼终结者 绿色破解版
  15. 三成手机电子书暗藏陷阱 诱骗下载强行吸费
  16. 十字链表法和邻接多重表法
  17. StyTr^2:Image Style Transfer with Transformers
  18. VSCode 摸鱼神器,确定不试一下?
  19. 合作动态 | 方正璞华与日立签订战略合作协议,加快推进数字化管理变革!
  20. 数字涂色 疫情过后希望小学终于又重新开学了

热门文章

  1. 线上汉服消费洞察报告
  2. 李开复写给中国大学生的七封信(7/7)
  3. 如何策划电商直播的营销模式
  4. 5句话让你了解苹果Handoff功能
  5. python后端判断手机号是否注册过
  6. MyBatis中#{}和${}的作用与区别
  7. 小毛驴VS的自我介绍
  8. 小程序base64图片的处理
  9. 门控循环单元-GRU单元(Gated Recurrent Unit)
  10. 未明学院:都快9102年了,拜托不要再教唆年轻人多吃点苦了