中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [求助]请问一个关于dos 中断的取代问题!(灌水免入!)
作者:
标题: [求助]请问一个关于dos 中断的取代问题!(灌水免入!) 上一主题 | 下一主题
jihao1234567
中级用户




积分 258
发帖 58
注册 2003-10-11
状态 离线
『楼 主』:  [求助]请问一个关于dos 中断的取代问题!(灌水免入!)

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

请帮忙解决,不胜感激!!!
(灌水免入!!!!!!!!!!!!!!!!!!!!!!!!)



奋发向上!!!
2004-6-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jihao1234567
中级用户




积分 258
发帖 58
注册 2003-10-11
状态 离线
『第 2 楼』:  

有人可以回答吗????



奋发向上!!!
2004-6-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Loff
中级用户




积分 286
发帖 59
注册 2003-4-8
状态 离线
『第 3 楼』:  

是用汇编编写吗?如果是的,直接call XXXX(XXXX代表原来的中断处理函数现在的地址)即可。
      如果是C语言,我倒没试过,你可以看看用“指向函数的指针”行不行:定义一个指向函数的指针,用getvect()函数(TruboC才有的函数)获得原来中断函数的入口地址,赋值给这个函数指针,以后只要用这个指针名调用函数即可。

2004-6-4 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jihao1234567
中级用户




积分 258
发帖 58
注册 2003-10-11
状态 离线
『第 4 楼』:  

感谢………………
我除了VB会一点以外其他的就只会ASM了……………………我把这个看成第2生命……
借用一句不知那位的话………………“DOS是我的初恋,ASM是我的母语…………”



奋发向上!!!
2004-6-5 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
defrag
中级用户

痴迷DOS者


积分 456
发帖 570
注册 2004-10-9
状态 离线
『第 5 楼』:  

纯真的DOS年代曾经说过:有着女友的清茶和美妙的中断



DOS不是万能的,没有DOS是万万不能的
自古系统谁无死?留取胆清照汗青![upload=bmp]uploadImages/20035317345478982.png[/upload]
2004-12-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
defrag
中级用户

痴迷DOS者


积分 456
发帖 570
注册 2004-10-9
状态 离线
『第 6 楼』:  

不好意思别当灌水帖子删掉



DOS不是万能的,没有DOS是万万不能的
自古系统谁无死?留取胆清照汗青![upload=bmp]uploadImages/20035317345478982.png[/upload]
2004-12-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
XK
初级用户




积分 111
发帖 3
注册 2005-1-16
状态 离线
『第 7 楼』:  

在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

2005-1-17 00:00
查看资料  发送邮件  发短消息 网志  OICQ (17175673)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: