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 [email protected]^',0DH,0AH,' ^Henan University of Economics and Law^',0DH,0AH,'please input number for music__','$';******Designed by [email protected]^**音调******后面用到-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 [email protected]^****************STACK SEGMENT Db 200 DUP ('STACK')STACK ENDS;*********Designed by [email protected]^**************CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATA MOV DS,AX MOV aH,0 MOV AL,00 INT 10H;*****定义一个宏*****SHOW MACRO b LEA DX,b MOV AH,9 INT 21HENDM;********一个声音宏********onesound macro soundis,jumpis,letteris CMP AL,letteris JNZ jumpis LEA SI,soundis LEA BP,DS:time CALL MUSIC JMP inputENDMshow 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 [email protected]^*********发声GENSOUND PROC NEAR;-------------PUSH AXPUSH BXPUSH CXPUSH DXPUSH DI;--------------MOV AL,0B6HOUT 43H,ALMOV DX,12HMOV AX,348chDIV DIOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61HMOV AH,ALOR AL,3OUT 61H,ALWAIT1: MOV CX,3314call waitfDELAY1: DEC BXJNZ WAIT1MOV AL,AHOUT 61H,AL;----------------POP DIPOP DXPOP CXPOP BXPOP AX;-------------------RETGENSOUND ENDP;************Designed by [email protected]^**************waitf proc nearpush axwaitf1:in al,61hand al,10hcmp al,ahje waitf1mov ah,alloop waitf1pop axretwaitf endp;**************Designed by [email protected]^**********MUSIC PROC NEARPUSH DSSUB AX,AXPUSH AXFREG: MOV DI,[SI]CMP DI,-1;音乐是否放完?JE END_MUSMOV BX,DS:[BP]CALL GENSOUNDADD SI,2ADD BP,2JMP FREGEND_MUS:RETMUSIC ENDPCODE ENDS;************Designed by [email protected]^**********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