南邮微机接口实验——基于中断的屏幕字符串屏幕动态显示

程序首先关中断,然后保存系统的1CH型中断向量,然后写入用户的1CH型中断向量。然后开中断。

在主程序中,不断判断COUNT是否为0,如果COUNT为0,则表示已经显示了所有要显示的字符串,调用RESET子程序恢复原始的1CH型中断向量。如果不为0,则不进行任何操作。

在1CH型中断服务子程序中,首先保护现场,重新定义用户数据段,然后中断计数ICOUNT,如果满了18次,则执行显示字符串,并将ICOUNT重新置18,且COUNT减1,否则直接退出。退出中断服务的时候要恢复现场。

.486
DATA SEGMENT USE16
MESG 	DB	'B15040317',0DH,0AH,'$'
OLD1C	DD	?
ICOUNT	DB	9
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
		DEC ICOUNT
		JNZ EXIT
		MOV ICOUNT,9
		DEC COUNT
		MOV AH,9
		LEA DX,MESG
		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、付费专栏及课程。

余额充值