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

题目:利用系统定时源设计1CH中断程序,要求每隔一定时间在系统机屏幕上显示一行字符串(字符串内容自定)。

程序清单:

;FILENAME:861-1.ASM
.486
DATA	SEGMENT USE16
MESG	DB	'WWW',0DH,0AH,'$'
OLD1C	DD	?
ICOUNT	DB	18   ;中断计数初值
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      ;是否已经显示10行,否转
		CALL	RESET
		MOV		AH,4CH
		INT		21H
;-------------------------------
SERVICE	PROC
		PUSHA              ;保护现场
		PUSH	DS         ;DS=40H
		MOV		AX,DATA
		MOV		DS,AX      ;重新给DS赋值
		DEC		ICOUNT     ;中断计数
		JNZ		EXIT       ;不满18次转
		MOV		ICOUNT,18
		DEC		COUNT      ;显示行数减1
		MOV		AH,9       ;显示字符串
		LEA		DX,MESG
		INT		21H
EXIT:	POP		DS         ;恢复现场
		POPA
		IRET               ;返回系统8型中断服务程序
SERVICE ENDP
;------------------------------
READ1C	PROC               ;转移系统1CH型中断向量
		MOV AX,351CH
		INT	21H
		MOV WORD PTR OLD1C,BX
		MOV WORD PTR OLD1C+2,ES
		RET
READ1C	ENDP
;-----------------------------
WRITE1C	PROC               ;写入用户1CH型中断向量
		PUSH	DS
		MOV		AX,CODE
		MOV		DS,AX
		MOV		DX,OFFSET SERVICE
		MOV		AX,251CH
		INT		21H
		POP		DS
		RET
WRITE1C ENDP
;-----------------------------
RESET PROC                 ;恢复系统1CH型中断向量
		MOV		DX,WORD PTR OLD1C
		MOV		DX,WORD PTR OLD1C+2
		MOV		AX,251CH
		INT		21H
		RET
RESET	ENDP
CODE 	ENDS
		END BEG

实验结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

全部评论

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务