Assembly Language Masm汇编编译器
打开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
在正文中输入我们的程序代码,并将文件命名为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
运行我们编辑的文件,按提示输入 例 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