当前位置:课程学习>>第七章>>知识讲解>>视频课堂>>知识点二
Intel 80X86系列微机有一个灵活的中断系统,可以处理256种中断源,每个中断源都有对应的中断类型号(0~255D)供CPU识别。
1.8086的中断类型
(1)外部中断
外部中断是指由外部设备通过硬件请求的方式产生的中断;
外部中断也称为硬件中断。
外部中断可分为:非屏蔽中断、可屏蔽中断
非屏蔽中断NMI
当外设向CPU提出中断请求时,CPU在当前指令执行结束后,就立即无条件的予以响应,这样的中断就是非屏蔽中断。
由CPU的NMI引脚引入,NMI上升沿时触发,维持2个T高电平。
不受中断允许标志IF的影响;
中断类型号固定为2;
在外部中断源中优先级最高;
主要用于处理系统的意外或故障,如:电源掉电、存储器读/写错误等。
可屏蔽中断INTR
受CPU中断允许标志位IF的控制:
IF=1时,CPU响应中断请求;
IF=0时,CPU屏蔽中断请求,不予响应;
由CPU的INTR引脚引入,高电平有效。
中断类型号由中断请求的设备提供。
(2)内部中断
除法错中断
执行除法指令时,若除数为0或商超过寄存器所能表达的范围,则CPU立即产生一个0型中断。
溢出中断
如果上一条指令使溢出标志位OF为1,则执行INTO指令产生4型中断。
INT n指令中断
8086的指令系统中有一条INT n指令,执行这条指令就会立即产生中断。
单步中断
当单步标志(陷阱标志)TF置“1”时,80x86处于单步工作方式。在单步工作时,每执行完一条指令,CPU自动产生中断类型号为1的中断。
断点中断
断点中断是80x86提供的一种调试程序的手段。用于设置程序中的断点,中断类型号为3。
中断优先级由高到低分别为:
除法错、INT n指令、溢出、断点中断
非屏蔽中断NMI
可屏蔽中断INTR
单步中断
2.中断向量和中断向量表
(1)中断向量表的概念
中断类型号
在8086系统中,共设有256类中断,每类中断分配到一个8位的编号,这个编号就叫做中断类型号。
中断类型号的范围:
00~FFH(0~255D)
中断向量
需要响应的每一类中断都编写有相应的中断服务程序,并预先装入内存,中断服务程序在内存中的入口地址叫中断向量。
每个中断类型对应一个中断向量。
中断向量的字长是4个字节
2个字节的段地址
2个字节的偏移地址
中断向量表
把系统中所有的中断向量集中起来放到存储器的某一区域内,这个存放中断向量的存储区就叫中断向量表或中断服务程序入口地址表。
8086系统把中断向量表安排在内存地址00000H~003FFH区域(1K)。
每四个连续字节存放一个中断向量,
高地址2个字节单元放段地址(CS)
低地址2个字节单元中放偏移地址(IP)。
中断向量表地址指针
为了便于在中断向量表中找到中断向量,通常设置一种指针,来指出中断向量存放在中断向量表的具体位置;
存放中断向量的4个存储单元的最低地址称为向量表地址指针。
计算方法:中断类型号×4
(2)中断向量的设置
中断向量并非常驻内存,而是开机上电时,由程序装入指定的存储区内。
BIOS程序只负责中断类型号00H~1FH共32种中断的中断向量的装入。
用户在应用系统中使用中断时,需要在初始化程序中将中断服务子程序的入口地址装入中断向量表指定的存储单元中,以便在CPU响应中断请求后,由中断向量自动引导到中断服务子程序。
3.8086中的中断响应和处理过程
在8086系统中各种中断的响应和处理过程是不完全相同的,主要区别还在于如何获取相应的中断类型号。
中断源识别
CPU在当前指令执行完后,按内部中断(除法出错、INT n、断点中断、溢出中断)、NMI、INTR、单步中断的顺序来逐个查询是否有中断请求,对于INTR还要判断CPU是否允许中断(IF=1)。
8086的中断判优
CPU检测的顺序是按优先级的高低来进行的,最先检测到的中断源具有最高的优先级,最后检测到的中断源具有最低的优先级。
中断源提供中断类型号
当内部中断发生时,是按预定方式得到中断类型号(专用中断:0、1、3、4)
在用软件中断指令INT n时,中断指令本身就为CPU提供了中断类型号n。
非屏蔽中断类型号固定是2。
可屏蔽的中断由请求中断的设备提供中断类型号。
中断处理
断点保护。将标志寄存器(PSW)、当前段寄存器(CS)及指令指针(IP)内容压入堆栈。
关闭中断,并清除IF及TF位(IF←0,TF←0),以便禁止响应可屏蔽中断或单步中断。
将取得的中断类型号乘4,到中断向量表中取中断向量(中断处理程序的入口地址),其中高2字节段地址送到CS中,低2字节偏移地址送入IP中。一旦中断处理程序的入口地址置入IP及CS中,程序就被转入并开始执行中断处理程序。
中断服务程序一般包括:保护现场、中断服务、恢复现场等部分。同时,为了能够处理多重中断,还可在中断处理程序的适当地方加入开中断指令(STI)。
中断返回
中断服务程序执行完毕,最后执行一条中断返回指令IRET,将压入堆栈的原标志寄存器内容及断点地址弹出,继续执行原程序。