首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IRQ编号冲突

IRQ编号冲突
EN

Stack Overflow用户
提问于 2009-10-28 09:22:26
回答 3查看 774关注 0票数 4

来自:http://software.intel.com/en-us/articles/introduction-to-pc-architecture/

异常编号10h对应于“浮点错误”,但软件中断10h也对应于“视频支持”BIOS中断(两者都处于实模式)。

我遗漏了什么?

EN

回答 3

Stack Overflow用户

发布于 2009-10-28 10:05:45

你不会错过任何东西的。

8088处理器(最初的IBM PC中使用的处理器)仅定义了例外0、1、2、3和4。

因此,IBM将0x8到0xF用于硬件中断处理程序,将0x10或更高版本用于BIOS例程。由于某种原因,IBM忽略了一个事实,即Intel非常明确地保留了数字0x5到0x1F,以备将来处理器例外使用。

随着时间的推移,需要更多的例外,英特尔继续进行分配。大多数时候,遗留软件无论如何都不会触发这些异常,而较新的操作系统(在保护模式下运行的操作系统)可以分配不同的编号,以避免与处理器异常发生冲突。

有大量的黑客添加到旧的软件,以获得一些使用新的处理器功能,而不会破坏太多的兼容性。虽然我不确定,但我怀疑可能是较新的BIOSes试图检测INT10是由软件中断还是由其INT10处理程序中的协处理器触发的。

仅供参考,摘自386程序员手册:

协处理器错误向量至中断16。任何具有协处理器的80386系统必须将中断向量16用于协处理器错误异常。如果8086/8088系统为8087中断使用另一个向量,则两个向量都应该指向协处理器错误异常处理程序。

票数 7
EN

Stack Overflow用户

发布于 2009-10-28 10:06:31

好的,看一下here, on Watcom's site。这是我认为最重要的部分,尽管关于8087的旧笔记也很有趣。

由于绝大多数PC用户仍在运行PC并需要与IBM兼容的市场现实,IBM处理数学错误的方式并不直接。由于IBM在设计PC时忽略了Intel的建议,286的数学错误或中断16与BIOS视频服务中断10h (十进制16)冲突。最重要的是,现有的软件期望数学异常通过int2到达。

IBM AT没有连接CPU和FPU错误引脚,而是使用主板电路将287错误信号路由到级联的第二个8259A PIC,并使用IRQ 13向CPU发送数学错误信号。默认BIOS IRQ 13处理程序(即INT 75h向量-请记住,IRQ 8,第二个PIC的第一个IRQ线路对应于中断向量70h)包含调用INT 2的代码,以与现有软件兼容。因此,AT上的软件仍然可以挂钩NMI矢量并在PC或AT上不加改变地运行。

当287断言其错误信号时,IBM AT中的外部电路驱动286的忙输入引脚激活。这阻止了进一步的FPU指令的执行,并且需要避免在287发出错误信号之后和286开始处理产生的中断之前的时间窗口中出现问题。

票数 3
EN

Stack Overflow用户

发布于 2010-08-30 08:06:40

简单的答案是,int 10h浮点错误是保护模式异常,而int 10h视频服务是实模式中断。

令人满意的答案是,清除CR0寄存器中的NE位将防止异常发生,并允许它在PM32中作为简单中断使用(例如,在32位保护模式BIOS扩展器中)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1634680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档