中断向量表位于何处?

use*_*492 0 x86 dos interrupt bios

ROM或RAM中的中断向量表是?如果它在RAM中,它从哪里加载?此外,该表是否依赖于操作系统?例如,在MS-DOS中,"int 0x80"用于播放音乐和内容,但在Linux中它是一个系统调用.那么,在MS-DOS中,操作系统或ROM是否处理中断0x80?如果它在ROM中,Linux是否会覆盖表项?

Ros*_*dge 5

在PC上,中断向量表(IVT)始终位于RAM中.默认情况下,它位于内存开始时的0000:0000,但可以使用LIDT指令移动它.MS-DOS不会移动IVT,但Linux可能会.无论哪种方式,它都会在某个地方的RAM中.

中断0x80不是标准的MS-DOS或BIOS中断,因此通常在MS-DOS下未处理.如果它全部使用,则由一些不属于操作系统的第三方代码(例如TSR或驱动程序)处理.其他中断可能由MS-DOS(例如0x21)或BIOS(例如0x10)处理.在前一种情况下,处理中断的代码将在RAM中,而在后一种情况下,代码将在ROM中.(尽管BIOS ROM可能已被复制到位于ROM同一地址的只读影子RAM,因为BIOS代码以这种方式运行得更快.)

在Linux等受保护模式操作系统下,中断仅由操作系统处理.