Board logo

标题: [求助]请问一个关于dos 中断的取代问题!(灌水免入!) [打印本页]

作者: jihao1234567     时间: 2004-6-3 00:00    标题: [求助]请问一个关于dos 中断的取代问题!(灌水免入!)

小弟用的各版本的DOS截图程序都无法满足需要,所以打算写一个程序来用
但是出现一个问题:
因为程序要驻留内存并监听,所以我打算用dos int 21h 功能 25h更换
int指向地址,但是我以后如何使用我已经保存好的原BIOS中断
16h的地址来做到将普通的键盘按下转入原来的int地址?

请帮忙解决,不胜感激!!!
(灌水免入!!!!!!!!!!!!!!!!!!!!!!!!)
作者: jihao1234567     时间: 2004-6-3 00:00
有人可以回答吗????
作者: Loff     时间: 2004-6-4 00:00
是用汇编编写吗?如果是的,直接call XXXX(XXXX代表原来的中断处理函数现在的地址)即可。
      如果是C语言,我倒没试过,你可以看看用“指向函数的指针”行不行:定义一个指向函数的指针,用getvect()函数(TruboC才有的函数)获得原来中断函数的入口地址,赋值给这个函数指针,以后只要用这个指针名调用函数即可。
作者: jihao1234567     时间: 2004-6-5 00:00
感谢………………
我除了VB会一点以外其他的就只会ASM了……………………我把这个看成第2生命……
借用一句不知那位的话………………“DOS是我的初恋,ASM是我的母语…………”
作者: defrag     时间: 2004-12-19 00:00
纯真的DOS年代曾经说过:有着女友的清茶和美妙的中断
作者: defrag     时间: 2004-12-19 00:00
不好意思别当灌水帖子删掉
作者: XK     时间: 2005-1-17 00:00
在C下很简单,如果你的编译器是BORLAND的话,那么按照下面的来做:#include <dos.h>extern void  (*old_int)() ;old_int = getvect( int_num ) ;接着在用setvect函数修改VECT表。以后当你需要原先的中断程序的时候,这样执行:(*old_int)() ; 就可以了。或者如果你在汇编下的,也比较简单。我们知道VECT开始于0000:0000,在16bit下,一个地址是一个DWORD。那么我们可以先计算出中断号对应的偏移,假定是OLD_INT,那么写下面的汇编指令就可以了OLD_INT  dw  ?mov  bx,word ptr [ int_num * 4 ]mov  word ptr [OLD_INT],bx mov  bx,word ptr [ int_num * 4 + 2 ]mov  word ptr [OLD_INT + 2 ],bx这样,以后,需要执行的时候,这样写就可以了call far OLD_INT