中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-31 15:15
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行
DOS开发编程 & 发展交流 (开发室) » [求助]请问一个关于dos 中断的取代问题!(灌水免入!)
可打印版本  1,166 / 6
第1楼 jihao1234567 发表于 2004-06-03 00:00
中级用户 发帖 58 积分 258
[求助]请问一个关于dos 中断的取代问题!(灌水免入!)
小弟用的各版本的DOS截图程序都无法满足需要,所以打算写一个程序来用
但是出现一个问题:
因为程序要驻留内存并监听,所以我打算用dos int 21h 功能 25h更换
int指向地址,但是我以后如何使用我已经保存好的原BIOS中断
16h的地址来做到将普通的键盘按下转入原来的int地址?

请帮忙解决,不胜感激!!!
(灌水免入!!!!!!!!!!!!!!!!!!!!!!!!)
第2楼 jihao1234567 发表于 2004-06-03 00:00
中级用户 发帖 58 积分 258
有人可以回答吗????
第3楼 Loff 发表于 2004-06-04 00:00
中级用户 发帖 59 积分 286
是用汇编编写吗?如果是的,直接call XXXX(XXXX代表原来的中断处理函数现在的地址)即可。
如果是C语言,我倒没试过,你可以看看用“指向函数的指针”行不行:定义一个指向函数的指针,用getvect()函数(TruboC才有的函数)获得原来中断函数的入口地址,赋值给这个函数指针,以后只要用这个指针名调用函数即可。
第4楼 jihao1234567 发表于 2004-06-05 00:00
中级用户 发帖 58 积分 258
感谢………………
我除了VB会一点以外其他的就只会ASM了……………………我把这个看成第2生命……
借用一句不知那位的话………………“DOS是我的初恋,ASM是我的母语…………”
第5楼 defrag 发表于 2004-12-19 00:00
中级用户 发帖 570 积分 456
纯真的DOS年代曾经说过:有着女友的清茶和美妙的中断
第6楼 defrag 发表于 2004-12-19 00:00
中级用户 发帖 570 积分 456
不好意思别当灌水帖子删掉
第7楼 XK 发表于 2005-01-17 00:00
初级用户 发帖 3 积分 111
在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 mov word ptr ,bx mov bx,word ptr mov word ptr ,bx这样,以后,需要执行的时候,这样写就可以了call far OLD_INT
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023