📄 myshizhong11.asm
字号:
DATA SEGMENT
OLDOFF DW ?
OLDSEG DW ?
COUNT DB 18
TENHO DB '0'
HOUR DB '0:'
TENMIN DB '0'
MINUTE DB '0:'
TENSEC DB '0'
SECOND DB '0',0DH,'$'
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV CX,0H ;存系统时钟的中断服务程序入口地址
MOV AX,1CH
mov cl,2
SHL AL,cl
MOV DI,AX
MOV AX,0
MOV ES,AX ;此时ES:DI是中断向量的地址
cli ;禁止中断
MOV ES:[DI],AX
MOV OLDOFF,AX
LEA AX,MYINT1C
MOV ES:[DI],AX
MOV AX,ES:[DI+2]
MOV OLDSEG,AX
MOV AX,CS
MOV ES:[DI+2],AX
STI ;允许中断
;取系统时间,并存入内存
MOV DI,OFFSET TENHO ;取小时
MOV AH,2CH
INT 21H
MOV AL,CH
CBW
MOV DL,10D
DIV DL
ADD AL,48
ADD AH,48
MOV [DI],AL
MOV [DI+1],AH
MOV AL,CL ;取分钟
CBW
MOV DL,10D
DIV DL
ADD AL,48
ADD AH,48
MOV [DI+3],AL
MOV [DI+4],AH
MOV AL,DH ;取秒
CBW
MOV DL,10D
DIV DL
ADD AL,48
ADD AH,48
MOV [DI+6],AL
MOV [DI+7],AH
MOV DI,20H ;中断程序入口地址送中断向量表
MOV AX,OFFSET MYINT1C
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS
MOV ES:[DI],AX ;MYINT1C中断程序开始执行
FOREVE: MOV AH,02H ;置光标位置(显示器软中断服务程序)
MOV BH,00H ;页号
MOV DH,0AH ;行
MOV DL,01H ;列
INT 10H
MOV AH,9 ;显示时:分:秒
MOV DX,OFFSET TENHO
INT 21H
MOV AL,SECOND ;等待一秒钟
HERE: CMP AL,SECOND
JE HERE
MOV AH,0BH
INT 21H ;AL=00有按键,AL=FF无按键
INC AL ;判断是否有按键
JNZ FOREVE ;若无按键则不停地显示时间
MOV AH,00H
INT 16H
CMP AH,01H
JNZ FOREVE ;判断是否是esc
MOV AX,1CH
mov cl,2 ;恢复系统时钟的中断向量表
SHL AX,cl
MOV DI,AX
MOV AX,0
MOV ES,AX
CLI
MOV AX,OLDOFF
MOV ES:[DI],AX
ADD DI,2
MOV AX,OLDSEG
MOV ES:[DI],AX
STI
MAIN ENDP
MYINT1C PROC FAR
DEC COUNT ;计数器减一
JNZ TIMER ;不到1秒,退出中断
MOV COUNT,18 ;已到1秒,恢复软件计数器
INC SECOND ;秒加1
CMP SECOND,'9' ;十秒位是否增1
JLE TIMER ;否,退出中断
MOV SECOND,'0' ;秒位置0
INC TENSEC ;使秒位加1
CMP TENSEC,'6' ;是否满1分
JL TIMER ;否,退回中断
MOV TENSEC,'0' ;满,十秒为置0
INC MINUTE ;分加1
CMP MINUTE,'9'
JLE TIMER
MOV MINUTE,'0'
INC TENMIN
CMP TENMIN,'6' ;是否满1小时
JL TIMER
MOV TENMIN,'0' ;满,十分位置0
INC HOUR
CMP HOUR,'9'
JA ADJHO
CMP HOUR,'3'
JBE TIMER
CMP TENHO,'1'
JBE TIMER
MOV HOUR,'0'
MOV TENHO,'0'
JMP TIMER
ADJHO: INC TENHO
MOV HOUR,'0'
TIMER: MOV AL,20H ;中断结束命令
OUT 20H,AL
IRET
MYINT1C ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -