8.3.7 内存管理的中断功能
优质
小牛编辑
136浏览
2023-12-01
3、修改中断向量的步骤
前面,分别介绍了读取和设置中断入口地址的方法。在编程的实际过程中,若要修改某个具体的中断处理程序时,一般需按下面几步来完成:
1)、读取指定中断的中断处理程序入口地址,并把它保存在存储单元内;
2)、把用户编写的程序段设置为指定中断的新处理程序;
3)、在用户程序结束之前(或不需要新的处理程序时),把步骤1保存的入口地址恢复成处理该中断的入口地址。
程序员按以上三步来编程,可保证:在其程序运行过程中,该指定的中断将按新的处理程序来处理,程序结束后,中断系统又恢复成原来的处理方式。所以,这种中断向量的改变对其它程序或使用者来说是透明的,当然也就不会影响它们的正常运作。
以上三步具体化的形式如下:
…… | ||||
INTNO | EQU 40H | ;假设被修改的中断号 | ||
OldAddr | DD ? | |||
…… | ||||
NewFunc | PROC | ;新的中断处理程序 | ||
NewFunc | …… | |||
IRET | ||||
ENDP | ||||
…… | ||||
MOV | AL, INTNO | |||
MOV | AH, 35H | |||
INT | 21H | |||
MOV | word ptr OldAddr, BX | |||
MOV | word ptr OldAddr+2, ES | ;步骤1:保存原入口地址 | ||
MOV | DX, OFFSET NewFunc | |||
MOV | AX, SEG NewFunc | |||
MOV | DS, AX | |||
MOV | AL, INTNO | |||
MOV | AH, 25H | |||
INT | 21H | ;步骤2:设置新的入口地址 | ||
…… ;用户编写的主要程序 …… | ||||
MOV | DX, word ptr OldAddr | |||
MOV | DS, word ptr OldAddr+2 | ;本指令与上一条指令能交换吗? | ||
MOV | AL, INTNO | |||
MOV | AH, 25H | |||
INT | 21H | ;步骤3:恢复原入口地址 | ||
…… END |