我在8086的中断服务程序中找不到合适的资源。我想知道8086如何处理不同的中断。请帮帮我。
问问题
1481 次
2 回答
1
PC 通过将磁盘开头的内容加载到 ram 的开头来启动。ram 中的这些内容预计会部分覆盖它们自己,ram 的第一个 KB 专用于“中断向量表”(IVT)。
IVT 由 256 条 SEG:ADDRESS 记录组成,这些记录根据 INT 编号“调用”。
例如,如果我说 INT 10h,处理器会查找 IVT 中的第 16 条记录(在内存地址 0000:0040h),将 CS 设置为该地址第一个字的值,并将 IP 设置为第二个字该地址,因此机器继续从 CS:IP 处的新地址执行,直到它到达 IRET 指令,在该指令中它将 CS:IP 设置为调用中断之前的下一条指令。
这是基本机制,但是您不会在执行中从程序外部的事物调用中断。8086 有一对级联的中断控制器,可以随时产生中断请求,而无需处理器提前准备好,因此虽然机器必须在跳转到 IVT 索引的地址之前将 CS:IP 存储在堆栈上,它还必须将所有其他寄存器(包括标志)也压入堆栈。同样,它们必须在 IRET 时从堆栈中弹出。
于 2020-04-09T03:40:02.910 回答
0
当调用中断时,处理器知道保存它的状态并立即执行中断指令,然后恢复之前的状态。基本上,当调用中断时,程序计数器停止,执行中断,然后继续执行下一条指令。
您可能会发现此链接很有帮助: 硬件中断
于 2011-07-06T14:44:22.060 回答