中断21H之功能25H可为指定的中断号设置新的入口地址。其使用方法如下:
入口参数:AH=中断号,DS:DX=中断处理程序的入口地址
出口参数:无
例8.17 用功能调用的方法把子程序NewFunc设置为中断n的中断处理程序。
解:
…… NewFunc PROC …… IRET ;注意其返回指令 NewFunc ENDP …… MOV AX, SEG NewFunc MOV DS, AX ;设置段地址寄存器 MOV DX, OFFSET NewFunc ;设置偏移量 MOV AL, n ;这里的n要用具体的中断号来定 MOV AH, 25H INT 21H ……
例8.18 用直接访问存储单元的方法把子程序NewFunc设置为中断n的中断处理程序。
解:
…… NewFunc PROC NewFunc …… IRET ;注意其返回指令 ENDP …… MOV AX, 0H MOV DS, AX MOV BX, 4*n CLI MOV word ptr [BX], OFFSET NewFunc ;设置中断处理程序的偏移量 MOV word ptr [BX+2], SEG NewFunc ;设置中断处理程序的段地址 STI ……
在上面程序段中,指令CLI是一条值得注意的指令,它用来确保随后二条MOV指令被连续执行而不被打断。这是因为执行其第一条MOV指令后,原中断向量表中的入口地址就被破坏了,这时,该入口地址既不是指向原处理程序,也不指向新处理程序。如果此刻正巧发生了该类型的中断请求,那么,系统将转向一个非法的位置。如果程序员能确信此时不会发生该类型的中断请求,当然也就不必插入关中断指令。
后面的指令STI是开中断指令,它允许CPU响应其后的中断请求。