📄 tim.asm
字号:
stack segment stack 'stack'
dw 32 dup(?)
stack ends
data segment
COUNT DB 18
t db 0
m db 0
s db 0
tn equ 65520
mn equ 1092
sn equ 18
BUFFER DB 9,0
TENHO DB '0'
HOUR DB '0:'
TENMIN DB '0'
MINUTE DB '0:'
TENSEC DB '0'
SECOND DB '0',0DH,'$'
STORE DW 0,0
data ends
code segment
main proc far
assume cs:code,ds:data,ss:stack
push ds
mov ax,0
push ax
MOV ES,AX
mov ax,data
mov ds,ax
MOV DI,OFFSET STORE ;保存系统时钟的中断服务程序入口地址
MOV AX,ES:20H
MOV [DI],AX
INC DI
INC DI
MOV AX,ES:22H
MOV [DI],AX
mov ah,0
int 1ah
xchg ax,dx
mov dx,cx
mov cx,tn
div cx
mov t,al
mov ax,dx
mov cx,mn
xor dx,dx
div cx
mov m,al
mov ax,dx
mov cl,18
div cl
mov s,al
xor ah,ah
aam
or ax,3030h
mov TENSEC,ah
mov SECOND,al
xor ax,ax
mov al,m
aam
or ax,3030h
mov TENMIN,ah
mov MINUTE,al
xor ax,ax
mov al,t
aam
or ax,3030h
mov TENHO,ah
mov HOUR,al
mov si,offset TENHO
MOV BH,12H ;清屏(显示器软中断程序)
MOV CH,0 ;书本369页“下滚当前页”
MOV CL,0
MOV DH,24
MOV DL,79
MOV AL,0
MOV AH,7
INT 10H
MOV DI,20H ;中断程序入口地址送中断向量表
MOV AX,OFFSET TIMERX
MOV ES:[DI],AX
INC DI
INC DI
MOV AX,CS
MOV ES:[DI],AX
FOREVE: MOV AH,2 ;置光标位置(显示器软中断服务程序)
MOV BH,0 ;书本368页
MOV DH,12
MOV DL,24
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
INC AL
JNZ FOREVE
MOV DI,20H ;恢复系统时钟的中断向量表
MOV AX,STORE
MOV ES:[DI],AX
INC DI
INC DI
MOV AX,STORE+2
MOV ES:[DI],AX
ret
main endp
TIMERX 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 ;小时加1
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
TIMERX ENDP
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -