内容:

使用汇编编写音乐播放程序,编写3个以上乐曲,在播放之前可以选择播放的曲目

思路:

子程序说明:

.8086:

stacks segmentstack db 256h dup(0)
stacks ends
data segmentwelcome db 0dh, 0ah, 'Welcome to music player!', '$'info_1 db 0dh, 0ah, 'Please select!', '$'info_2 db 0dh, 0ah, 'Input ERROR!Please input again!', '$'info_3 db 0dh, 0ah, 'Version 1.0.0 ALL copyright reserved!', '$'info_4 db 0dh, 0ah, 'Please input again!', 0dh, 0ah, '$'mus_list db 0dh, 0ah, '1 dingdingding'db 0dh, 0ah, '2 Boat in Taihu Lake'db 0dh, 0ah, '3 2 Tigers'db 0dh, 0ah, '4 music'db 0dh, 0ah, '5'db 0dh, 0ah, 'esc exit'db 0dh, 0ah, '$'mus_freq_1 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,-1mus_time_1 dw 6 dup(25),50                    ;节拍表dw 2 dup(25,25,50)dw 12 dup(25),100;太湖船mus_freq_2 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, 330, 262dw -1 mus_time_2 dw 3 dup(50), 25, 25, 50, 25, 25, 100dw 2 dup(50, 50, 25, 25), 100dw 3 dup(50, 25, 25), 100;两只老虎mus_freq_3 dw  262,294,330,262,262,294,330,262    dw  330,349,392,330,349,392,392,440    dw  392,349,330,262,392,440,392,349           dw  330,262,294,196,262,294,196,262,-1mus_time_3 dw  25,25,25,25,25,25,25,25,25,25    dw  50,25,25,50,12,12,12,12,25,25    dw  12,12,12,12,25,25,25,25,50,25,25,50data ends
;字符串输出
show macro blea dx, bmov ah, 9int 21h
endm
;地址
play macro a,blea si, alea bp, ds:bcall mus_player
endmcode segmentassume cs:code, ss:stacks, ds:data
main:mov ax, datamov ds, axmov ax, stacksmov ss, axmov sp, 256mov ax, 0003hint 10hshow welcomeshow info_1show info_3show mus_list
input:mov ah, 01hint 21hcmp al, 1bhjz exit
A_:cmp al, '1'jnz B_play mus_freq_1, mus_time_1jmp exit1
B_:  cmp al, '2'jnz C_play mus_freq_2, mus_time_2jmp exit1
C_:cmp al, '3'jnz exit2play mus_freq_3, mus_time_3
exit1:show info_4jmp input
exit2:;call clear;mov ax, 0003h;int 10hshow info_2;show welcomeshow info_1show info_3show mus_listjmp input
exit:mov ah, 4chint 21h
;-----------------------------------------
;
soundf proc near; di---freq; bx---节拍push axpush bxpush cxpush dxpush dimov al, 0b6h                ;10110110B 对定时器2进行初始化out 43h, al                 ;8253/54 43h 端口mov dx, 12h                 ;ax得到送往定时器2的计数值mov ax, 348ch               ;(12, 348ch)/di = 1193100hz/freqdiv di                      ;余数在dx中 ax为商out 42h, al                 ;输出计数值到42h端口mov al, ahout 42h, alin al, 61h                  ;读入61h端口设置到almov ah, al                  ;移入高八位or al, 3                    ;输出到61h 0,1两位置1 发声out 61h, al                 ;out al->61h;延时 硬件
wait1:mov cx, 3314                ;装入 15.08微妙的倍数call waitf
delay1:dec bxjnz wait1mov al, ahout 61h, alpop dipop dxpop cxpop bxpop axret
soundf endp;-----------------------------
; 延时子程序 waitf
;cx=33144 0.5s延时
;cx=663   10ms延时
waitf proc nearpush ax
waitf1:in al, 61h                  ;61h PB4and al, 10hcmp al, ah                  ;是否改变je waitf1mov ah, alloop waitf1                 ;until cx=0pop axret
waitf endp;-----------------------------
;发声子程序
mus_player proc nearxor ax, ax
freq:mov di, [si]                ;表中音符频率cmp di, 0ffffh              ;-1为结束标志je end_musmov bx, ds:[bp]             ;取出音符持续时间call soundfadd si, 2add bp, 2jmp freq
end_mus:ret
mus_player 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,79 mov bh,7int 10hpop dxpop cxpop bxpop axret
clear endp
code ends
end main

编译环境:SublimeText+masm.exe+link.exe+Dosbox

运行截图:

正常界面

播放界面

退出

