如何在 8086 中编写具有优先级的 PDP11 样式硬件中断?

How to write PDP11 style hardware interrupts with priority in 8086?

如果这个问题听起来有点懒,我先道歉。我不久前完成了 PDP11 课程,我被要求在很短的时间内帮助一位在 TASM 8086 项目中遇到问题的学生。

我想在8086中实现一个简单的程序:

  1. 以默认优先级运行的例程。
  2. 以高于默认值的优先级运行的硬件键盘中断例程。
  3. 以高于键盘中断例程的优先级运行的硬件时钟中断例程。

如果可以,请提供一个简单的工作代码示例。非常感谢。

8086 为多达 256 个编号为 0x00 到 0xff 的不同 IRQ 提供软件支持。对于每个 IRQ,在 interrupt vector table 中指定了一个单独的处理程序。这并不意味着 8086 CPU 有 256 条物理中断线。

在典型的 8086 设置中,一个或两个 8259 programmable interrupt controllers (PIC) 用于管理 8 或 15 条中断线。每个 PIC 有 8 条中断线,第一个 PIC 的一条线用于在 master/slave 设置中连接第二个 PIC。当设备发送中断时,PIC 会在 CPU 中产生一个具有适当 IRQ 编号的 IRQ,然后执行您的中断处理程序。阅读链接文章,了解有关如何使用 8259 的详细信息。

典型的 8086 系统(包括 IBM PC 和兼容机)设计为每个设备都有自己的 IRQ 线。没有像 PDP-11 那样的 IRQ 链接,也没有 IRQ 优先级。您感兴趣的所有设备都分配有固定中断线,see here 了解详情。请注意,此图中的 IRQ 编号是 8259 IRQ 编号,而不是 8086 IRQ 编号。实际引发的 8086 IRQ 取决于您如何配置 8259 PIC。