📄 clock.asm
字号:
DSEG SEGMENT
HOUR DB ?,?,'$'
MINUTE DB ?,?,'$'
SECOND DB ?,?,'$'
FLAG DB 3AH,'$'
END1 DB 0AH,0DH,'$'
DSEG ENDS
;******************************************
SHOW MACRO ADDR
LEA DX,ADDR
MOV AH,9
INT 21H
ENDM
;
CLS MACRO
MOV AX,0600H
MOV BH,05FH
MOV CH,0
MOV CL,0
MOV DH,29
MOV DL,79
INT 10H
ENDM
;***************************************
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AH,0
MOV AL,01H
INT 10H
CLS
;
MOV AX,DSEG
MOV DS,AX
;
WINDOW:
MOV AH,7
MOV AL,0
MOV BH,02FH
MOV CH,8
MOV CL,8
MOV DH,12
MOV DL,30
INT 10H
KEY_TEST:
MOV AH,0BH
INT 21H
CMP AL,0
JNZ EXIT
;
GET_SYSTIME:
MOV AH,02
INT 1AH
;
CHANGE_HOUR:
MOV AL,CL ;将CL分钟暂存在AL中
MOV SI,0
MOV DL,CH ;CH、DH暂存小时
MOV CL,4
SHR DL,CL
OR DL,30H
MOV HOUR[SI],DL
AND CH,0FH
OR CH,30H
INC SI
MOV HOUR[SI],CH
;
CHANGE_MINUTE:
MOV SI,0
MOV DL,AL ;AL、DL暂存分钟
MOV CL,4
SHR DL,CL ;逻辑右移4位,只保留高位
OR DL,30H ;转化为十进制
MOV MINUTE[SI],DL
AND AL,0FH ;只保留最低位
OR AL,30H ;转化为十进制
INC SI
MOV MINUTE[SI],AL
;
CHANGE_SECOND:
MOV SI,0
MOV DL,DH ;DH、DL暂存秒
MOV CL,4
SHR DL,CL ;逻辑右移4位,只保留高位
OR DL,30H ;转化为十进制
MOV SECOND[SI],DL
AND DH,0FH ;只保留最低位
OR DH,30H ;转化为十进制
INC SI
MOV SECOND[SI],DH
;
LOCAT: ;----------------设置时钟显示位置
MOV AH,2
MOV DH,10
MOV DL,15
MOV BH,0
INT 10H
;
SHOW_TIME:
SHOW HOUR
SHOW FLAG
SHOW MINUTE
SHOW FLAG
SHOW SECOND
SHOW END1
;
MOV BL,2
LP:
MOV CX,33144
CALL WAITF
DEC BL
JNZ LP
JMP KEY_TEST
WAITF PROC NEAR
PUSH AX
WAITF1:
IN AL,61H
AND AL,10H
CMP AL,AH
JE WAITF1
MOV AH,AL
LOOP WAITF1
POP AX
RET
WAITF ENDP
;
EXIT:
MOV AH,0
MOV AL,3
INT 10H
;
MOV AX,4C00H
INT 21H
CSEG ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -