题目:利用系统定时源设计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
实验结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。