Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2042732
  • 博文数量: 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 14:20:18

汇编语言教程-设置中断向量
(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响应其后的中断请求。
阅读(5609) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~