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

设置中断向量

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

(1)、DOS功能调用的方法

中断21H之功能25H可为指定的中断号设置新的入口地址。其使用方法如下:

入口参数:AH=中断号,DS:DX=中断处理程序的入口地址

出口参数:无

例8.17 用功能调用的方法把子程序NewFunc设置为中断n的中断处理程序。

解:

……

NewFuncPROC

……

IRET;注意其返回指令

NewFuncENDP

……

MOVAX, SEG NewFunc

MOVDS, AX;设置段地址寄存器

MOVDX, OFFSET NewFunc;设置偏移量

MOVAL, n;这里的n要用具体的中断号来定

MOVAH, 25H

INT21H

……

(2)、直接访问存储单元的方法

例8.18 用直接访问存储单元的方法把子程序NewFunc设置为中断n的中断处理程序。

解:

……

NewFuncPROC

NewFunc……

IRET;注意其返回指令

ENDP

……

MOVAX, 0H

MOVDS, AX

MOVBX, 4*n

CLI

MOVword ptr [BX], OFFSET NewFunc;设置中断处理程序的偏移量

MOVword ptr [BX+2], SEG NewFunc;设置中断处理程序的段地址

STI

……

在上面程序段中,指令CLI是一条值得注意的指令,它用来确保随后二条MOV指令被连续执行而不被打断。这是因为执行其第一条MOV指令后,原中断向量表中的入口地址就被破坏了,这时,该入口地址既不是指向原处理程序,也不指向新处理程序。如果此刻正巧发生了该类型的中断请求,那么,系统将转向一个非法的位置。如果程序员能确信此时不会发生该类型的中断请求,当然也就不必插入关中断指令。

后面的指令STI是开中断指令,它允许cpu响应其后的中断请求。

喜欢0 评分0
游客

返回顶部