文章目录
中断相关定义
CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时停止正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。
(嗐,啰里啰唆一大堆,没意思,其实道理很简单)
- 中断:解决CPU与外设间速度方面存在的差异,处理来自内部的异常故障
- 中断系统:中断系统是指实现中断功能的软硬件的统称
- 中断源:发出中断请求的外部设备或引起中断的内部原因或引起CPU中断的事件称为中断源
- 中断向量:存放各类中断的中断服务程序的入口地址(段和偏移)
中断源
中断源分为:外部中断、内部中断
内部中断
内部中断:CPU内部执行程序时自身产生的中断
- 除法溢出:类型号0,若除数为0或商超过了寄存器所能表达的范围。
- 单步中断:类型号1,
TF=1
时产生(当前指令需执行完) - 断点中断:类型号3,软件中断,即
INT 3
指令。(哇,这个太有名了,直到现在你还会看到这个指令的身影,烫烫烫烫烫烫烫烫烫烫烫) - 溢出中断:类型号4,软件中断,即
INTO
指令。(若溢出标志OF
为1,则产生一个向量号为4的内部中断) - 软件中断:即
INT n
指令,产生的一个向量号为n(0 ~ 255)的内部中断,其中INT 3
,常用于程序调试(见上)
特点:中断由CPU内部引起,中断类型号的获得与外部无关,CPU不需要执行中断响应周期去获得,除单步中断外,内部中断无法用软件禁止,不受中断允许标志IF的影响
外部中断
外部中断:CPU以外的设备、部件产生的中断:INTR
、NMI
- INTR:
可屏蔽中断请求,高电平有效,类型号由PIC
提供。受IF
标志的控制,IF=1时,执行完当前指令后CPU对它作出响应。两个连续的中断响应总线周期:分别是INTR
(中断请求)和INTA
(中断应答)。 - NMI:
非屏蔽中断请求,类型号2,上升沿有效,任何时候CPU都要响应此中断请求信号,没有中断响应周期。
特点:非屏蔽中断不受IF标志的影响,也不用外部接口给出中断类型号,CPU响应NMI
中断时也没有中断响应周期。可屏蔽中断当INTR
信号有效时,如果中断允许标志IF=1
,则CPU就在当前指令执行完毕后,产生两个连续的中断响应总线周期,获得中断类型号,并执行相应中断程序。
中断设置
中断标志IF
的状态
- IF=0:可屏蔽中断不会被响应
系统复位,任何一个中断被响应,执行指令CLI
,都会使IF=0
- IF=1:可屏蔽中断会被响应
执行指令STI
,使IF=1
中断过程
五个步骤
- 中断请求
- 中断判优(有时还要进行中断源识别)
- 中断响应
- 中断处理
- 中断返回
当然不同的中断类型有不同的响应过程
中断请求
对于外部中断:
外设接口(中断源)发出中断请求信号,送到CPU的INTR
或NMI
引脚。
- 中断请求信号:
NMI
为边沿请求,INTR
为电平请求 - 中断请求信号应保持到中断被处理为止。
- CPU响应中断后,中断请求信号应及时撤销。
- 在完整的8086系统中,外设的中断要经过可编程中断控制器PIC(8259A)的排队判优后向CPU发出
对于内部中断:
就是中断指令或者一些hardfault类似的错误。
中断源识别
-
软件查询。将中断信号从数据总线读入,用程序进行判别(???)
-
中断矢量法。由中断源提供中断类型号,CPU根据类型确定中断源。(8086即采用此种方法)
- 每个中断源都有一个与它相对应的中断类型码。
- 内部中断、软中断的类型码由指令或固定给出
- =可屏蔽中断的类型码由PIC(可编程中断控制器)给出==
- CPU响应
INTR
中断时,会产生两个中断响应总线周期,PIC会在第2个总线周期把中断类型码放到数据总线上,供CPU读入。
中断判优
• 中断优先级控制要处理两种情况:
-
对同时产生的中断:应首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理(响应优先级)