8086的中断方式
一.8086的中断源
8086可以处理256种中断,用中断类型码来区分每一种中断。这些中断源可以是硬件,也可以是软件;有的来自CPU内部,有的来自外围芯片。
二、 中断矢量表
8086的256种中断的中断处理程序的入口地址(起始地址),用表格方式来管理,称为“中断矢量表”。
每个中断处理程序的入口地址占4字节(段地址:偏移量),256个中断处理程序的入口地址占1024字节(1KB),它们存放在存储器地址的最顶部:00000H~003FFH。
三、 硬件中断
CPU的硬件中断请求线有两条:INTR(可屏蔽中断请求)和NMI(非屏蔽中断请求)。
1.可屏蔽中断请求
INTR请求的特点是:
① INTR请求信号是电平触发有效的,且必须保持到CPU响应该请求。
② 仅当CPU标志IF=1时,CPU才响应INTR请求,否则,CPU不响应。即IF标志可以屏蔽INTR请求,因此INTR称为“可屏蔽中断请求”。(STI指令使IF=1,CLI指令使IF=0)。
微机中的多个硬件中断请求,一般通过”中断控制器Intel 8259A”管理它们的优先权,外设接口电路的中断请求信号经总线送至8259的IR输入端,8259把优先权最高的请求送到CPU的INTR引脚。
在IBM PC/AT(80286)及以上微机中,使用两片8259级联,可以管理15个中断请求(称为15级中断请求),其连接情况为:
图中,IRQ为ISA总线信号名(其中IRQ0、IRQ1、IRQ8、IRQ9、IRQ13不出现在ISA总线上,习惯上仍以IRQ表示)。
CPU响应INTR请求时,执行两个连续的中断响应周期,每一个中断响应周期发出INTA负脉冲信号,第一个INTA负脉冲通知8259准备中断类型码,8259收到第二个INTA负脉冲时送出中断类型码。
8259中的中断类型码可以用程序设置,缺省类型码如上图所示。
中断类型标识请求中断的设备,同时,CPU根据类型码到中断矢量表中查得中断处理程序的入口地址。
8086中断响应时序画如下图:
2.非屏蔽中断NMI
非屏蔽中断的特点是:
① NMI上的正跳变信号为有效的请求信号。
② 当NMI上出现请求时,无论CPU标志IF等于什么值,CPU均立即响应该请求。即IF不能屏蔽NMI请求,因此NMI请求称为非屏蔽中断请求。
③ CPU响应NMI请求时,不发出 信号。NMI请求的类型码固定为2。
四. 软件中断
软件中断是软件执行过程产生的,因此不可屏蔽。
1、 除法错中断:执行除法时,若商超出范围,则产生该中断,其类型码为0。
2、 单步中断:若TF=1,则产生该中断,其类型码为1。
3、 溢出中断:当OF=1时若执行INTO指令,则产生该中断,其类型码为4。当OF=0时执行INTO指令,INTO指令不起作用。
4、 中断指令 “INT n”。
五.8086的中断响应和处理过程
8086CPU在执行完一条指令时(指令的最后一个T状态),内部硬件自动检测有无中断请求,其检测的顺序是:
软件中断(不含单步中断)->NMI中断->INTR中断->单步中断
当有INTR中断时,CPU执行两个连续的中断响应周期,获得中断类型码。对于软件中断、NMI中断,不执行中断响应周期,直接获得中断类型码。
CPU获得中断类型码后的中断处理过程为:
(1) 将类型码乘以4,作为中断矢量表的指针。
(2) 将标志寄存器(PSW)入栈。
(3) TF标志暂存到TEMP,接着使TF=0,使IF=0。
(4) 主程序断点处的CS和IP入栈,保存返回地址。
(5) 从中断矢量表取出中断处理程序的入口地址,送CS和IP。
(6) 执行中断处理程序。
(7) 执行中断处理程序中的IRET指令时返回中断。