DATA SEGMENT NUMS dw 0fffh;数据段
NUM dw 01fffh ; NUML dw 02fffh ;延时大小 DATA ENDS
STACK SEGMENT STACK'STACK'
DB 100H DUP(?)
STACK ENDS
CODE SEGMENT ;代码段
ASSUME CS:CODE, DS:DATA, SS:STACK
DELAY PROC FAR ;延时子程序
PUSHF PUSH CX MOV CX,NUM
LOOP1: PUSH CX
MOV CX,NUM
LOOP2: LOOP LOOP2
POP CX LOOP LOOP1 POP CX POPF RETF
21
DELAY ENDP
DELAYS PROC FAR ;延时子程序 PUSHF PUSH CX
MOV CX,NUM
LOOPS1: PUSH CX
MOV CX,NUMS
LOOPS2: LOOP LOOPS2 POP CX LOOP LOOPS1 POP CX POPF
RETF
DELAYS ENDP
DELAYL PROC FAR ;延时子程序 PUSHF PUSH CX
MOV CX,NUM
LOOPL1: PUSH CX
MOV CX,NUML
22
LOOPL2: LOOP LOOPL2 POP CX LOOP LOOPL1 POP CX POPF
RETF
DELAYL ENDP
singdo proc far do:
mov dx,0e8e0h; in al,dx;
test al,02h; jz dodelay; mov dx,0E820h mov al,7Dh out dx,al
MOV DX,0E800H MOV AL,21H OUT DX,AL CALL DELAY
retf
;音阶do的发声及显示子程序;test stop or not ;stop ;timer0 set ;do ;led show ;\23
dodelay: mov dx,0E820h ;timer0 set mov al,00h ;do out dx,al mov dx,0e800h mov al,21h out dx,al
jmp do
singdo endp
singre proc far re:
mov dx,0e8e0h; in al,dx;
test al,02h jz redelay mov dx,0E820h mov al,6FH out dx,al
MOV DX,0E800H MOV AL,0F4H OUT DX,AL
CALL DELAY
;音阶re的发声及显示子程序 ;test stop or not ;stop ;timer0 set ;re ;led show ;\24
retf
redelay: mov dx,0E820h ;timer0 set mov al,00H ;re out dx,al
MOV DX,0E800H MOV AL,0F4H OUT DX,AL jmp re
singre endp
singmi proc far mi:
mov dx,0e8e0h; in al,dx;
test al,02h jz midelay mov dx,0E820h mov al,64H out dx,al
MOV DX,0E800H
MOV AL,0F1H ;led show ;\;音阶mi的发声及显示子程序 ;test stop or not ;stop ;timer0 set ;mi ;led show ;\25