8086/8088的中断系统
中断结构
中断分类

硬件中断——由外部硬件产生的,也称外部中断。
- 非屏蔽中断:通过CPU的NMI引入,它不受内部中断允许标志位IF的屏蔽,一般在一个系统中只允许有一个非屏蔽中断。
- 可屏蔽中断:通过CPU的INTR引入 ,它受IF的控制。只有在IF=1时,CPU才能响应中断源的请求。当IF=0时,中断请求被屏蔽。
软件中断——CPU根据软件的某些指令或者软件对标志寄存器某个标志位的设置而产生的,由于它与外部中断电路完全无关,故称为内部中断。
中断向量表
存放中断地址的一段内存空间称中断向量表。
- 存放各类中断的中断服务程序的入口地址
- 表的地址位于内存的0000∶0000~0000∶03FFH(即0段的0000~03FFH)大小为1KB,共256个入口
- 每个入口占用4个单元,依次为IP:CS, 低字为段内偏移,高字为段基址
- 计算向量表地址:
- 入口地址:类型码 × 4 (给CS)
- 结束地址=类型码×4+4-1(结束4字节单元,+4(CS:IP占4字节) -1(从0开始)) 给 IP

设置中断向量:
入口地址 = 类型码×4(开始4字节单元)

中断类型码与中断向量所在位置(中断向量地址指针)之间的对应关系为: 中断向量地址指针=4*中断类型码
内部中断——软中断
在8086/8088系统中,通过执行中断指令或由CPU
本身启动的中断称为内部中断(也称软件中断)。
除单步中断外,内部中断无法用软件禁止,即不受IF的影响。
1、内部中断的类型
(1)0型中断——除法出错中断
(2)1型中断——单步中断
(3)3型中断——断点中断
(4)4型中断——溢出中断
(5)INT n指令中断
内部中断的处理过程
如何获取相应的中断类型码
专用中断:中断类型码是自动形成的。
几种类型码为:类型0、1、3、4。
对于INT n指令,其类型码为指令中给定的n。
取得了类型码后的处理过程:
① 类型码*4 — 向量表指针。
② 标志寄存器FR入栈,保护各个标志。
③清除IF和TF标志,屏蔽新的INTR中断和单步中断。
④保存断点(断点处IP和CS压栈,先压CS后压IP)。
⑤从中断向量表中取出中断服务程序入口地址分别送入IP和CS中。
⑥ 按新的地址执行中断服务程序。
外部中断——硬中断
非屏蔽中断——NMI引脚产生的中断,不受IF控制,类型号为2。
可屏蔽中断——由CPU的INTR端接收可屏蔽中断。受IF控制,只有当IF=1, 在一条指令执行结束后,CPU才能响应可屏蔽中断的请求。
1、外部中断的响应
CPU采样到非屏蔽中断请求时,自动提供中断类型号2,然后根据中断类型号,查找中断向量表指针,其后的处理与内部中断一样。
当INTR信号有效,如IF=1,则CPU执行完一条指令后,进入可屏蔽中断响应周期。在中断响应周期中CPU从数据线中获取外部设备的中断类型码。
2、外部中断处理过程(INTR中断)
在外部中断响应周期中,CPU获取了外部中断类型
码之后的中断处理过程,与前述的软中断过程顺序是一样的,不再赘述。
如果把CPU中断响应周期的动作和前面讲到的中断响应过程结合起来,当一个可屏蔽中断被响应时,CPU实际执行了7个总线周期,即:
外设向CPU申请中断:
- INTA向CPU请求信号
- 取回类型码
- 保护FR
- 保护CS
- 保护IP
- 送新的偏移地址 IP-> IP
- 送新的段地址 CS -> CS
⑴ 执行第一个INTA应答周期。(INTR是INTA的应答线)
⑵ 执行第二个INTA周期,被响应的外设通过D0~D7的8位数据线提供中断类型码n(由8259A提供),CPU接到类型码后,将它左移两位,形成向量表指针存入暂存器。
⑶ 执行一个总线写周期,把FR压栈。同时IF和TF为0,以禁止中断响应过程中其他可屏蔽中断的进入,同时也禁止了中断过程中出现单步中断。
⑷ 执行一个总线写周期,CS压栈。
⑸ 执行一个总线写周期,IP压栈。
⑹ 执行一个总线读周期,从中断向量表(类型码×4)中取出中断服务程序入口地址(2个字节)的偏移量送IP中。
⑺ 执行一个总线周期,从中断向量表中取出中断服务程序入口地址的段值送CS。
(NMI中断)非屏蔽中断与软中断跳过第⑴、⑵步,从第⑶步开始执行到第⑺步。NMI中断固定类型号为2,所以需要5个总线周期
各类中断的优先权及中断响应(优先权:软件 > 硬件 > 单步)号越小,优先级越高
#定义子程序
标号 proc ; 定义子程序伪指令
...内容
iret ;程序结束返回
标号 endp ;子程序结束伪指令
8086硬中断和软中断的区别:
- 产生方式不同,硬件中断由硬件产生,软件中断由指令产生
- 硬件中断是随机的,软件中断是已知的
- 硬件中断通常需要从外部取类型码,软件中断不需要取类型码
- 硬件中断NMI和INTR引脚,软件中断是对应的类型号或直接给出
各类中断的优先权及中断响应
8086/8088系统中,中断优先权次序从高到低为:除法出错、INTn、INTO、NMI、INTR、单步中断。
除单步之外的内部优先权最高,其次是非屏蔽中断,再次是可屏蔽中断,而单步最低。(号越小,中断优先权越高)
断应中断的条件,一般情况(INTR中断(可屏蔽中断))
- 有中断申请
- 一条完整指令结束,才可以响应中断
- 未在服务更高级中断(同级中断打断不了同级中断,低级中断打断不了高级中断)
- 如果是INTR中断,中断是开放的
- CPU:IF=1
- 8259:没有屏蔽
如果是 NMI 中断 需要满足以上 1、 2、3步
所有中断执行条件,需要完整指令执行结束