这段时钟程序我根本不理解,求大家帮忙注释一下
另外运行时并不能按照准确的1秒计时,应该如何修改。
程序我只能看懂 判断 时分秒 是否超过24 60 60 那一段,其余部分很难理解,尤其是对INT 21H 这个中断起的作用不能理解
DATA SEGMENT
BUFFER DB 11
DB ?
DB 10 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
OUTCLK:MOV AX,DATA
MOV DS,AX
MOV DL,':'
MOV AH,2
INT 21H
LEA DX,BUFFER
MOV AH,0AH
INT 21H
LEA BX,BUFFER+2
MOV SI,0
AD: MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
INC BX
INC SI
CMP SI,02H
JB AD
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
LEA BX,BUFFER+2
CALL TOBCD
MOV CH,AL
ADD BX,3
CALL TOBCD
MOV DH,AL
ADD BX,3
CALL TOBCD
MOV DL,AL
AGAIN: CALL DIS
MOV AL,DL
ADD AL,1
DAA
MOV DL,AL
CMP AL,60H
JNE DISPY
MOV DL,0
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: LEA BX,BUFFER
MOV AL,0DH
MOV [BX],AL
INC BX
MOV AL,0AH
MOV [BX],AL
INC BX
MOV AL,CH
CALL TRAN
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
CALL TRAN
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
CALL TRAN
INC BX
MOV AL,'$'
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
LEA DX,BUFFER
MOV AH,9
INT 21H
MOV AH,06
MOV DL,0FFH
INT 21H
POP DX
POP CX
POP BX
JNZ GO
JMP AGAIN
GO: MOV AH,4CH
INT 21H
TOBCD PROC
MOV AL,[BX]
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
OR AL,[BX+1]
RET
TOBCD ENDP
TRAN PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET
TRAN ENDP
DIS PROC
PUSH CX
PUSH AX
MOV CX,0FFFFH
MOV AX,0F000H
GOON:DEC CX
JNE GOON
DEC AX
MOV CX,0FFFFH
JNE GOON
POP AX
POP CX
RET
DIS ENDP
CODE ENDS
END OUTCLK