灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3038回复:0

修改中断向量的步骤

楼主#
更多 发布于:2012-09-10 18:56

前面,分别介绍了读取和设置中断入口地址的方法。在编程的实际过程中,若要修改某个具体的中断处理程序时,一般需按下面几步来完成:

1)、读取指定中断的中断处理程序入口地址,并把它保存在存储单元内;

2)、把用户编写的程序段设置为指定中断的新处理程序;

3)、在用户程序结束之前(或不需要新的处理程序时),把步骤1保存的入口地址恢复成处理该中断的入口地址。

程序员按以上三步来编程,可保证:在其程序运行过程中,该指定的中断将按新的处理程序来处理,程序结束后,中断系统又恢复成原来的处理方式。所以,这种中断向量的改变对其它程序或使用者来说是透明的,当然也就不会影响它们的正常运作。

以上三步具体化的形式如下:

……

INTNOEQU 40H;假设被修改的中断号

OldAddrDD ?

……

NewFuncPROC;新的中断处理程序

NewFunc……

IRET

ENDP

……

MOVAL, INTNO

MOVAH, 35H

INT21H

MOVword ptr OldAddr, BX

MOVword ptr OldAddr+2, ES;步骤1:保存原入口地址

MOVDX, OFFSET NewFunc

MOVAX, SEG NewFunc

MOVDS, AX

MOVAL, INTNO

MOVAH, 25H

INT21H;步骤2:设置新的入口地址

……

;用户编写的主要程序

……

MOVDX, word ptr OldAddr

MOVDS, word ptr OldAddr+2;本指令与上一条指令能交换吗?

MOVAL, INTNO

MOVAH, 25H

INT21H;步骤3:恢复原入口地址

……

END

喜欢0 评分0
游客

返回顶部