NJUPT 微机 中断系统 日时钟中断之替换1CH实现字符串动态显示

本文介绍了一个利用8254定时器实现每隔55ms进行一次中断,通过置换1CH中断服务程序来实现在指定时间间隔内显示彩色字符串的方法。文章详细展示了汇编语言代码,包括中断向量的置换过程、用户中断服务的设计以及如何使用BIOS调用来显示彩色字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:

系统的8254的0号定时计数器会引发日时钟中断。

0号定时计数器每隔55ms向8259A IR0端提一次日时钟中断请求。

CPU响应之后转入08H中断服务程序,并在其中执行软件中断1CH。

所以,我们可以置换1CH的终端服务子程序,来实现系统每隔55ms执行08H的时候执行我们定义的1CH子程序。

要求:

1.每隔一定时间,显示字符串。书上的是显示黑白字符串,这里用bios调用显示彩色。

重点:

1.掌握中断向量的置换(用前保存、写入、用完恢复)
2.掌握用户中断(service)的设计(怎么样实现固定时间显示 和 彩色显示)

;njupt 3th experiment:show the character string dynamicly
.486
data segment use16
	;mesg db 'Hello,njupt!',0DH,0AH,'$'
	mesg db 'Hello,njupt!'
	ll equ $-mesg
	old1c dd ?
	icount db 18	;延迟的时间 18*55 大约是1s 
	count db 10
data ends
code segment use16
	assume cs:code,ds:data
beg:
	mov ax,data
	mov ds,ax
	cli
	call read1c
	call write1c
	sti
scan:
	cmp count,0
	jnz scan
	call reset
	mov ah,4ch
	int 21h

service proc
	pusha
	push ds
	mov ax,data
	;--mov ds,ax
	mov es,ax
	dec icount
	jnz exit
	mov icount,5 ;在这里修改每次显示延迟的时间  5*55ms
	dec count
	;mov ah,9	;原始的是用9号调用ds:dx指向要显示的字符串
	;如果要显示彩色字符串,用bios调用即可 13h显示字符串
	;lea dx,mesg
	mov ax,1301h
	mov bh,0
	mov bl,01001111B
	mov cx,LL
	mov dh,10
	sub dh,count; 行数
	mov dl,0h
	lea bp,mesg
	int 10h
	
	;int 21h
exit:	
	pop ds
	popa
	iret
service endp
;------------------------
read1c proc
	mov ax,351ch
	int 21h
	mov word ptr old1c,bx
	mov word ptr old1c+2,es
	ret
read1c endp
;----------------------------
write1c proc
	push ds
	mov ax,code
	mov ds,ax
	mov dx,offset service
	mov ax,251ch
	int 21h
	pop ds
	ret
write1c endp
;-------------------------
reset proc
	mov dx,word ptr old1c
	mov ds,word ptr old1c+2
	mov ax,251ch
	int 21h
	ret
reset endp
code ends
	end beg

效果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值