微型计算机系统
第七章 中 断 系 统 Company Logo
通过本章学习,需要掌握中断的基本概念,掌握8259A的基本功能,掌握中断服务程序的编程方法。 第七章:中断系统 教学提示: 中断是计算机的一项重要能力,这种能力就是CPU能及时地的处理意外或突发事件的能力,在前面的一章中,我们已经知道中断在数据传递方面的应用,其实中断的应用领域不仅于此。在本章中我们将系统地介绍这部分知识 教学要求: 通过本章学习,需要掌握中断的基本概念,掌握8259A的基本功能,掌握中断服务程序的编程方法。 Company Logo
基本内容: §7.1 概述 第七章:中断系统 7.1.1 中断的基本概念 7.1.2 中断系统的作用 7.1.3 中断源 § 7.2 中断的处理过程 7.2.1中断请求与中断屏蔽 7.2.2中断优先级排队 7.2.3中断响应 7.2.4中断处理 Company Logo
第七章:中断系统 §7.1 概述 中断技术被引进到计算机系统中,改变了CPU难于处理偶发性事件,使具有高效率高性能高适应性的并行处理功能的计算机系统变成了现实。 § 7.1.1 中断的基本概念 当计算机正在执行正常的程序时,计算机系统中的某个部分突然出现某些异常情况或特殊请求,CPU这时就中止(暂停)它正在执行的正常程序,而转去执行申请中断的那个设备或事件的中断服务程序,执行完这个服务程序后,再自动返回到断点执行原来中断了的正常程序。 Company Logo
第七章:中断系统 中断处理示意图如下: Company Logo
第七章:中断系统 中断成为主机内部管理的重要技术手段,使计算机执行多道程序,带多个终端,为多个用户服务,大大加强了计算机整个系统的功能。 计算机的中断过程与“转子”指令的执行有些相似,但有区别。 子程序是能够完成一定功能的一串指令,可以成为主程序的一部分,也可以在主程序中的不同地方使用;而中断服务程序的主要功能是完成某种外设与主机之间的信息传送,每种外部设备的传送都有自己专用的中断服务程序。 Company Logo
有了中断系统,计算机在运行过程中出现如电源掉电、存储出错、运算溢出等故障时 ,CPU可以转去执行故障处理程序,自行处理故障而不必停机; 第七章:中断系统 §7.1.2 中断系统的作用 分时处理 有了中断系统, 多个外部设备可同时工作,大大提高了CPU的吞 吐率; 故障处理 有了中断系统,计算机在运行过程中出现如电源掉电、存储出错、运算溢出等故障时 ,CPU可以转去执行故障处理程序,自行处理故障而不必停机; 实时处理 有了中断系统,当计算机用于实时控制,随机为系统服务; Company Logo
引起中断的因素很多,来自内部(称为内部中断)和外部(称 为外部中断)。 第七章:中断系统 §7.1.3 中断源 发出中断申请的来源或引起中断的原因(事件)称为中断源。 引起中断的因素很多,来自内部(称为内部中断)和外部(称 为外部中断)。 一般有: 外部设备中断源:有传送信息的中断请求;传送信息出错中断请求;外设故障中断请求; 实时系统中断源:实时控制系统的中断请求 故障中断源:电源故障中断请求;计算机硬件器件故障中断请求; 软中断源:包括执行指令产生溢出、除法错等中断请求、执行中断指令INT产生的中断请求; Company Logo
§7.2 中断的处理过程 第七章:中断系统 一个完整的中断处理基本过程包括5个基本阶段: 要了解: 何时检查中断输入信号及其处理办法? 中断请求、中断判优、中断响应、中断处理、中断返回; 要了解: 何时检查中断输入信号及其处理办法? 如何把控制转给中断服务程序? 如何保护和恢复中断的现场? 如何识别中断源? 如何识别优先级较高的中断? 如何开放和关闭中断? Company Logo
§7.2.1中断请求与中断屏蔽 第七章:中断系统 1、中断请求的定义 中断请求 用某种信号通知CPU指明某台外设(中断源)正在请求需要CPU中断现行程序的执行。 中断请求信号 由中断源(外设)发出,通过接口中的中断请求触发器,经中断请求线向CPU提出的中断申请。 每一个中断源的接口电路中都设有一个中断请求触发器,中断请求触发器能将中断请求信号一直保持。 具有中断能力的CPU的外部引线中,都有一根或多根中断请求线。 Company Logo
第七章:中断系统 2、中断请求的条件 3、中断屏蔽 外设向CPU提出中断请求必须满足下列两个条件: (1)外设本身的准备工作已完成,置中断请求触发器的输出端置 “1”,表示该外设有了中断的要求。 (2)本台外设的中断请求未被屏蔽,即系统允许该外设向CPU提出中断请求,否则外设的中断请求将被屏蔽。 3、中断屏蔽 每个外设中断源的接口电路都设置了一个中断屏蔽触发器,可采用指令置触发器为“1” 或为“0”,开放或屏蔽外设的中断请求。 Company Logo
§7.2.2 中断优先级排队 第七章:中断系统 1、中断优先级(中断优先权) 设置原则: 定义:指根据各中断源的工作性质、缓急程度、重要性以及处理的方便性,而安排响应中断的级别顺序。为解决多个中断源(外设)同时请求中断问题而设置的。 设置原则: 依照计算机领域中的惯例,优先级最高的为0级。按先内部中断,后外部中断;先故障中断,后设备中断;先高速设备中断,后慢速设备中断;DMA请求优先于一般I/O传送,实时控制用的设备优先的原则安排优先级别。 Company Logo
第七章:中断系统 2、单级中断处理和多级中断处理 单级中断处理方式: 中断优先级的作用: 当多个中断源同时申请中断时,CPU按优先级从高到低的次序来处理。 当CPU正在处理某中断时,能响应更高级别的中断请求,而屏蔽掉同级或较低级别的中断请求。 2、单级中断处理和多级中断处理 单级中断处理方式: 当CPU正在处理某个中断时,不允许其它即便优先级高的中断源来终止CPU的程序执行,只能等到中断处理完毕后,CPU才响应其他中断。 Company Logo
第七章:中断系统 例1:系统中断优先等级是:设备A高于设备B高于设备C高于CPU,B设备请求中断CPU处理B设备中断,此间A、C同时提出了请求,此时CPU运行方法如图所示。 Company Logo
第七章:中断系统 例2:例1的多级中断处理过程 多级中断处理 CPU处理中断时,有优先级高的中断产生,CPU先处理优先级高的中断,处理完毕后再回到断点处理完被打断的中断程序。实现了中断嵌套 例2:例1的多级中断处理过程 Company Logo
第七章:中断系统 3、中断排队与中断源的识别 (1) 中断排队 多个中断源同时请求中断时,CPU必须确定首先为哪一个中断源服务,根据中断源要求的轻重缓急,排好中断处理的优先次序,这称为中断排队。 CPU首先响应优先级别最高的中断源。当中断处理完毕,再响应级别低的中断申请。 Company Logo
第七章:中断系统 (2)中断源识别 多级中断结构的微处理器 入口。 微处理器有多条中断请求线,如图所示。 CPU内部有一个寄存器为每一个中断输入提供一个“中断允许”位或“中断禁止”位,以便 分别开放(允许)或关闭(禁止)各个优先级的中断。 CPU内部有中断 判优电路能识别优先级最高的中断源从而转入对应的中断处理程序 入口。 Company Logo
第七章:中断系统 单线中断结构的微处理器 微处理器有一条中断请求线,多个中断源共用一根中断请求线,如图所示。 要判别哪个中断优先级最高,将程序引导到相应的中断处理程序 入口,解决这种结构的中断源识别问题常常有3种处理方法。 Company Logo
第七章:中断系统 (1) 程序查询识别(软件查询法) 一旦检测出有中断请求时, CPU就自动执行一段中断识别程序,该段程序按照预先安排好的优先次序对连接于中断线上的每一台设备逐台查,检查每台设备的中断请求状态位: 若此位为1,则程序转到此设备对应的中断服务程序入口地址 若此位为0。就查询下一个设备的中断请求状态位 Company Logo
第七章:中断系统 程序流程图如图所示。 优点: 是硬件简单,调整修改灵活; 缺点: 是耗费CPU较多的时间。 Company Logo
第七章:中断系统 (2) 单线串行顺序链识别(硬件查询法) 硬件电路的工作原理: 当有中断申请时,CPU执行N单元的产生查询信号POL的指令,该信号可沿着串行顺序链电路依次经过各设备接口; 若某一设备未发出中断请求信号,则使POL传给下一个设备接口; 若传到的某设备已发出中断请求信号,则POL信号到此截止,该设备接口产生回答信号SYN,同时将形成该设备的中断服务程序入口地址送CPU。 Company Logo
第七章:中断系统 (3)中断向量法识别 概念 向量地址 — 中断向量存放在内存区域中的首单元地址; 中断向量 — 中断服务程序的入口地址; 向量地址 — 中断向量存放在内存区域中的首单元地址; 中断向量法 — 指CPU响应中断后,中断硬件电路自动地将向量 地址送入CPU,CPU实现程序切换的方法; 向量中断(矢量中断)— 采用中断向量法的中断 Company Logo
第七章:中断系统 中断向量法识别中断源的硬件电路 优先权编码电路实现中断向量法识别中断源的原理图如图所示。 I N T R 1 A 中 断 优 先 权 编 码 电 路 设备接口 IR IM 主 机 INTR1 INTA1 INTM1 INTR2 INTA2 INTM2 INTR3 INTA3 INTM3 INTR INTA 向量地址 IR是中断请求触发器, 为“1”表示设备有中断请求; IM是中断屏蔽触发器,它由CPU指令设置状态,置IM=1表示该设备不参加中断优先权编码电路中的中断优先级排队; Company Logo
第七章:中断系统 工作过程为: (1) 设备通过各自的中断请求线向中断优先权编码电路发出中断请求信号INTR,经过中断优先权编码电路合并后向CPU申请INTR (2) CPU响应后,由中断响应线INTA回答中断优先权编码电路。 I N T R 1 A 中 断 优 先 权 编 码 电 路 设备接口 IR IM 主 机 INTR1 INTA1 INTM1 INTR2 INTA2 INTM2 INTR3 INTA3 INTM3 INTR INTA 向量地址 Company Logo
第七章:中断系统 (3) 中断优先权编码电路将提出中断请求的设备中优先级最高的向量地址送往CPU,并把INTA信号传送给该设备接口INTR。 (4) 将PC和PSW压入堆栈,中断向量→PC,CPU完成了程序切换。 (5) CPU开始执行PC指示的中断服务程序。 I N T R 1 A 中 断 优 先 权 编 码 电 路 设备接口 IR IM 主 机 INTR1 INTA1 INTM1 INTR2 INTA2 INTM2 INTR3 INTA3 INTM3 INTR INTA 向量地址 Company Logo
§7.2.3 中断响应 第七章:中断系统 1、中断响应的方法 中断响应就是如何找到中断服务程序入口的过程,这个过程是硬件与软件有机配合的过程; 常用的中断矢量法就是由请求中断的外部设备接口向CPU提供矢量, CPU根据这个矢量到矢量表中查找中断服务程序入口地址,而转入不同的中断处理服务程序口。 以Intel为CPU的PC系列的微机系统就采用矢量中断方式。 Company Logo
发出中断请求信号,并保持至CPU响应这个中断信号后为 止。 第七章:中断系统 2、中断响应的条件 (1) 设置中断请求触发器 发出中断请求信号,并保持至CPU响应这个中断信号后为 止。 (2) 设置中断屏蔽触发器 对中断屏蔽触发器的每一位置1或0,实现开放或禁止对应的中断请求被送出至CPU。 (3)CPU内部设置中断允许触发器 设置触发器为1或0实现开放或禁止CPU中断 (4)CPU执行现行指令结束之后才会响应中断。 Company Logo
(2)自动关中断,即置CPU中断允许触发器为“0”; (3)保护现场,将状态标志寄存器的内容压入堆栈保护起来; 第七章:中断系统 3、中断响应的过程 CPU响应中断将自动执行: (1)发出中断响应信号。 (2)自动关中断,即置CPU中断允许触发器为“0”; (3)保护现场,将状态标志寄存器的内容压入堆栈保护起来; (4)保存断点,把当前程序计数器PC的内容(断点)压入堆栈保护起来; (5)获取对应的中断服务程序的入口地址。 Company Logo
起始部分(也叫前处理部分)、主体部分和结尾部分。 第七章:中断系统 §7.2.4 中断处理 中断处理就是CPU执行中断服务程序。 中断服务程序一般由三个部分组成: 起始部分(也叫前处理部分)、主体部分和结尾部分。 Company Logo
(1) 保护现场,把中断服务程序中使用到的寄存器内容压入堆栈保护。 第七章:中断系统 1、 起始部分——保护现场 (1) 保护现场,把中断服务程序中使用到的寄存器内容压入堆栈保护。 实现保护现场是通过PUSH指令完成的。 (2) 开放(允许)CPU中断(置IF=1)。 目的是在本次中断处理过程中可以响应更高级的中断请求。若本次中断过程不允许再被中断,就不进行这一操作。 实现允许中断是通过开中断指令完成的。 Company Logo
第七章:中断系统 2、主体部分——中断服务 中断处理程序的主体部分是真正的服务程序,完成相应的操作。根据不同的任务设计相应的服务程序段。有的是进行数据传送,有的是检查设备,有的是数据传送完毕后结束处理。主体部分可以是一条指令。也可以是一段程序。 Company Logo
(1)关闭(禁止)CPU中断(置IF =0),禁止中断是通过关中断指令来实现的。 第七章:中断系统 3、结尾部分——恢复现场 (1)关闭(禁止)CPU中断(置IF =0),禁止中断是通过关中断指令来实现的。 (2)恢复现场,把保护现场中堆栈的内容弹回各个寄存器。 (3)清除中断请求寄存器相应位,表明本次中断服务程序已经结束。 (4)开CPU中断(置IF =1),以便CPU在返回主程序后能响应新的中断。 (5)中断返回。当CPU执行这条指令时,把主程序的断点地址从堆栈中弹出送回PC,CPU就重新执行被中断了的主程序。 Company Logo
第七章:中断系统 典型中断服务程序框架如图。 Company Logo
§7.3.1 8086/8088 CPU的中断结构体系 §7.3 IBMPC中断系统结构 第七章:中断系统 硬件中断 (外部中断) 非屏蔽中断 NMI 256种中断源 可屏蔽中断 INTR INT n 软件中断(内部中断) 除法出错 单步中断 INTO 溢处中断 Company Logo
第七章:中断系统 可用示意图表示: Company Logo
1、内部中断 CPU执行 INT n软中断指令,产生中断类型号为n的中断。 溢出中断 若某个操作使OF=1,则CPU执行INTO指令后立即产生类型码为 4的中断。 为程序员提供了一种处理算术运算出现溢出的手段。 除法出错中断 CPU执行除法指令DIV、IDIV时,若发现除数为0或商超过了存放它的Reg所能表示的范围,则产生类型码为0的中断。 Company Logo
(1) 中断类型号是指令中指定的或隐含的或是预定的。 (2) CPU不执行中断响应总线周期INTA。 单步或陷阱中断 当TF=1,则80X86处于单步工作方式。 CPU每执行完一条指令,会产生类型码为1的中断。 内部中断的特点是: (1) 中断类型号是指令中指定的或隐含的或是预定的。 (2) CPU不执行中断响应总线周期INTA。 (3) 除单步中断外。其他内部中断的优先级都比外部中断的 要高,都不能被屏蔽(禁止)。 (4) 单步中断的优先级是所有中断里最低的,它可以用中断允许标志0来屏蔽。 Company Logo
(1)非屏蔽中断 由NMI引脚出现 上升沿 触发 ,高电平维持2个T以上。 不受中断允许标志IF的限制,中断类型号固定为2。 2、外部中断(硬件中断) (1)非屏蔽中断 由NMI引脚出现 上升沿 触发 ,高电平维持2个T以上。 不受中断允许标志IF的限制,中断类型号固定为2。 CPU在执行完当前指令后立即响应中断请求而进入相应的处理。 Company Logo
由外部设备产生,从CPU的INTR端引入 ,高电平触发 中断。 (2)可屏蔽中断 由外部设备产生,从CPU的INTR端引入 ,高电平触发 中断。 可屏蔽中断受中断标志IF的影响,在IF=1,CPU才响应INTR的中断请求,转去执行中断服务程序。 可用指令设置IF为1 或 0。 CPU响应INTR请求时会执行两个中断响应总线周期,送出两个中断响应信号INTA脉冲,在送出第二个INTA脉冲期间,外设接口送出中断类型码CPU。 Company Logo
8086/8088共有256个中断源,中断类型码:0~255(00H~FFH)。 3、中断类型号和中断向量表 (1)中断类型码 8086/8088共有256个中断源,中断类型码:0~255(00H~FFH)。 (2)中断向量表 256个中断源对应256个中断服务程序,中断服务程序存放在存储器区域内; 将所有这些中断服务程序子程序的入口地址(中断向量)按序排放在一起,形成一个中断向量表。表位于CPU内存区的最低1K字节单元内; Company Logo
存放时:中断服务程序入口地址的偏移地址(IP,16位) 在前; 中断服务程序入口地址的段地址(CS,16位)在后。 每个中断向量占4个字节: 存放时:中断服务程序入口地址的偏移地址(IP,16位) 在前; 中断服务程序入口地址的段地址(CS,16位)在后。 中断类型码n和中断向量表地址(中断向量表的地址指针) 的关系: 中断向量表地址 = 中断类型码 n × 4 内存中地址为4n+1 、4n单元存放的是中断服务程序入口地址的偏移地址; 内存中地址为4n+3 、4n+2单元存放的是中断服务程序入口地址的段地址 Company Logo
中断向量表如下: CS IP ≈ P 003FFH 003FCH 00080H 0007CH 00014H 00012H 000 0CH 255 号向量 32 31 P 5 4 ( 溢出 ) 3 断电 2 非屏蔽 1 单步 除法错 16 位 专用 中断向量 (5 个 系统保留中 断向量 (27 用户可用 中 (224 中断向量表如下: CS IP Company Logo
【例7.1】 键盘中断的向量号为09H,它对应的中断服务程序的入口逻辑地址为0BA9H:0125H。键盘中断对应的中断矢量位于00024H~000027H的4个单元。这4个单元的内容如下:25H、01H、A9H、0BH 例1:中断类型码为20H的中断源的中断向量(中断服务程序入口地址)在中断向量表的表地址为 00080H~00083H ,若这4个单元中存放的内容分别为 10H、20H、30H、40H则表示中断服务程序入口地址为4030H:2010H 即物理地址为42310H。 Company Logo
每次开机启动后,在系统正式工作之前都必须对其进行初始化,即将相应的中断服务程序入口地址装入中断向量表中。 4、中断向量表的初始化 每次开机启动后,在系统正式工作之前都必须对其进行初始化,即将相应的中断服务程序入口地址装入中断向量表中。 可用下列两种方法实现: (1) 采用DOS系统功能调用。即INT 21H的25H号功能调用。 (2) 将中断服务程序的入口地址直接装入中断向量表中。 Company Logo
程序段如下: (2) 将中断服务程序的入口地址直接装入中断向量表中。 MOV AX,0 MOV ES,AX MOV DI,n ;中断类型号n→DI SHL DI,1 ;n×2 SHL DI,1 ;2n×2=n×4 MOV AX,OFFSET INT MOV BX,SEG INT MOV ES:[DI],AX ;中断服务程序偏移→向量表 MOV ES:[DI+2],BX ;中断服务程序段地址→向量表 Company Logo
内中断 ( 除零,INT 指令,断点,INTO指令 ) §7.3.2 8086/8088的中断响应过程 8086/8088检测出中断请求信号后,继续执行完当前的指令,再对中断作出处理。8086/8088对各中断源的响应和处理过程是不相同的。 1、中断优先级别 优先级 高 低 内中断 ( 除零,INT 指令,断点,INTO指令 ) 非屏蔽中断 可屏蔽中断 低 内中断( 单步 ) Company Logo
当有多个中断源同时产生中断申请时,CPU先响应优先权最高的中断源,再响应优先级较低的中断源。 2、中断类型码获取 不同中断源获取相应的中断类型码方法不同。 软件(内部)中断:中断类型码是自动形成的,分别为: 中断功能 中断类型码 被零除 0 单步中断 1 断点中断 3 溢出中断 4 INT n指令 n Company Logo
硬件(外部)中断: 非屏蔽中断 :类型码为2是内部自动产生的; 可屏蔽中断 :由外部硬件接口电路提供。 如果有可屏蔽中断请求,CPU处在开中断状态,且当前指令执行结束,则CPU转入两个连续的中断响应周期,在第二个中断响应周期的T4状态前沿,采样数据线获取由外设输入的中断类型码; Company Logo
8086/8088CPU在取得了类型码后的处理过程是一样的,其顺序为: 3、中断处理过程 8086/8088CPU在取得了类型码后的处理过程是一样的,其顺序为: (1)将中断类型码乘4,指向中断向量表中的中断处理子程序的入口地址。 (2)保存CPU的状态:把标志寄存器FR的内容压入堆栈。 (3)清除IF和TF的状态标志位,屏蔽新的INTR和单步中断。 (4)保存原来执行的主程序的中断点:把CS和IP的内容压入堆栈。 Company Logo
(5)转中断处理子程序入口地址,即把所指向的中断向量表中的低字(16位)送入IP,高字(16位)送入CS。 (6)执行中断处理子程序。 (7)返回到被中断了的主程序的断点继续执行。 Company Logo
整个中断的处理过程 Company Logo
Thank You !