微处理器 - 8086 中断



中断是程序执行过程中创建临时暂停的方法,允许外围设备访问微处理器。微处理器对该中断的响应是ISR(中断服务例程),这是一个简短的程序,用于指示微处理器如何处理中断。

下图显示了 8086 微处理器中的中断类型:

Interrupts

硬件中断

硬件中断是由任何外围设备通过向微处理器指定的引脚发送信号引起的。

8086 具有两个硬件中断引脚,即 NMI 和 INTR。NMI 是不可屏蔽中断,INTR 是可屏蔽中断,优先级较低。另一个相关的中断引脚是 INTA,称为中断确认。

NMI

它是一个单一的不可屏蔽中断引脚 (NMI),优先级高于可屏蔽中断请求引脚 (INTR),它是 2 型中断。

当此中断被激活时,将发生以下操作:

  • 完成正在执行的当前指令。

  • 将标志寄存器值压入堆栈。

  • 将返回地址的 CS(代码段)值和 IP(指令指针)值压入堆栈。

  • IP 从字位置 00008H 的内容加载。

  • CS 从下一个字位置 0000AH 的内容加载。

  • 中断标志和陷阱标志重置为 0。

INTR

INTR 是可屏蔽中断,因为只有在使用设置中断标志指令启用中断时,才会中断微处理器。不应使用清除中断标志指令启用它。

INTR 中断由 I/O 端口激活。如果中断已启用且 NMI 已禁用,则微处理器首先完成当前执行,并在 INTA 引脚上发送两次“0”。第一个“0”表示 INTA 通知外部设备准备好,在第二个“0”期间,微处理器从可编程中断控制器接收 8 位数据,例如 X。

微处理器将执行以下操作:

  • 首先完成当前指令。

  • 激活 INTA 输出并接收中断类型 X。

  • 将标志寄存器值、返回地址的 CS 值和返回地址的 IP 值压入堆栈。

  • IP 值从字位置 X × 4 的内容加载。

  • CS 从下一个字位置的内容加载。

  • 中断标志和陷阱标志重置为 0。

软件中断

在程序的所需位置插入一些指令以创建中断。这些中断指令可用于测试各种中断处理程序的工作情况。它包括:

INT - 带类型编号的中断指令

它是 2 字节指令。第一个字节提供操作码,第二个字节提供中断类型编号。此组下有 256 个中断类型。

其执行包括以下步骤:

  • 将标志寄存器值压入堆栈。

  • 将返回地址的 CS 值和返回地址的 IP 值压入堆栈。

  • IP 从字位置“类型编号”× 4 的内容加载。

  • CS 从下一个字位置的内容加载。

  • 中断标志和陷阱标志重置为 0。

0 型中断的起始地址为 000000H,1 型中断的起始地址为 00004H,2 型中断的起始地址为 00008H,依此类推。前五个指针是专用的中断指针,即:

  • 0 型中断表示除以零的情况。

  • 1 型中断表示程序调试期间的单步执行。

  • 2 型中断表示不可屏蔽 NMI 中断。

  • 3 型中断表示断点中断。

  • 4 型中断表示溢出中断。

5 型到 31 型中断保留用于其他高级微处理器,32 型到 255 型中断可用于硬件和软件中断。

INT 3 - 断点中断指令

它是一个 1 字节指令,操作码为 CCH。这些指令被插入到程序中,以便当处理器到达那里时,它会停止程序的正常执行并遵循断点过程。

其执行包括以下步骤:

  • 将标志寄存器值压入堆栈。

  • 将返回地址的 CS 值和返回地址的 IP 值压入堆栈。

  • IP 从字位置 3×4 = 0000CH 的内容加载。

  • CS 从下一个字位置的内容加载。

  • 中断标志和陷阱标志重置为 0。

INTO - 溢出中断指令

它是一个 1 字节指令,其助记符为INTO。此指令的操作码为 CEH。顾名思义,它是一个条件中断指令,即仅当溢出标志设置为 1 时才有效,并跳转到中断类型编号为 4 的中断处理程序。如果溢出标志被复位,则执行继续到下一条指令。

其执行包括以下步骤:

  • 将标志寄存器值压入堆栈。

  • 将返回地址的 CS 值和返回地址的 IP 值压入堆栈。

  • IP 从字位置 4×4 = 00010H 的内容加载。

  • CS 从下一个字位置的内容加载。

  • 中断标志和陷阱标志重置为 0。

广告