⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 l3.asm

📁 汇编语言编写的
💻 ASM
字号:
DATA	SEGMENT
TUNE	DW		294,294,294,294,330
	DW		294,262,262,392,392,440
	DW		262,262,262,262,294,330
	DW		294,294,294,294,330
	DW		294,262,196,196,220
        DW              262,262,262,262,330
        DW              330,294,294,294,392
        DW              0
	
RHYTHM	DW		3,1,3,1,3,2
	DW		1,1,1,1,2,3
	DW		3,1,3,2,3,3
	DW		3,1,2,3,2
	DW		3,1,2,3,3
        DW              2,2,1,1,3
        DW              1,1,3,2,2
	
SNAME	DB		'QIAN LI ZHI WAI',13,10,'$'
STRING	DB		'PUT YOUR OWN SONG',13,10,'$'
DATA	ENDS
STACK	SEGMENT PARA STACK'STACK'
	DW 100 DUP(?)
STACK	ENDS

CODE	SEGMENT
	ASSUME	CS:CODE,DS:DATA,SS:STACK
STAT	PROC	FAR
	PUSH	DS
	MOV	AX,0
	PUSH	AX
	MOV	AX,DATA
	MOV	DS,AX
        MOV     AX,STACK
        MOV     SS,AX
     	
	CALL 	SING
	CALL	DPIANO
	RET
STAT	ENDP
SING	PROC 	NEAR
	LEA	DX,SNAME  ;输出提示语(曲名)
    	MOV	AH,9
     	INT	21H
     	
	LEA	SI,TUNE
	LEA	BP,RHYTHM
	PUSH 	DI
	PUSH 	SI
	PUSH 	BP
	PUSH 	BX
REPTO:  MOV 	DI,[SI]
	CMP 	DI,0
	JE 	ENDSONG
	MOV 	AX,DS:[BP]
	MOV	BX,3700
	MUL	BX
	MOV	BX,AX
	CALL	SOUND
	ADD 	SI,2
	ADD 	BP,2
        JMP 	REPTO
ENDSONG:POP 	BX
	POP 	BP
	POP 	SI
	POP 	DI
	RET
SING	ENDP

SOUND	PROC 	NEAR
	PUSH 	AX
	PUSH 	BX
	PUSH 	CX
	PUSH 	DX
	PUSH 	DI
		
	MOV 	AL,0B6H		;写命令控制字10110110
	OUT 	43H,AL
		
	CMP	DI,100		;如果为100则不发声
	JE	DELAY	
		
	MOV 	DX,12H		;计算计数值
	MOV 	AX,34DCH
	DIV 	DI
		
	OUT 	42H,AL		;送低字节
	MOV 	AL,AH
	OUT 	42H,AL		;送高字节
		
	IN 	AL,61H		;打开扬声器发声
	OR 	AL,3
	OUT 	61H,AL
		
DELAY:	MOV 	CX,09fffh	;延时
KILLT:	LOOP 	KILLT
	DEC	BX
	JNZ 	DELAY

	IN	AL,61H		;关闭扬声器
	AND	AL,0FCH
	OUT	61H,AL
		
	POP 	DI
	POP 	DX
	POP 	CX
	POP 	BX
	POP 	AX
	RET
SOUND	ENDP

DPIANO	PROC	NEAR
	LEA	DX,STRING	;输出提示语
    	MOV	AH,9
     	INT	21H
     	
THEN:	MOV	AH,1		;用户输入
	INT	21H
		
	MOV	BX,7000
		
	CMP	AL,31H
	JNE	NEXT1
	MOV	DI,131
	JMP	FF
NEXT1:	CMP		AL,32H
	JNE		NEXT2
	MOV		DI,147
	JMP		FF	
NEXT2:	CMP		AL,33H
	JNE		NEXT3
	MOV		DI,165
	JMP		FF			
NEXT3:	CMP		AL,34H
	JNE		NEXT4
	MOV		DI,175
	JMP		FF		
NEXT4:	CMP		AL,35H
	JNE		NEXT5
	MOV		DI,196
	JMP		FF
NEXT5:	CMP		AL,36H
	JNE		NEXT6
	MOV		DI,220
	JMP		FF	
NEXT6:	CMP		AL,37H
	JNE		NEXT7
	MOV		DI,247
	JMP		FF
NEXT7:	CMP		AL,38H
	JNE		NEXT8
	MOV		DI,262
	JMP		FF
NEXT8:	CMP		AL,39H
	JNE		NEXT9
	MOV		DI,294
	JMP		FF
NEXT9:	CMP		AL,30H
	JNE		OTHERS
	MOV		DI,330
	JMP		FF
FF:	CALL	SOUND
	JMP	THEN
OTHERS:	RET
DPIANO	ENDP
		

CODE	ENDS
	END 	STAT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -