MOV BH,0H MOV DH,DH1 MOV DL,DL1 INT 10H POP DX POP BX POP AX ENDM
CLEARSCREEN MACRO CH1,CL1,DH1,DL1,BH1 MOV AH,6 MOV AL,0 MOV CH,CH1 MOV CL,CL1 MOV DH,DH1 MOV DL,DL1 MOV BH,BH1 INT 10H ENDM
;1.倒计时程序主程序
CODE SEGMENT PARA 'CODE'
ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR
PUSH DS XOR AX,AX PUSH AX
MOV AX,DATA MOV DS,AX
SETF 0BH,1BH
CLEARSCREEN 08H,15H,10H,3AH,0FH MOV DX,OFFSET DISP_WELCOME CALL PRINT
SETF 0EH,19H
MOV DX,OFFSET DISP_CHOOSE CALL PRINT
CALL GETDATE CALL GETTIME CIRCLE: MOV AH,01H INT 21H CMP AL,'E'
- 9 -
JZ BEGIN CMP AL,'S' JZ SETTIME CMP AL,'Q' JZ QUIT SETTIME:
CLEARSCREEN 00H,00H,18H,4FH,0FH SETF 09H,14H
MOV DX,OFFSET SHOW_RESET CALL PRINT
;CALL SET_TIME CALL SET_COUNT JMP BEGIN
QUIT: JMP NEXT BEGIN: JMP BEGIN_1
BEGIN_1:CLEARSCREEN 00H,00H,18H,4FH,62H CLEARSCREEN 02H,09H,12H,48H,48H CLEARSCREEN 03H,0BH,11H,46H,03H DIS_SCREEN: SETF 07H,13H CALL DISP CALL DISP_COUNT CALL DELAY CALL DEC_TIME CALL INC_1S MOV AH,0BH INT 21H INC AL JNZ DIS_SCREEN JMP CIRCLE NEXT:RET MAIN ENDP
;2.设置倒计时子程序 SET_COUNT PROC NEAR
PUSH AX
MOV AH,01H INT 21H
AND AL,0FH
MOV [DISPCOUNT],AL
INT 21H
- 10 -
AND AL,0FH
MOV [DISPCOUNT+1],AL
INT 21H
INT 21H
AND AL,0FH
MOV [DISPCOUNT+3],AL
INT 21H
AND AL,0FH
MOV [DISPCOUNT+4],AL
INT 21H
INT 21H
AND AL,0FH
MOV [DISPCOUNT+6],AL
INT 21H
AND AL,0FH
MOV [DISPCOUNT+7],AL
INT 21H
INT 21H
AND AL,0FH
MOV [DISPCOUNT+9],AL
INT 21H
AND AL,0FH
MOV [DISPCOUNT+10],AL POP AX RET
SET_COUNT ENDP
;3.设置时间
SET_TIME PROC NEAR
PUSH AX
MOV AH,01H INT 21H
AND AL,0FH
MOV [DISPTIME],AL
- 11 -
INT 21H
AND AL,0FH
MOV [DISPTIME+1],AL
INT 21H
INT 21H
AND AL,0FH
MOV [DISPTIME+3],AL
INT 21H
AND AL,0FH
MOV [DISPTIME+4],AL
INT 21H
INT 21H
AND AL,0FH
MOV [DISPTIME+6],AL
INT 21H
AND AL,0FH
MOV [DISPTIME+7],AL
POP AX RET
SET_TIME ENDP ;4.打印子程序 PRINT PROC NEAR
PUSH AX MOV AH,09H INT 21H POP AX RET
PRINT ENDP
;5.延时子程序
DELAY PROC NEAR
PUSH BX PUSH AX PUSH CX MOV BL,75D WAITF2: MOV CX,6632D
- 12 -
WAITF1:
IN AL,61H AND AL,10H CMP AL,AH JE WAITF1 MOV AH,AL LOOP WAITF1 DEC BL CMP BL,0 JNZ WAITF2 POP CX POP AX POP BX RET DELAY ENDP
;6.日期获取子程序 GETDATE PROC NEAR
PUSH BX PUSH AX PUSH DX
MOV AH,2AH INT 21H
PUSH DX MOV BX,1000D MOV DX,0 MOV AX,CX DIV BX
AND AX,0FFH
MOV [DISPDATE],AL
XOR BX,BX MOV BL,100D MOV AX,DX DIV BL
MOV [DISPDATE+1],AL
XOR BL,BL XOR AL,AL MOV BL,10D MOV AL,AH AND AX,0FFH DIV BL
- 13 -