📄 clock.asm
字号:
STACK SEGMENT STACK
DB 256 DUP(0)
STACK ENDS
DATA SEGMENT
COUNT100 DB 100
TENHOUR DB '0'
HOUR DB '0'
DB ':'
TENMIN DB '0'
MINUTE DB '0'
DB ':'
TENSEC DB '0'
SECOND DB '0'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV AX,DATA
MOV DS,AX
MOV AH,0
INT 16H
CLI
MOV AX,0
MOV ES,AX
MOV DI,20H
MOV AX,OFFSET TIMER
STOSW
MOV AX,CS
STOSW
MOV AL,36H
OUT 43H,AL
MOV BX,11932
MOV AL,BL
OUT 40H,AL
MOV AL,BH
OUT 40H,AL
IN AL,21H
AND AL,0FEH
OUT 21H,AL
STI
FOREVER:MOV BX,OFFSET TENHOUR
MOV CX,8
DISPCLK:MOV AL,[BX]
CALL DISPCHAR
INC BX
LOOP DISPCLK
MOV AL,0DH
CALL DISPCHAR
MOV AL,SECOND
WAITL: CMP AL,SECOND
JZ WAITL
JMP FOREVER
TIMER PROC
PUSH AX
DEC COUNT100
JNZ TIMERX
MOV COUNT100,100
INC SECOND
CMP SECOND,'9'
JLE TIMERX
MOV SECOND,'0'
INC TENSEC
CMP TENSEC,'6'
JL TIMERX
MOV TENSEC,'0'
INC MINUTE
CMP MINUTE,'9'
JLE TIMERX
MOV MINUTE,'0'
INC TENMIN
CMP TENMIN,'6'
JL TIMERX
MOV TENMIN,'0'
INC HOUR
CMP HOUR,'9'
JA ADJHOUR
CMP HOUR,'3'
JNZ TIMERX
CMP TENHOUR,'1'
JNZ TIMERX
MOV HOUR,'1'
MOV TENHOUR,'0'
JMP TIMERX
ADJHOUR:INC TENHOUR
MOV HOUR,'0'
TIMERX: MOV AL,20H
OUT 20H,AL
POP AX
IRET
TIMER ENDP
DISPCHAR PROC
PUSH BX
MOV BX,0
MOV AH,14
INT 10H
POP BX
RET
DISPCHAR ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -