利用INT 1CH(大约每秒中断18.2次)编写一个中断驻留程序,要求在屏幕的右上角显示计算机中当前系统时间,显示格式为
时:分:秒:1/100秒
主要是不知道 INT 1CH怎么用 啥意思 书上没 也很难查到
最好都写出来 谢谢
利用INT 1CH(大约每秒中断18.2次)编写一个中断驻留程序,要求在屏幕的右上角显示计算机中当前系统时间,显示格式为
时:分:秒:1/100秒
主要是不知道 INT 1CH怎么用 啥意思 书上没 也很难查到
最好都写出来 谢谢
我给你一个吧,完全符合你的要求的,也测试了
cursor equ 45h
attrib equ 2fh
code segment
assume cs:code,ds:code
start:
jmp go
oldcur dw ?
old1c dw 2 dup(?)
newint1c:
pushf
call dword ptr cs:old1c
push ax
push bx
push cx
push dx
xor bh,bh
mov ah,3
int 10h
mov cs:oldcur,dx
mov ah,2
xor bh,bh
mov dx,cursor
int 10h
mov ah,2ch
int 21h ;读取系统时钟
;-------------------------
;ch = hour
;cl = minute
;dh = second
;dl = 1/100 seconds
;------------------------
push dx
push cx
;show hour
pop bx
push bx
call showhour
call showcolon
;show minute
pop bx
call showmin
call showcolon
;show second
pop bx
push bx
call showsec
call showcolon
;show 10 msec
pop bx
call showmin
mov dx,cs:oldcur
mov ah,2
xor bh,bh
int 10h
pop dx
pop cx
pop bx
pop ax
iret
showhour proc near
push bx
pop ax
mov cl,8
shr ax,cl
mov bl,10
div bl
;-------------------------
;al = shang
;ah = yushu
;------------------------
add al,30h
call show
call curmove
mov cl,8
shr ax,cl
add al,30h
call show
call curmove
ret
showhour endp
showmin proc near
push bx
pop ax
mov cl,8
shl ax,cl
shr ax,cl
mov bl,10
div bl
;-------------------------
;ax = shang
;dx = yushu
;------------------------
add al,30h
call show
call curmove
mov cl,8
shr ax,cl
add al,30h
call show
call curmove
ret
ret
showmin endp
showsec proc near
push bx
pop ax
mov cl,8
shr ax,cl
mov bl,10
div bl
;-------------------------
;ax = shang
;dx = yushu
;------------------------
add al,30h
call show
call curmove
mov cl,8
shr ax,cl
add al,30h
call show
call curmove
ret
ret
showsec endp
showcolon proc near
mov al,':'
call show
call curmove
ret
showcolon endp
curmove proc near
push ax
push bx
push cx
push dx
mov ah,3
mov bh,0
int 10h
inc dl
mov ah,2
int 10h
pop dx
pop cx
pop bx
pop ax
ret
curmove endp
show proc near
push ax
push bx
push cx
mov ah,09h
mov bx,attrib
mov cx,1
int 10h
pop cx
pop bx
pop ax
ret
show endp
go:
push cs
pop ds
mov ax,351ch ;取中断向量
int 21h
mov old1c,bx ;保存原中断向量
mov bx,es
mov old1c+2,bx
mov dx,offset newint1c ;置新的中断向量
mov ax,251ch
int 21h
mov dx,offset go
sub dx,offset start
mov cl,4
shr dx,cl
add dx,11h
mov ax,3100h ;结束并驻留
int 21h
code ends
end start