我在8086的中断服务程序中找不到任何合适的资源。我想知道8086如何处理不同的中断。请帮帮我。
答案 0 :(得分:1)
通过将磁盘开头的内容加载到ram的开头来启动PC。这些内容一旦出现在ram中,就有望部分覆盖它们自己,而ram的第一个千字节专用于“中断向量表”(IVT)。
IVT包含256条SEG:ADDRESS记录,这些记录根据INT编号被“调用”。
例如,如果我要说INT 10h,处理器将在IVT中查找第16条记录(在内存地址0000:0040h),将CS设置为该地址的第一个字的值,并将IP设置为该地址上的第二个字,因此机器将继续从CS:IP处的新地址开始执行,直到到达IRET指令为止,在该指令中,它将CS:IP设置为调用中断之前的下一条指令。
那是基本的机制,但是您不会在执行过程中也可以从程序外部的事物调用中断。 8086具有一对级联的中断控制器,它们可以在不事先准备处理器的情况下随时生成中断请求,因此,当机器必须在跳到由IVT索引的地址之前将CS:IP存储在堆栈中时,还必须将所有其他寄存器(包括标志)也压入堆栈。同样,必须在IRET将其从堆栈中弹出。
答案 1 :(得分:0)
当调用中断时,处理器知道保存状态并立即执行中断指令,然后恢复先前的状态。基本上,当一个中断被调用时,程序计数器停止,执行中断,然后继续下一条指令。
您可能会发现此链接有用: Hardware Interrupts