多语言展示
当前在线:953今日阅读:26今日分享:39

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

汇编语言(Assembly Language)是面向机器的程序设计语言。在汇编语言中,用助记符(Memoni)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,如此就增强了程序的可读性并且降低了编写难度,象这样符号化的程序设计语言就是汇编语言,因此亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,还要由汇编程序或者叫汇编语言编译器转换成机器指令。汇编程序将符号化的操作代码组装成处理器可以识别的机器指令,这个组装的过程称为组合或者汇编。因此,有时候人们也把汇编语言称为组合语言。
工具/原料

Assembly Language   Masm汇编编译器

方法/步骤
1

打开masm汇编编译程序,新建一个masm源文件脚本。DATAS SEGMENT    ;此处输入数据段代码  DATAS ENDSSTACKS SEGMENT    ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT    ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:    MOV AX,DATAS    MOV DS,AX    ;此处输入代码段代码    MOV AH,4CH    INT 21HCODES 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 25DATA 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 ENDMshow msgINPUT: MOV AH,01H        INT 21H        CMP AL,'9'        jnz go       mov ah,4ch       int 21hgo: 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,alo0: 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,ALWAIT1: 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_MUSMOV 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 你要相信相信我们会像童话故事里 幸福和快乐是结局 4321 23661171 一起写我们的结局23661171

推荐信息