📄 time.asm
字号:
CODE SEGMENT PARA
ASSUME CS:CODE,DS:CODE
NEW_INT1C PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
STI
JMP START
COUNT DB ?
CURSOR1 DB 0,50
CURSOR2 DB 0,60
OLD_INT1C DD ?
DATE DB '1980-01-01'
D_LEN EQU $-DATE
TIME DB '00:00:00'
T_LEN EQU $-TIME
START: PUSH CS
POP DS
INC COUNT
CMP COUNT,18
JB RETURN
MOV COUNT,0
CALL GET_DATE
MOV BP,OFFSET DATE
MOV CX,D_LEN
MOV BL,70H
MOV DH,CURSOR1
MOV DL,CURSOR1+1
CALL DISP_STR
CALL GET_TIME
MOV BP,OFFSET TIME
MOV CX,T_LEN
MOV BL,73H
MOV DH,CURSOR2
MOV DL,CURSOR2+1
CALL DISP_STR
RETURN: CLI
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET
NEW_INT1C ENDP
GET_DATE PROC
MOV AH,4
INT 1AH
MOV AX,CX
LEA SI,DATE
MOV CX,4
LP1: PUSH CX
MOV CL,4
ROL AX,CL
MOV BL,AL
AND BL,0FH
OR BL,30H
MOV [SI],BL
INC SI
POP CX
LOOP LP1
MOV AX,DX
MOV CX,4
LEA SI,DATE+5
LP2: PUSH CX
MOV CL,4
ROL AX,CL
MOV BL,AL
AND BL,0FH
OR BL,30H
MOV [SI],BL
INC SI
POP CX
CMP CX,3
JNZ LP2_1
INC SI
LP2_1: LOOP LP2
RET
GET_DATE ENDP
GET_TIME PROC
MOV AH,2
INT 1AH
MOV AX,CX
MOV CX,4
LEA SI,TIME
LP3: PUSH CX
MOV CL,4
ROL AX,CL
MOV BL,AL
AND BL,0FH
OR BL,30H
MOV [SI],BL
INC SI
POP CX
CMP CX,3
JNZ LP3_1
INC SI
LP3_1: LOOP LP3
PUSH DX
MOV CL,4
SHR DH,CL
OR DH,30H
MOV TIME+6,DH
POP DX
AND DH,0FH
OR DH,30H
MOV TIME+7,DH
RET
GET_TIME ENDP
DISP_STR PROC
PUSH DS
POP ES
MOV BH,0
MOV AL,0
MOV AH,13H
INT 10H
RET
DISP_STR ENDP
H_LEN EQU $-NEW_INT1C
MAIN PROC FAR
MOV AX,CS
MOV DS,AX
MOV COUNT,0
MOV AH,35H
MOV AL,1CH ;GET INT 1Ch ADDR
INT 21H
MOV WORD PTR OLD_INT1C,BX
MOV WORD PTR OLD_INT1C+2,ES
MOV AH,25H
MOV AL,1CH
MOV DX,OFFSET NEW_INT1C ;DS=CS
INT 21H
MOV DX,(H_LEN+15)/16+10H
MOV AX,3100H
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -