微处理器 - 8086 中断
中断是在程序执行期间创建临时停止的方法,允许外围设备访问微处理器。微处理器使用 ISR(中断服务例程)响应该中断,这是一个简短的程序,用于指示微处理器如何处理中断。
下图显示了 8086 微处理器中的中断类型 −
硬件中断
硬件中断是由任何外围设备通过指定引脚向微处理器发送信号引起的。
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 等等。前五个指针是专用中断指针。即 −
TYPE 0中断代表除以零的情况。
TYPE 1中断代表程序调试期间的单步执行。
TYPE 2中断代表不可屏蔽的 NMI 中断。
TYPE 3中断代表断点中断。
TYPE 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