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、在正文中输入我们的程序代码,并将文件命名为YINYUE.asmDATA SEG怡觎现喾MENT PARA 'DATA'INFO1 DB 0DH,0AH,'***** Designed by [email protected]$'INFO2 DB 0DH,0AH,'xiaobo welcome you to run music program!$'INFO3 DB 0DH,0AH,'please select!$'INFO4 DB 0DH,0AH,'INPUT ERROR!$'INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'MUSLIST DB 0DH,0AH,'A MUSIC1' DB 0DH,0AH,'B MUSIC2' DB 0DH,0AH,'C MUSIC3' DB 0DH,0AH,'Q EXIT' db 0dh,0ah,'$'MUS_FREG1 DW 330,294,262,294,3 DUP (330) DW 3 DUP (294),330,392,392 DW 330,294,262,294,4 DUP (330) DW 294,294,330,294,262,-1MUS_TIME1 DW 6 DUP (25*8),50*8 DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8MUS_FREG2 DW 330,392,330,294,330,392,330,294,330 DW 330,392,330,294,262,294,330,392,294 DW 262,262,220,196,196,220,262,294,332,262,-1MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100MUS_FREG3 DW 262,262,294,262,349 DW 330,262,262,294,262 DW 392,349,262,262,523 DW 440,349,262,262,466 DW 466,440,262,392,349,-1 MUS_TIME3 DW 50,50,100,100,100 DW 100,100,50,50,100,100 DW 100,100,100,50,50,100 DW 100,100,100,100,100,50 DW 50,100,100,100,100,100DATA ENDSSTACK SEGMENT PARA STACK 'STACK' DB 200 DUP ('STACK')STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODEMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV aH, 0 MOV AL,4 INT 10H MOV AH,0BH MOV BH,0 MOV BL,4 INT 10H MOV AH,0BH MOV BH,01H MOV BL,00 INT 10H;*****定义一个宏*****SHOW MACRO b LEA DX,b MOV AH,9 INT 21H ENDM;********************** show INFO1 show INFO2 show INFO3 show MUSLISTINPUT: MOV AH,01H INT 21H CMP AL,'Q' JZ retu CMP AL,'A' JNZ B0 CALL MUSIC1 JMP EXIT1B0: CMP AL,'B' JNZ C0 CALL MUSIC2 JMP EXIT1C0: CMP AL,'C' JNZ exit CALL MUSIC3EXIT1: show INFO5 JMP INPUTEXIT: call clear show INFO4 show INFO5 show INFO1 show INFO2 show INFO3 show MUSLIST jmp inputRETU: MOV AH,4CH INT 21HMAIN ENDPMUSIC1 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG1 LEA BP,DS:MUS_TIME1FREG1: MOV DI,[SI] CMP DI,-1 JE END_MUS1 MOV DX,DS:[BP] MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS1: RETMUSIC1 ENDPGENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H OUT 43H,AL MOV DX,12H MOV AX,533H*896 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,8FF0HDELAY1: LOOP DELAY1 DEC BX JNZ WAIT1 MOV AL,AH OUT 61H,AL POP DI POP DX POP CX POP BX POP AX RETGENSOUND ENDPMUSIC2 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG2 LEA BP,DS:MUS_TIME2FREG2: MOV DI,[SI] CMP DI,-1 JE END_MUS2 MOV DX,DS:[BP] MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS2: RETMUSIC2 ENDPMUSIC3 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG3 LEA BP,DS:MUS_TIME3FREG3: MOV DI,[SI] CMP DI,-1 JE END_MUS3 MOV DX,DS:[BP] MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1END_MUS3: RETMUSIC3 ENDPclear proc near push ax push bx push cx push dx mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,24 mov dl,79 mov bh,7 int 10h pop dx pop cx pop bx pop ax retclear endpCODE ENDS END MAIN
3、运行我们编辑的文件