汇编实验 使用汇编编写音乐播放程序,编写3个以上乐曲,在播放之前可以选择播放的曲目相关推荐

  1. 编玩边学——高新科技启蒙教育,让程序编写铸就高新科技能手

    孩子教育一直以来全是一个关键的话题讨论,上千年之前的孟母,就为了更好地孩子教育难题而连搬了三次家,最后才给了孔子一个优良的生长发育自然环境,将孔子变成了一代圣贤.上千年之后,爸爸妈妈针对孩子教育仍然高 ...

  2. 软件c#语言调用摄像头,c#基于opencv,开发摄像头播放程序

    前言 Windows下实现摄像视频捕捉有多种实现方式:各种方式的优劣,本文不做对比.但是,opencv是一款老牌开发库,在图像处理领域声名显赫.采用opencv来处理摄像视频,在性能和稳定性上,是有保 ...

  3. 汇编实验:屏幕窗口程序(代码有较为详细的注释)

    实验3.4 屏幕窗口程序 1.题目:屏幕窗口程序 2.实验要求: 在屏幕上开出三个窗口,它们的行列坐标按照教材要求.光标首先定位在右窗口最下面一行的行首(15,50),如从键盘输入字符,则显示在右窗口 ...

  4. 汇编实验三 汇编语言程序的调试与运行

    一.实验目的 1.熟练掌握编写汇编语言原程序的基本框架 2.熟悉在PC机上编辑.汇编.连接.调试和运行汇编语言程序的过程. 二.实验内容 一个汇编语言程序从写出到最终执行的简要过程如下: 1) 编辑 ...

  5. 汇编基础教程(5)程序编写

    程序 1     源程序 1.1  构成 寄存器与段的关联假设 assume:含义为"假设". 它假设某一段寄存器和程序中的某一个用 segment - ends 定义的段相关联. ...

  6. 【微机原理 实验】 响铃及接收日期程序(含汇编代码)

    实验九  响铃及接收日期程序 更多微机实验:https://blog.csdn.net/yxp189/column/info/39992 汇编语言-微机原理与接口技术-实验 注意:未经允许,请勿转载! ...

  7. 【汇编】 编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

    编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来.

  8. 计算机组成原理汇编程序实验,计算机组成原理汇编实验(资料).pdf

    计算机组成原理汇编实验(资料) 汇编语言调试工具 DEBUG 的使用 一.实验目的: 1.掌 DEBUG 的基本命令及其功能 2.熟练掌 DEBUG 的常用命令,学会用 DEBUG 调试程序. 3.掌 ...

  9. 汇编实验三:三个有符号数比较大小

    汇编实验三:三个有符号数比较大小 问题 源码 利用库函数io.inc 问题 给出三个有符号数,编写一个比较相等关系的程序: (1) 如果这三个数都不相等,则显示0: (2) 如果这三个数中有两个数相等 ...

最新文章

  1. Java 运行时数据区域,哪些是线程隔离的?哪些又是公有的?
  2. emf java_Java实现emf图片字节流转png(jpg)图片字节流
  3. Ubuntu-Server 20.04 安装详细过程(图文)
  4. Hadoop 使用FileSystem API 读取数据
  5. Android Studio在Ubuntu下离线安装Gradle
  6. ie浏览器在线使用_教师资格证报名使用的不是ie系列浏览器怎么办?
  7. unity多人联机插件_Unity网络系统插件,打通游戏联网任督二脉
  8. Git客户端Tower for Mac 8.2
  9. [深度学习工具]·FoolNLTK 中文处理工具包使用教程
  10. GA-H81M-DS2 触发-掉电-自动触发-掉电-循环
  11. linux终端查找隐藏文件,如何在Linux服务器中查看或隐藏文件?
  12. Science复活远古“蛋白质”,揭示光合作用的“昨天、今天和明天”
  13. 微信墙java源码_高仿微信java代码
  14. 多可系统如何设置登录IP限制
  15. TunesKit Video Cutter for Mac(视频分割编辑工具)
  16. Python3.x:第三方库简介
  17. SQLaichemy三种排序方式
  18. python实现奇异值分解_如何用python实现SVD分解呢?
  19. 华为软件测试通信基础,【华为软件测试工程师面试】面试软件测试和通信相关的题目。-看准网...
  20. 21岁:写给自己也写给未来的自己的话

热门文章

  1. Python基础学习:关键字elif
  2. python中if elif语句优化_在Python中优化ifelif表达式
  3. 服务器虚拟化用户手册,京华科讯 服务器虚拟化管理软件用户手册
  4. 小样本图像语义分割综述
  5. java多重背包算法,01背包、完全背包和多重背包
  6. html5常见语义化新元素_HTML 5中的新元素
  7. Java IO体系结构图
  8. 浅析多核ECU运行流程
  9. 利用批处理全自动(静默)安装常用软件
  10. 深入探讨回归分析的假设条件、散点图以及解决方案