首页

文章

求汇编语言做的乐曲点播程序

发布网友 发布时间:2022-04-20 00:28

我来回答

3个回答

热心网友 时间:2023-09-03 12:33

; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
push ax
lea dx,Str_Addr
mov ah,9
int 21h
pop ax
EndM
; -----------------------------------------
; 入口参数
; SI=声音频率地址
; bx=时间节拍地址
Do_Music Proc Near
push dx
push cx
push ax
@@Sound: test word ptr [si],0ffffh
jz @@Return
mov al,0b6h ;向计数器写控制字
out 43h,al ;方式3、双字节写和二进制计数方式写到控制口
mov dx,12h ;设置被除数
mov ax,533h*896
div word ptr [si] ;其商ax为预置值
out 42h,al ;先送LSB
mov al,ah
out 42h,al ;后送MSB
in al,61h ;读端口原值
mov ah,al
or al,3
out 61h,al ;接通扬声器
mov cx,[bx]
@@Waitf1: push cx
mov cx,28010 ;设循环次数为8ff0h
@@delay1: loop @@delay1
pop cx ;循环持续cx次,即传进来的节拍时间
loop @@Waitf1
inc si
inc si ;下一个频率值
inc bx
inc bx ;下一个节拍值
mov al,ah ;写回61h端口值,关闭扬声器
out 61h,al ;关闭扬声器
jmp @@Sound
@@Return: pop ax
pop cx
pop dx
ret
Do_Music EndP
; -----------------------------------------
; 音乐菜单
Music_Str db '***********************************',CR,LF
db '1. Mary had a little lamb',CR,LF ;玛丽有只小羊羔
db '2. Christmas ring',CR,LF ;圣诞铃声
db '3. Little Starlet',CR,LF ;小星星
db '4. Little bee',CR,LF ;小蜜蜂
db '0. Exit',CR,LF ;结束程序
db '***********************************',CR,LF
db 'Please choose the music you want:$' ;提示选择乐曲

Prompt_Str db CR,LF,CR,LF ;音乐播放前的提示信息
db CR,LF,' Now,playing the music which you chose ^_^ please waiting...'
db CR,LF,CR,LF,0eh,'...$'

; 以下为对应各乐曲的频率表和节拍时间表
merry_freq dw 330,294,262,294,3 p(330),3 p(294),330,392,392
dw 330,294,262,294,4 p(330),294,294,330,294,262,0
merry_time dw 6 p(25*400),50*400,2 p(25*400,25*400,50*400),12 p(25*400),100*400

christ_freq dw 7 p(330),392,262,294,330,4 p(349),2 p(330),330,294,294,262,294,392
dw 7 p(330),392,262,294,330,4 p(349),2 p(330),392,392,349,294,262,0
christ_time dw 2 p(25*400,25*400,50*400),4 p(25*400),100*400,2 p(25*400,25*400,50*400)
dw 4 p(25*400),2 p(50*400),2 p(25*400,25*400,50*400)
dw 4 p(25*400),100*400,2 p(25*400,25*400,50*400),4 p(25*400),100*400

star_freq dw 262,262,392,392,440,440,392,349,349,330,330,294,294,262
dw 2 p(392,392,349,349,330,330,294)
dw 262,262,392,392,440,440,392,349,349,330,330,294,294,262,0
star_time dw 3 p(6 p(25*400),50*400,6 p(25*400),50*400)

bee_freq dw 392,330,330,349,294,294,262,294,330,349,4 p(392),330,330,349,294,294
dw 262,330,392,392,3 p(330),5 p(294),330,349,5 p(330),349,392
dw 392,330,330,349,294,294,262,330,392,392,262,0
bee_time dw 2 p(25*400,25*400,50*400),4 p(25*400),3 p(25*400,25*400,50*400)
dw 3 p(6 p(25*400),50*400)
dw 2 p(25*400,25*400,50*400),4 p(25*400),100*400

; 乐曲频率和节拍时间地址表
Music_Table dw merry_freq,merry_time,christ_freq,christ_time,star_freq,star_time,bee_freq,bee_time
Cursor_Tmp dw ? ;音乐菜单光标位置

Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
Output Music_Str ;显示音乐菜单
xor bx,bx
mov ah,3 ;取光标位置
int 10h
mov Cursor_Tmp,dx ;保存音乐菜单光标位置
Choise_Item:mov dx,Cursor_Tmp ;取音乐菜单光标位置
xor bx,bx
mov ah,2 ;设置光标位置
int 10h
@@Read_Chr: mov ah,1
int 21h
cmp al,'0'
jb @@Read_Chr
cmp al,'4'
ja @@Read_Chr
and al,0fh
test al,0ffh
jz Exit_Proc
dec al
cbw
shl ax,1
shl ax,1
mov di,ax
Output Prompt_Str ;显示音乐播放前的提示信息
mov si,Music_Table[di] ;对应的频率值地址
mov bx,Music_Table[di][2] ;对应的节拍值地址
call Do_Music ;激活扬声器,使之发出指定频率、指定时长的声音,奏乐
xor bx,bx
mov ah,8 ;度光标位置的字符和属性
int 10h
mov bh,ah ;字符属性
mov cx,Cursor_Tmp
inc ch
xor cl,cl
mov dh,ch
add dh,6
mov dl,79
mov ax,606h ;显示内容上滚
int 10h
jmp Choise_Item
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束

热心网友 时间:2023-09-03 12:33

"音乐演奏程序,刚刚做的"之精简版
http://tieba.baidu.com/f?kz=589840904

热心网友 时间:2023-09-03 12:33

G一首百RMB
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 Excel多条件返回值 求一篇要求“设计并实现一个基于PC机的音乐演奏程序... 输入数字后如果相同就变色的EXCEL自动表格 求教excel公式,三个单元格中的所有数字全排列 如何订购微软的MSDN啊 怎么更改电脑应用程序默认安装路径 光伏太阳能板为什么要清洗 太阳能光伏板清洗方法 太阳能电池板要定期清洁吗~有什么影响··影响对发电... 太阳能光伏组件如何清理维护? 太阳能光伏板脏了怎么清洁? 太阳能光伏板怎么清洗 屋顶安装太阳能发电,如何清洗电池板 光伏发电板的清洗 太阳能光伏板怎么清洗? 光伏发电光板的日常维护与保养 太阳能板需要清洗吗 光伏板应该多久清洗一次啊? 太阳能光伏发电系统中太阳能电池板多长时间清洗一次? 太阳能板用不用经常清洗啊? redhat linux 6.2安装64位oracle时出现错误 excel,输入年级、性别和成绩,从第二张表中找到对... 历史上电影票房排名世界第一的是哪部? 如何解释 $pt CFR 问一首老歌的名字 在EXCEL中,这个公式=IF(COUNTIF($H3:$Y3,MID($EK3... 每年有多少场网球赛 洛克人zx美版金手指,NO$gba2.6a的 欧美最新最流行的音乐 android实验运行出错了 这个是什么错误 名侦探柯南里哀的出场集数 推荐几首好听的英文歌 电脑应用程序图标和用户名怎么改 存放计算机处理器、内存、存储器、通信端口和外围... 苹果手机不用电脑怎么改虚拟定位? 苹果手机怎么改虚拟定位 计算机硬件系统中用来存放当前系统正在运行的程序... 苹果手机怎样虚拟定位? 微信朋友圈虚拟定位的方法 微信怎么虚假定位外省朋友圈
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com