第八章 中断系统
第八章 中断系统 8.1 中断原理 8.2 中断系统组成及其功能 8.3 中断源识别及中断优先权 8.4 8086中断系统 8.5 可编程中断控制器8259
8.1 中断原理 一 从无条件传送、条件传送到中断传送 条件传送最大的缺点就是为了CPU和外设在时间上配合正确,CPU花大量的时间用无条件方式对状态线进行查询,从而降低了整个系统的工作效率。 具有中断功能的CPU中,有一个硬件部件专门用于检测外设的状态线。
8.1 中断原理
8.1 中断原理 以8255为例
8.1 中断原理 二 中断概念
8.1 中断原理 二 中断概念 在中断传送方式下,外设有请求CPU服务的权利,当外部设备准备好向CPU传送数据,或者外设已准备就绪接收CPU的数据,或者有某些紧急情况要求处理,或者是定时时间到等等,此时,外设向CPU发出中断请求,CPU接收到请求并在一定条件下,暂时停止执行原来的程序而转去中断处理,处理好中断服务再返回来执行原来程序,这就是中断概念。
8.1 中断原理 三 中断应用 1、实时故障处理 存储器出错检测电路
8.1 中断原理 三 中断应用 2、分时操作,同时处理 有了中断功能,CPU可命令多个外设同时工作。虽然CPU在不同的时间点上为不同的任务工作,但宏观上看CPU几乎同时为不同的任务工作,极大地发挥了CPU高速性的特点。 处理任务1 处理任务2 处理任务3
8.2 中断系统组成及其功能 一 三个与中断有关的触发器 1、中断请求触发器 应该有两个特点: a、它的输出可以作为中断请求信号,在满足一定条件的情况下把信号发送给CPU,并在CPU未响应时一直保存下去 b、当CPU满足一定条件下响应了该中断请求信号,执行了相关的操作后,该中断请求信号可以被撤除。
8.2 中断系统组成及其功能 一 三个与中断有关的触发器
8.2 中断系统组成及其功能 一 三个与中断有关的触发器 2、中断屏蔽触发器 中断屏蔽触发器的功能就是决定中断请求触发器的输出信号是否可以作为中断请求信号发送给CPU,这样CPU通过对中断屏蔽触发器的设置就可以达到对中断源的控制。 中断屏蔽触 发 器
8.2 中断系统组成及其功能 一 三个与中断有关的触发器 3、CPU内部的中断允许触发器IF CPU通过对它进行设置来决定是否对发给它的中断请求信号进行响应。 中断检测 CLI IF0 关中断 STI IF1 开中断 INTR IF 中断逻辑
8.2 中断系统组成及其功能 一 三个与中断有关的触发器 3 CPU内部的中断允许触发器IF 一 三个与中断有关的触发器 3 CPU内部的中断允许触发器IF CPU一般设置两种中断类型:可屏蔽中断和不可屏蔽中断。可屏蔽中断受中断允许触发器控制,只有当IF为1时,CPU才能响应中断请求信号。而不可屏蔽中断不受中断允许触发器的控制,只要中断请求信号有效,CPU就必须响应。 NMI 中断检测 不可屏蔽中断 INTR 可屏蔽中断 中断逻辑 IF
8.2 中断系统组成及其功能 二 再谈中断条件 外设的中断请求信号(可屏蔽)发给CPU并得到响应,必须要满足如下两个条件: 2 CPU是否响应这个中断,还要看中断允许触发器是否处于开中断状态。只有CPU是开中断的条件下,CPU才能进入中断响应过程,处理中断事务。 开关网络
8.2 中断系统组成及其功能 二 再谈中断条件 中断申请信号INTR 中断响应 中断屏蔽FF 中断允许FF CPU内的中断逻辑
8.2 中断系统组成及其功能 三 中断响应过程 中断过程主要包括三个方面 1 外设发中断请求信号给CPU即中断请求 2 CPU对中断请求信号所作出的反应即中断响应 3 CPU执行对外设操作的子程序即中断处理
8.2 中断系统组成及其功能 三 中断响应过程 1、中断申请 当中断屏蔽触发器状态为1,则中断请求触发器输出的中断请求信号发给CPU。 2、中断响应 CPU响应可屏蔽中断申请必须满足的3个条件: ① 无总线请求 ② CPU被允许中断 ③ CPU执行完现行指令
8.2 中断系统组成及其功能 三 中断响应过程 3、中断处理 CPU响应中断后要自动完成三项 ① 关闭中断; ② CS、IP以及FR的内容推入堆栈; ③中断服务程序段地址送CS中,偏移地址送IP中。 一旦CPU响应中断,就可转入中断服务程序之中。中断服务程序的结构如下:
三 中断响应过程 8086中断响应过程
8.2 中断系统组成及其功能 三 中断响应过程 一旦CPU响应中断,就可转入中断服务程序之中。中断服务程序的结构如下: push ax ;1、保护现场 …… push bx sti ;2、开中断 …… ;3、中断处理 cli ;4、关中断 pop bx ;5、恢复现场 pop ax sti ;6、开中断和中断返回 iret
8.3 中断源识别及中断优先权 在中断系统中一个非常关键的问题是CPU如何知道是哪一个中断源发出的中断申请信号。只有正确地确定中断源,CPU才能转到相应的中断服务程序为之服务。这里,确定中断源的方法被称为中断源识别或中断方式。
8.3 中断源识别及中断优先权 ?!!! CPU INTR A B C
8.3 中断源识别及中断优先权 一 中断源识别 包括两个方面: 1、确定中断源, 2、找到该中断服务程序的首地址。下面给出解决问题的两种方案。
8.3 中断源识别及中断优先权 一 中断源识别 1、查询中断
8.3 中断源识别及中断优先权 一 中断源识别 1、查询中断 条件传送=查询中断? IN AL.IPORT ;从输入接口取中断信息 TEST AL,80H ;是0号设备请求吗? JNZ SEVO ;是,转0号设备服务程序 TEST AL,40H ;否,是1号设备请求吗? JNZ SEVl ;是,转1号设备服务程序 TEST AL,20H ;否,是2号设备请求吗? JNZ SEV2 ;是,转2号设备服务程序 TEST AL,10H ;否,是3号设备请求吗? JNZ SEV3 ;是,转3号设备服务程序 条件传送=查询中断? 查询中断是用软件查询的方法来确定中断源。这里的软件查询与前面谈到的软件查询方法实现CPU与外设通讯的概念不同。前面谈到的软件查询是检查外设状态,用以协调外设与CPU在时间上的不同步,是CPU主动询问外设是否要进行信息交换。此处,则在外设要求与CPU交换信息的前提下,从多个设备中查找请求交换信息的那个设备。有关查询中断和条件传送方式的关系将结合下面的例子做进一步讨论。 可见查询中断与条件传送之间的工作方式有相似之处,它们都是通过对外设提供的信号即中断请求信号或状态信号进行查询,实现从当前正在执行的程序向为外设服务的子程序的转移。但尽管如此,查询中断与条件传送存在着明显的本质上的区别。查询中断是在外设提供的信号有效时才开始查询,CPU无需判断外设是否准备好,因此没有浪费CPU的时间。而条件传送特点是在状态线处于无效时,程序就开始了查询,判断外设是否准备好,这个过程是CPU在等待外设,由于这个状态可能持续时间很长,因此浪费了CPU的大量时间。
8.3 中断源识别及中断优先权 一 中断源识别 1、查询中断 特点: 简单 响应慢
8.3 中断源识别及中断优先权 二 中断源识别 2、矢量中断 二 中断源识别 2、矢量中断 中断申请信号INTR和中断响应信号INTA是一对握手信号。在驱动一个中断事件过程中,中断请求信号是外设发给CPU的,当其有效时,表示外设请求CPU为之服务。而中断响应信号是CPU发给外设的,当其有效时,表明CPU可以为这个外设服务,同时要求外设提供中断类型号。
8.3 中断源识别及中断优先权 二 中断源识别 2、矢量中断 T CS
8.3 中断源识别及中断优先权 二中断优先权 1、软件方案 软件查询确定优先权的缺点是,响应中断慢
8.3 中断源识别及中断优先权 二 中断优先权 2、硬件方案 a、链形电路 这种方法是利用外设在系统中的物理位置来决定其中断优先权的
8.3 中断源识别及中断优先权 中断允许入 IEI=1, 允许发中断 中断允许出 IEO=IEI INTR 中断申请 中断申请 中断申请
8.3 中断源识别及中断优先权 二 中断优先权 2、硬件方案 b、编码电路 74LSl48是一个8到3线的优先权编码器,它是一个16个管脚双列直插式TTL器件.
8.3 中断源识别及中断优先权
8.3 中断源识别及中断优先权 Gs
8.3 中断源识别及中断优先权 中断嵌套 CPU响应中断时,一般先响应优先级高的,后响应优先级低的中断请求。
8.4 8086中断系统 如何实现中断嵌套? 机器进入中断服务程序后,硬件会自动关中断。 8.4 8086中断系统 如何实现中断嵌套? 机器进入中断服务程序后,硬件会自动关中断。 只有用STI指令将中断打开后,才允许高级中断进入,实现中断嵌套。 中断服程序结束前,必须用EOI命令结束该级中断,并用IRET指令返回到中断前的断点处去继续执行原程序。
8.4 8086中断系统 8086中断系统有两大类型的中断源: 一类是由外部设备产生的中断,称之为硬件中断,硬件中断有时又称外中断。对于硬件中断,又分为不可屏蔽中断和可屏蔽中断,硬件中断是通过CPU芯片的NMI管脚或INTR管脚从外部引入的。 另一类是由指令在某种运行结果时产生的中断,称之为软件中断。 中断类型号和中断服务子程序的入口地址之间的关系是什么?
8.4 8086中断系统 INT_PROC PROC FAR PUSH AX … POP AX IRET ?
8.4 8086中断系统 中断类型号和中断服务子程序的入口地址之间的关系
8.4 8086中断系统 一 不可屏蔽中断 所谓不可屏蔽中断就是用户不能通过CPU内的中断允许触发器IF控制的中断,由8086CPU的NMI管脚引入。NMI中断请求采用上升沿触发方式,这种中断一旦产生,在CPU内部直接生成中断类型号02。
8.4 8086中断系统 一 不可屏蔽中断
8.4 8086中断系统 一 不可屏蔽中断 如何处理多个NMI中断源?
8.4 8086中断系统 二 可屏蔽中断 可屏蔽中断就是用户可以控制的中断,其途径是通过对CPU内的IF的设置来禁止和允许CPU响应中断。可屏蔽中断由8086CPU的INTR管脚引入,电平触发,高电平有效。这种中断请求需要设备提供中断类型号,CPU响应中断后,取中断类型号的4倍作为中断服务入口地址表的地址,通过查表得到相应的中断服务程序首地址,转去执行相应的中断服务程序。
8.4 8086中断系统 4
8.4 8086中断系统 三 软件中断 软件中断是由8086指令系统中的某些指令产生,或由这些指令运行后某种特定的结果产生。
8.4 8086中断系统 三 软件中断 1、除法中断 当进行除法运算时,若除数为0或除数太小,使得商数大于相应寄存器所能表示的最大值,被称作除法出错。这时除法指令就相当于一个中断源,它向CPU发出类型0中断。 实验 mov BX,1 MOV AL,0 DIV AL
8.4 8086中断系统 三 软件中断 3、溢出中断 当算术运算产生溢出时,将在INTO指令控制下向CPU发出类型4的中断,即溢出中断。 比如 mov al,40h add al,40h into
8.4 8086中断系统 三 软件中断 3、单步中断和断点中断 (1)单步中断 当8086CPU的标志寄存器中的TF标志为1时,8086CPU处于单步工作方式,这时CPU在每条指令执行后自动产生类型l的中断。 TF在标志寄存器的第8位。 (2)断点中断 INT3指令是1字节指令(0CCH),
8.4 8086中断系统 三 软件中断 4、软中断 软中断是由中断指令引起的。中断指令的指令格式为 INT n ,操作数n就是中断类型号。当CPU执行完毕中断指令INT n后,就会立即产生一个中断类型号为n的中断。
8.4 8086中断系统 三 软件中断 4、软中断 int n call far [4*n] 注意:中断和子程序调用的差别
8.4 8086中断系统 四 8086CPU的中断管理 1、8086CPU的中断处理顺序 8086CPU的中断优先权排列从高到低为: 8.4 8086中断系统 四 8086CPU的中断管理 1、8086CPU的中断处理顺序 8086CPU的中断优先权排列从高到低为: 1、除法出错中断,溢出中断,INT n; 2、NMl; 3、INTR; 4、单步中断。
8.4 8086中断系统 四 8086CPU的中断管理 8086CPU的中断服务入口地址表
8.4 8086中断系统 五 中断入口地址设置 1、用串指令 CLI ;关中断 MOV AX,0 MOV ES,AX ;置附件段基地址为0 8.4 8086中断系统 五 中断入口地址设置 1、用串指令 CLI ;关中断 MOV AX,0 MOV ES,AX ;置附件段基地址为0 MOV DI, n*4 ;置附件段偏移地址到DI MOV AX,OFFSET INT_VCE;置中断程序首地址的偏移量到AX CLD STOSW ;填偏移量到中断地址表 MOV AX, SEG INT_VCE ;置中断程序的段基地址到AX STOSW ;填段基地址到中断地址表 STI ;开中断 ……
8.4 8086中断系统 五 中断入口地址设置 2、用伪指令 INT-TBL SEGMENT AT 0 ;定义INT-TBL段,段基地址为0 8.4 8086中断系统 五 中断入口地址设置 2、用伪指令 INT-TBL SEGMENT AT 0 ;定义INT-TBL段,段基地址为0 ORG n*4 ;指定偏移地址 DD INT—VCE ;存中断程序入口地址 INT-TBL ENDS …… ;其他处理 MCODE SEGMENT ;主程序 INT—VCE PROC FAR ;中断类型n的服务程序 …… IRET INT—VCE ENDP
8.4 8086中断系统 五 中断入口地址设置 3、用系统调用(推荐使用) 使用25H功能时要求: AL=中断类型号 DS:DX=中断服务程序首地址的段、偏移地址 注意DS保护 使用35H功能时要求: ES:BX=中断服务程序首地址的段、偏移地址
8.4 8086中断系统 五 中断入口地址设置 3、用系统调用(推荐使用) 8.4 8086中断系统 五 中断入口地址设置 3、用系统调用(推荐使用) PUSH DS MOV DX,SEG INT60H ;段基地址送DS MOV DS,DX MOV DX,OFFSET INT60H ;偏移地址送DX MOV AL,60H ;中断类型号送AL MOV AH,25H INT 21H ;25H功能调用 POP DS
8.4 8086中断系统 MOV AX, 0 五 中断入口地址设置 4、直接装入法 8.4 8086中断系统 五 中断入口地址设置 4、直接装入法 若外设的中断类型号为6BH,则此中断类型号对应的中断矢量表地址为从00lACH开始的四个存储单元.设中断服务程序段地址是1000H,偏移地址为2000H。 MOV AX, 0 MOV DS, AX ;置数据段段基地址为0 MOV AX, 2000H MOV [01ACH], AX ;对偏移地址为01AC的单元 MOV AX, 1000H ;送双字 MOV [01ACH+2], AX
8.4 8086中断系统 8086的中断响应与处理 从INTR引脚引入的可屏蔽中断的类型码是如何形成的。CPU响应INTR中断后,要执行两个连续的中断响应INTA总线周期,其时序图如下:
8086的中断响应与处理 第一个INTA# 周期,CPU使数据线D7~D0浮空, T2~T4期间向8259A发第1个中断响应信号INTA# 表示CPU已响应此中断,禁止其它总线控制器竞争总线。
8086的中断响应与处理 第二个INTA#周期,8259A收到第二个 INTA# 信号后,将中断类型号n置于数据总线上,由此找到中断服务程序的入口地址。
8.4 8086中断系统 六 中断概念的再讨论 1、中断与调子程序之间的关系 8.4 8086中断系统 六 中断概念的再讨论 1、中断与调子程序之间的关系 a、中断过程实际上是CPU从执行当前主程序转到执行为外设服务的子程序,因此从这个角度来看,是中断过程是一个调用子程序的过程。 b、中断过程与子程序调用的差别:比如调用子程序的过程是一个无条件过程,但中断过程的中断服务程序的调用一般是有条件的。子程序调用在整个程序执行中的位置是固定的。而硬件中断过程,只要条件满足,在整个程序执行的任意一时间点都有可能发生,硬件中断产生的调用过程是随机的和不可预测的。
8.4 8086中断系统 六 中断概念的再讨论 2、外部中断和 INT n 之间的关系 8.4 8086中断系统 六 中断概念的再讨论 2、外部中断和 INT n 之间的关系 结合中断指令INT n,可以这样理解外部中断:当外部中断源发中断给CPU时,如果CPU满足一定的条件,处于开中断状态,CPU就可以响应中断,这时外设在CPU正在执行指令与其下一个指令之间,等效“插入”了一个INT n指令,这里的 n 就是外设提供的中断类型号。注意这里用“等效”两字表示实际过程中是不存在插入INT n指令的操作,但CPU确实完成了类似INT n指令的功能,实现了主程序向中断程序的转移。