📄 nczl.asm
字号:
.386
STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:CODE,SS:STACK
COUNT DB 18
HOUR DB ?,?,':'
MIN DB ?,?,':'
SEC DB ?,?,':'
BUF_LEN =$-HOUR
CURSOR DW ?
OLD_INT DW ?,?
NEW08H PROC FAR
PUSHF
CALL DWORD PTR CS: OLD_INT
DEC CS:COUNT
JZ DIZP
IRET
DISP: MOV CS:COUNT ,18
STI
PUSHA
PUSH DS
PUSH ES
MOV AX,CS
MOV DS,AX
MOV ES,AX
CALL GET_TIME
MOV BH,0
MOV AH,3
INT 10H
MOV CURSOR,DX
MOV BP,OFFSET HOUR
MOV BH,0
MOV BH,0
MOV DL,80-BUF_LEN
MOV BL,07H
MOV CX,BUF_LEN
MOV AL,0
MOV AH,13H
INT 10H
MOV BH,0
MOV DX,CURSOR
MOV AH,2H
INT 10H
POP ES
POP DS
POPA
IRET
NEW08H ENDP
GET_TIME PROC
MOV AL,4H
OUT 70H,AL
JMP $+2
IN AL,71H
MOV AH,AL
AND AL,0FH
SHR AH,4
ADD AX,3030H
XCHG AH,AL
MOV WORD PTR HOUR,AX
MOV AL,2
OUT 70H,AL
JMP $+2
IN AL,71H
MOV AH,AL
AND AL,0FH
SHR AH,4
ADD AX,3030H
XCHG AH,AL
MOV WORD PTR MIN,AX
MOV AL,0
OUT 70H,AL
JMP $+2
IN AL,71H
MOV AH,AL
AND AL,0FH
SHR AH,4
ADD AX.3030H
XCHG AH,AL
MOV WORD PTR SEC,AX
RET
GET_TIME ENDP
BEGIN: PUSH CS
POP DS
MOV AX,3508H
INT 21H
MOV OLD_INT,BX
MOV OLD_INT+2,ES
MOV DX,OFFSET NEW08H
MOV AX,2508H
INT 21H
NEXT: MOV AH,0
INT 16H
CMP AL,'q'
JNE NEXT
LDS DX,DWORD PTR OLD_INT
MOV AX,2508H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -