中断概述
中断: 当CPU执行程序时,由于随机的事件引起CPU暂时停止正在执行的程序,而转去执行中断服务程序,处理完后又返回被终止的程序断点处继续执行,这个过程叫做中断。
中断源: 引起中断的事件,或能够发出中断请求信号的外设
中断类型号: 处理器对各类中断的中断源进行的统一编号N,N的取值范围是0~255
中断向量: 即中断服务程序的入口地址,也就是中断服务程序的第一条指令的地址。
中断向量表: 在存储器中的存放中断向量的位置。
中断优先级: 在系统中多个中断源可能同时提出中断请求时,需要按中断的轻重缓急给每个中断的轻重缓急给每个中断源指定一个优先级别。
中断屏蔽: 当中断源申请时,CPU可以由软件设置,使之不能响应,称为中断屏蔽。
中断处理过程
中断请求
外设需要CPU服务时,首先要发出一个有效的中断请求信号
送到CPU的中断输入端。
中断请求信号分为边沿触发
和电平触发
CPU能够即时予以响应
的中断可以采用边沿触发
不能即时响应
的中断则应采用电平触发
,否则中断请求信号就会丢失。
8088/8086CPU的NMI为边沿触发,而INTR为电平触发
。为了保证产生的中断能被CPU处理,INTR中断请求信号应保持到该请求被CPU响应为止。CPU响应后,INTR信号还应及时撤除,以免造成多次响应。
中断响应
响应中断请求的3个条件:
①一条指令执行结束。
②CPU处于开中断状态。
③没有总线请求。在复位(RESET)、总线保持(HOLD)等总线请求时,CPU不工作,当然就不能响应中断。
中断响应时,CPU除了要向中断源发出中断响应信号外,还要自动完成3项任务:
关闭中断:CPU响应中断时,需立即关中断(IF=0),以保证保护现场、断点和获取中断入口地址等工作不受影响。
保护断点:将标志寄存器FR、断点的段基址(CS值)和偏移地址(IP值)压入堆栈,以保证中断结束后能正常返回被中断的程序。
获取中断服务程序入口,转入中断服务程序。
中断处理
①保护现场:保护现场是指把中断服务程序中要用到的寄存器的原内容压入堆栈保存起来
②开中断:CPU响应中断时会自动关闭中断(使IF=0).若进入中断服务程序后允许中断嵌套,则需用指令开中断(使IF=1)。
③执行中断处理程序完成具体的中断处理。
④关中断:确保有效地恢复被中断程序的现场。
⑤恢复现场:就是把先前保护的现场进行恢复,也即把所保存的有关寄存器内容按入栈的相反顺序从堆栈中弹出,使这些寄存器恢复到中断前的状态。
⑥开中断返回:CPU会自动地将堆栈内保存的断点信息和标志信息弹出到IP、CS和FR中,保证被中断的程序从断点处继续往下执行。
8086/8088中断
中断类型
外部中断:
NMI中断:中断类型号2、中断入口地址0008H~000BH。
INTR中断:高电平触发、外部中断源通过8259连入INTR引脚。
INTR中断:
由中断指令INT N引起
除法中断:类型号0
溢出中断:类型号4
单步中断:类型号1
断点中断:类型号3
中断优先级顺序
内部中断优先级
>外部中断优先级
(NMI>INTR)>单步执行中断
。
⭐中断向量表
中断向量:中断服务程序的入口地址
,包括段地址
(存放于高字节单元)和偏移地址
(存放于低字单元)。
中断向量表:存放中断向量的表格。位于内存空间的最低地址(000H-3FFH
),长度1KB
,可容纳256类中断向量(256×4=1024)。
中断向量在表中的存放位置=4*n
中断处理过程
中断类型码的获取
(1)对于除法中断、单步中断、不可屏蔽中断NMI,断点中断和溢出中断,CPU分别自动提供中断类型号0~4
(2)对于用户自己确定的软件中断INT n,类型号由n决定。
(3)对外部可屏蔽中断INTR,可用硬件电路设计
产生。也可用可编程中断控制器
8259A获得中断类型号。
获得中断类型码后,如何进入中断服务程序
中断类型码乘以4,得中断向量表的向量首址指针
取中断向量:把向量表指针所指的4个连续字节的内容作为中断服务程序的入口地址,分别送给IP和CS
接新的CS:IP指针执行中断服务程序