汇编语言音乐简谱演奏程序示例

2025-10-08 17:08:44

1、打开masm汇编编译程序,新建一个masm源文件脚本。

DATAS SEGMENT

    ;此处输入数据段代码  

DATAS ENDS

STACKS SEGMENT

    ;此处输入堆栈段代码

STACKS ENDS

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

    MOV AX,DATAS

    MOV DS,AX

    ;此处输入代码段代码

    MOV AH,4CH

    INT 21H

CODES ENDS

    END START

汇编语言音乐简谱演奏程序示例

汇编语言音乐简谱演奏程序示例

2、在正文中输入我们的程序代码,并将文件命名为music.asm

;**********Designed by 1wangxiaobo@163.com^**************

DATA SEGMENT 

     msg DB 0DH,0AH,'[ 1 2 3 4 5 6 7 q] 9 :exit'

         ;DB 0DH,0AH,' [ q w e r t y u ]'

        ; DB 0DH,0AH,'_________________'

        ; DB 0DH,0AH,'9: EXIT' 

         DB 0DH,0AH,'xiaobo Assembly Language test for music',0DH,0AH,' ^Designed by 1wangxiaobo@163.com^',0DH,0AH,' ^Henan University of Economics and Law^',0DH,0AH,'please input number for music__','$' 

;******Designed by 1wangxiaobo@163.com^**音调******后面用到-1判断音乐播是否放完

     sound_0 DW -1

     sound_11 DW 441,-1 

     sound_12 DW 495,-1

     sound_13 DW 556,-1

     sound_14 DW 589,-1

     sound_15 DW 661,-1

     sound_16 DW 742,-1 

     sound_17 DW 833,-1 

     sound_1 DW 882,-1 

     sound_2 DW 990,-1 

     sound_3 DW 1112,-1

     sound_4 DW 1178,-1 

     sound_5 DW 1322,-1 

     sound_6 DW 1484,-1 

     sound_7 DW 1655,-1

     time    DW 25

DATA ENDS 

;********Designed by 1wangxiaobo@163.com^****************

STACK SEGMENT 

    Db 200 DUP ('STACK') 

STACK ENDS 

;*********Designed by 1wangxiaobo@163.com^**************

CODE SEGMENT 

  ASSUME DS:DATA,SS:STACK,CS:CODE 

START: 

      MOV AX,DATA 

      MOV DS,AX

      MOV aH,0 

      MOV AL,00 

      INT 10H

;*****定义一个宏***** 

SHOW MACRO b 

    LEA DX,b 

    MOV AH,9 

    INT 21H 

ENDM

;********一个声音宏********

onesound macro soundis,jumpis,letteris

     CMP AL,letteris 

     JNZ jumpis 

     LEA SI,soundis

     LEA BP,DS:time

     CALL MUSIC 

     JMP input 

ENDM

show msg

INPUT: MOV AH,01H 

       INT 21H 

       CMP AL,'9' 

       jnz go

       mov ah,4ch

       int 21h

go: onesound sound_11,a0,'q'

a0: onesound sound_12,b0,'w'

b0: onesound sound_13,c0,'e'

c0: onesound sound_14,d0,'r'

d0: onesound sound_15,e0,'t'

e0: onesound sound_16,f0,'y'

f0: onesound sound_17,g0,'u'

g0: onesound sound_1,h0,'1'

h0: onesound sound_2,i0,'2'

i0: onesound sound_3,j0,'3'

j0: onesound sound_4,k0,'4'

k0: onesound sound_5,l0,'5'

l0: onesound sound_6,m0,'6'

m0: onesound sound_7,n0,'7'

n0: onesound sound_0,o0,al

o0: jmp input

;***********Designed by 1wangxiaobo@163.com^*********发声

GENSOUND PROC NEAR 

;-------------

PUSH AX 

PUSH BX 

PUSH CX 

PUSH DX 

PUSH DI 

;--------------

MOV AL,0B6H 

OUT 43H,AL 

MOV DX,12H 

MOV AX,348ch 

DIV DI 

OUT 42H,AL 

MOV AL,AH 

OUT 42H,AL 

IN AL,61H 

MOV AH,AL 

OR AL,3 

OUT 61H,AL

WAIT1: MOV CX,3314 

call waitf 

DELAY1: DEC BX 

JNZ WAIT1 

MOV AL,AH 

OUT 61H,AL

;----------------

POP DI 

POP DX 

POP CX 

POP BX 

POP AX 

;-------------------

RET 

GENSOUND ENDP

;************Designed by 1wangxiaobo@163.com^**************

waitf proc near 

push ax 

waitf1: 

in al,61h 

and al,10h 

cmp al,ah 

je waitf1 

mov ah,al 

loop waitf1 

pop ax 

ret 

waitf endp

;**************Designed by 1wangxiaobo@163.com^**********

MUSIC PROC NEAR 

PUSH DS 

SUB AX,AX 

PUSH AX 

FREG: MOV DI,[SI]

CMP DI,-1;音乐是否放完?

JE END_MUS

MOV BX,DS:[BP] 

CALL GENSOUND 

ADD SI,2 

ADD BP,2 

JMP FREG 

END_MUS: 

RET 

MUSIC ENDP 

CODE ENDS 

;************Designed by 1wangxiaobo@163.com^**********

END START 

汇编语言音乐简谱演奏程序示例

3、运行我们编辑的文件,按提示输入 例 2 5 3 5 的数字 就可以揍出音乐音符了 

附歌曲童话的简谱为

忘了有多久 在没听到你 

51715 51715 

对我说你最爱的故事 

517111665 

我想了很久 我开始慌了 

51715 53221 

是不是我 又做错了什麼 

5176 661165 

你哭著对我说 童话里都是骗人的 

224433 33721171 

我不可能是你的王子 

171455432 

也许你不会懂 

224433 

从你说爱我以后 我的 天空 星星都亮了 

3377671 13216 66555 

我愿变成童话里 你爱的那个天使 

5543343 3434321 

张开双手 变成翅膀守护你 

1356 6652243 

你要相信相信我们会像童话故事里 幸福和快乐是结局 

135666522434321 23661171 

一起写我们的结局

23661171

汇编语言音乐简谱演奏程序示例

汇编语言音乐简谱演奏程序示例

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