Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2076635
  • 博文数量: 519
  • 博客积分: 10070
  • 博客等级: 上将
  • 技术积分: 3985
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-29 14:05
个人简介

只问耕耘

文章分类

全部博文(519)

文章存档

2016年(1)

2013年(5)

2011年(46)

2010年(220)

2009年(51)

2008年(39)

2007年(141)

2006年(16)

我的朋友

分类: WINDOWS

2010-03-19 09:28:24

汇编语言教程-修改中断向量的步骤
前面,分别介绍了读取和设置中断入口地址的方法。在编程的实际过程中,若要修改某个具体的中断处理程序时,一般需按下面几步来完成:
1)、读取指定中断的中断处理程序入口地址,并把它保存在存储单元内;
2)、把用户编写的程序段设置为指定中断的新处理程序;
3)、在用户程序结束之前(或不需要新的处理程序时),把步骤1保存的入口地址恢复成处理该中断的入口地址。
程序员按以上三步来编程,可保证:在其程序运行过程中,该指定的中断将按新的处理程序来处理,程序结束后,中断系统又恢复成原来的处理方式。所以,这种中断向量的改变对其它程序或使用者来说是透明的,当然也就不会影响它们的正常运作。
以上三步具体化的形式如下:
……
INTNOEQU40H;假设被修改的中断号
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
 

阅读(2797) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~