![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 04:25 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 请问WatcomC怎样挂中断程序?(保护模式下) |
| 可打印版本 1,031 / 3 |
| 第1楼 superham | 发表于 2002-12-25 00:00 |
| 初级用户 发帖 2 积分 112 | |
|
请问WatcomC怎样挂中断程序?(保护模式下) 谢谢!
|
|
| 第2楼 hbnf | 发表于 2003-09-04 00:00 |
| 初级用户 发帖 1 积分 102 | |
|
和BC一样,_setvect(int, void())
|
|
| 第3楼 lemonhall | 发表于 2003-09-06 00:00 |
| 高级用户 发帖 183 积分 639 | |
|
恩,不清楚。保护模式下不能用INT 24了,DJGPP下有讨论DPMI0。9下怎样挂短程序的文件,不知道对你有帮助么。
|
|
| 第4楼 ATLaS | 发表于 2003-09-07 00:00 |
| 初级用户 发帖 29 积分 169 | |
|
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); |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |