中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 请问WatcomC怎样挂中断程序?(保护模式下)
作者:
标题: 请问WatcomC怎样挂中断程序?(保护模式下) 上一主题 | 下一主题
superham
初级用户




积分 112
发帖 2
注册 2002-12-17
状态 离线
『楼 主』:  请问WatcomC怎样挂中断程序?(保护模式下)

谢谢!

2002-12-25 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hbnf
初级用户




积分 102
发帖 1
注册 2003-9-4
状态 离线
『第 2 楼』:  

和BC一样,_setvect(int, void())

2003-9-4 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lemonhall
高级用户

OS/2女孩


积分 639
发帖 183
注册 2003-6-14
状态 离线
『第 3 楼』:  

恩,不清楚。保护模式下不能用INT 24了,DJGPP下有讨论DPMI0。9下怎样挂短程序的文件,不知道对你有帮助么。



REM              喜欢DOS,因为它的简单
REM            喜欢OS/2,因为它不再矫饰
REM            喜欢BASIC,因为它并不幼稚
REM             喜欢GNU,因为它杂乱无章
2003-9-6 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (313813)  编辑帖子  回复  引用回复
ATLaS
初级用户




积分 169
发帖 29
注册 2003-7-9
状态 离线
『第 4 楼』:  

watcom下保护模式的挂中断需要自己用汇编写interrupt wrapper。在watcom安装目录\samples\goodies下有一个bimo.asm和bimodal.c是个设置同一个中断向量的保护模式和实模式中断服务函数的例子,可以参考。主要是要考虑在保护模式下对数据区和代码段的保护。如果想简化,我试过只用int 31来设置保护模式中断的,在有些机器上不能正常工作,但有些可以。你可以试试看。

void __interrupt __far  (*oldISR)(void);
void __interrupt __far  newISR(void)
{
    ....
    outp(0x20, 0x20);
}

union REGS  r;
void __far  *fh;

/* get old isr pointer */
r.x.eax = 0x0204;
r.x.ebx = (unsigned long)vector;
int386(0x31, &r, &r);
oldISR = (void __interrupt *)MK_FP(r.x.ecx, r.x.edx);
   
/* set new isr */
fh = (void __far *)newISR;
r.x.eax = 0x0205;
r.x.ebx = (unsigned long)vector;
r.x.ecx = (unsigned long)FP_SEG(fh);
r.x.edx = (unsigned long)FP_OFF(fh);
int386(0x31, &r, &r);


2003-9-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: