使用中断程序设计的方法,编写一个驻留程序,该程序可以在屏幕窗口的右下角显示当前的时间,格式为HH:MM:SS,时间的显示不能影响前台程序的正常运行。
时间: 2023-06-17 18:07:19 浏览: 132
以下是一个使用中断程序设计的方法编写的驻留程序,可以在屏幕窗口的右下角显示当前时间,不会影响前台程序的正常运行。
```assembly
.model small
.stack 100h
.data
hour db 0
minute db 0
second db 0
colon db ':'
.code
org 100h
main proc
mov ax, @data
mov ds, ax
; 设置中断向量表
mov ah, 25h
mov al, 4
mov dx, offset int25h
int 21h
; 设置定时器中断
mov al, 34h
out 43h, al
mov bx, offset timer_handler
mov al, bh
out 40h, al
mov al, bl
out 40h, al
; 进入循环
mov ah, 4ch
int 21h
main endp
; 中断处理程序
int25h proc
push ax
push bx
push cx
push dx
; 获取当前时间
mov ah, 2ch
int 21h
mov hour, ch
mov minute, cl
mov second, dh
; 在屏幕窗口右下角显示时间
mov ah, 0fh
int 10h
mov ah, 13h
mov al, hour
mov bl, 1
int 10h
mov al, colon
mov bl, 1
int 10h
mov al, minute
mov bl, 1
int 10h
mov al, colon
mov bl, 1
int 10h
mov al, second
mov bl, 1
int 10h
pop dx
pop cx
pop bx
pop ax
iret
int25h endp
; 定时器中断处理程序
timer_handler proc
; 发送中断结束信号到中断控制器
mov al, 20h
out 20h, al
; 重新设置定时器中断
mov al, 34h
out 43h, al
mov bx, offset timer_handler
mov al, bh
out 40h, al
mov al, bl
out 40h, al
; 增加一秒钟
inc second
cmp second, 60
jne skip_minute
mov second, 0
; 增加一分钟
inc minute
cmp minute, 60
jne skip_hour
mov minute, 0
; 增加一小时
inc hour
cmp hour, 24
jne done
mov hour, 0
done:
ret
skip_hour:
ret
skip_minute:
ret
timer_handler endp
end main
```
该程序使用中断程序设计的方法,通过设置定时器中断来触发时间的显示和更新。每秒钟产生一个定时器中断,驱动计时器计数器,当计数器到达设定值时,会触发定时器中断处理程序。在处理程序中,获取当前时间并在屏幕窗口右下角显示时间,然后增加一秒钟,如果到达一分钟或一小时,就相应地增加分钟或小时。同时,发送中断结束信号到中断控制器,并重新设置定时器中断。这样,该程序就可以在后台驻留,并且不会影响前台程序的正常运行。