?? music.asm
字號(hào):
STACK SEGMENT PARA STACK
DW 200 DUP(?)
STACK ENDS
DATA SEGMENT
FQ DW 262,294,330,349,392,440,494
DW 523,578,659,698,784,880,988
DW 1046,1175,1318,1397,1568,1760,1976
KV DB 'WERTYUISDFGHJKZXCVBNM'
LS DB 'LOW $'
MS DB 'MIDDLE $'
HS DB 'HIGH $'
SFDI DB '1234567'
ERHINT DB 'ERROR $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
ADR DD ?
PROT DB ?
MAIN:MOV AX,DATA
MOV DS,AX
LEA BX,SFDI
IN AL,61H
MOV CS:PROT,AL
START:MOV AH,8
INT 21H
CMP AL,'P'
JZ EXIT_0
CMP AL,' '
JZ STOP_0
MOV SI,0
MOV CX,21
COMPARE:CMP AL,[KV+SI]
JZ SOUND
INC SI
LOOP COMPARE
SOUND:CMP SI,6
JNA LOW_0
CMP SI,13
JNA MIDDLE_0
CMP SI,20
JNA HIGH_0
CMP SI,20
JA ERROR_0
FLAG:MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV AX,2
MUL SI
MOV SI,AX
MOV AH,2
INT 21H
MOV AL,0B6H
OUT 43H,AL
MOV DX,14H
MOV AX,4F38H
DIV [FQ+SI]
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
OR AL,3
OUT 61H,AL
JMP START
ERROR_0:LEA DX,ERHINT
MOV AH,9
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
JMP START
EXIT_0:MOV AL,BYTE PTR CS:PROT
OUT 61H,AL
MOV AH,4CH
INT 21H
STOP_0:AND AL,0FCH
OUT 61H,AL
JMP START
LOW_0:LEA DX,LS
MOV AH,9
INT 21H
MOV DL,BYTE PTR [BX+SI]
MOV AH,2
INT 21H
JMP FLAG
MIDDLE_0:LEA DX,MS
MOV AH,9
INT 21H
MOV DL,BYTE PTR [BX+SI-7]
MOV AH,2
INT 21H
JMP FLAG
HIGH_0:LEA DX,HS
MOV AH,9
INT 21H
MOV DL,BYTE PTR [BX+SI-14]
MOV AH,2
INT 21H
JMP FLAG
CODE ENDS
END MAIN
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -