标题: 请问WatcomC怎样挂中断程序?(保护模式下)
[打印本页]
作者: superham
时间: 2002-12-25 00:00
标题: 请问WatcomC怎样挂中断程序?(保护模式下)
谢谢!
作者: hbnf
时间: 2003-9-4 00:00
和BC一样,_setvect(int, void())
作者: lemonhall
时间: 2003-9-6 00:00
恩,不清楚。保护模式下不能用INT 24了,DJGPP下有讨论DPMI0。9下怎样挂短程序的文件,不知道对你有帮助么。
作者: ATLaS
时间: 2003-9-7 00:00
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);