《微机原理课件微型计算机中断系统》由会员分享,可在线阅读,更多相关《微机原理课件微型计算机中断系统(78页珍藏版)》请在金锄头文库上搜索。
1、第七章 微型计算机中断系统7-1 概述一、中断概念 当CPU正常运行程序时,由于微处理器内部事件或外设 请求,引起CPU中断正在运行的程序,转去执行请求中断的外 设(或内部事件)的中断服务子程序,中断服务程序执行完毕 后,再返回被中止的程序,这一过程称为中断。 1. 中断源 引起程序中断的事件称为中断源。中断源有外部中断和 内部中断,内部中断由程序预先安排的中断指令(INT n)引 起,或由于CPU运算中产生的某些错误(如除法出错、运算溢 出)引起。外部中断是外部设备或协处理器向CPU发出中断申 请引起的。 2. 中断响应中断请求何时发生是随机的。CPU在每条指令的最后一 个T周期去检测INT
2、R引脚,CPU一旦检测到有中断请求,在满 足中断响应的条件下(IF=1),CPU响应中断,会向外设发出中断响应信号。并保护断点(当前CS、IP和PSW值 入栈 ),然后转向中断服务程序。中断服务程序执行完毕,CPU返 回原执行程序的中断处,继续向下执行,称为中断返回。 3. 中断向量表 CPU响应中断后,必须由中断源提供地址信息,引导程 序进入中断服务子程序,这些中断服务子程序的入口地址存放 在中断向量表中。内存中专门开辟了一个区域,存放中断向量 表(也称中断矢量表)。 4. 中断优先级 当有多个中断源请求中断时,中断系统判别中断申请的 优先级,CPU响应优先级高的中断,挂起优先级低的中断。当
3、 CPU在运行中中断服务子程序时,又有新的更高优先级的中断 申请进入,CPU要挂起原中断进入更高级的中断服务子程序,实现中断嵌套功能。 5. 中断屏蔽 当中断源申请中断时,CPU可以由软件设置,使之不能 响应,称为中断屏蔽。 本章讨论与8086/8088 CPU相配合的中断系统及中断接 口芯片8259A。二、中断分类 8086/8088有一个强有力的中断系统,可以处理256种不 同的中断。 8086/8088系统上的中断源如图7-1所示。以产生中 断的方法来分类,256种中断可以分为两大类:外部中断和内 部中断。图7-1 8086/8088中断源外部中断也称为硬件中断,是由外部的硬件产生的,硬
4、 件中断又分成不可屏蔽中断和可屏蔽中断。下面分别加以说明。1. 外部中断 8086/8088 CPU有两个外部中断请求线:不可屏蔽中断 请求线NMI和可屏蔽中断请求线INTR。 (1) 由NMI引脚引入的不可屏蔽中断请求,采用边沿触发, 上升沿之后维持两个时钟周期高电平有效。对于不可屏蔽中断 用户是不能用软件来屏蔽的,一旦有不可屏蔽中断请求,CPU 必须予以响应。不可屏蔽中断请求的中断类型号为2,即中断 处理程序的入口地址在0段的0008H000BH的4个单元中。 (2) 由INTR引脚引入的外设提出的可屏蔽中断请求,采用 电平触发,高电平有效,INTR信号的高电平必须维持到CPU 响应中断才
5、结束。可屏蔽中断是用户可以通过软件设置来屏蔽 的外部中断,即使外部设备有中断请求,CPU可以不予响应。 由外设引起的可屏蔽中断请求要得到响应应有两个条件:外 设中断请求是否被屏蔽;CPU是否允许响应中断。 在8086 CPU系统中,外设的中断请求信号接入可编程 中断控制器8259A的IRi端,而8259A的中断输出INT连到CPU的INTR引脚上。8259A中设有中断屏蔽寄存器,它的8位对应 控制8个外设,通过设置这个寄存器的某位为0或1,可以允许 或禁止某个外设的中断请求。一块8259A可管理8个中断,当 外设超过8个时,可以使用多个8259A进行级联,扩大到64级 中断。外设与8259A的
6、连接是由用户来设计的,硬件连线决定 了中断类型号和中断优先级次序。 CPU是否允许响应中断,与中断允许位IF有关。IF=1 CPU允许响应中断;IF=0,CPU禁止响应中断。 2. 内部中断 内部中断又称为软件中断。软件中断通常有三种情况引 起:由中断指令INT引起的中断;由CPU的某些运算错误 引起的中断;由调试程序debug设置的中断。 内部中断只要由上面三种情况引起了,是不可屏蔽的! (1)由中断指令INT引起的中断 CPU执行一条INT n指令后立即产生中断,并且调用系 统中相应的中断处理程序去完成中断功能,指令中的n指出了中断类型号。 例7-1 测试存储器容量 INT 12H CPU
7、执行这条指令时,立即产生一个中断。并从中断向 量表的0:12H4开始的单元中取出4个字节,其内容为中断服 务子程序的段地址和偏移地址,然后转去此入口去执行中断服 务子程序,完成对存储器的测试。 (2)由CPU的某些运算错误引起的中断 CPU在运行程序时,会发现一些运算中出现的错误,此 时CPU就会中断,让用户去处理这些错误。主要有: 除法错中断:除法错中断类型号为0,在除法运算中,若除数 为0或商超过了寄存器所能表达的范围,就产生一个类型号为0 的中断,转去类型号为0的中断处理。 溢出中断:溢出中断类型号为4,专用指令为INTO。若OF=1 执行中断指令INTO;若OF=0,不执行中断指令。通
8、常INTO放 在加、减法运算指令的后面。例7-2 测试加法的溢出 ADD AX,BX INTO (3)由调试程序debug设置的中断 在调试程序时,为了检查中间结果或寻找程序中的错误, 在程序中可设置断点或进行单步跟踪,调试程序debug有此功能 它也是由中断来实现的。 单步中断:单步是每次只执行一条指令,然后屏幕显示当前各 寄存器和有关存储单元的内容,以及下条要执行的指令。这样逐 条运行指令,来跟踪程序的流程,以检查出程序中的错误。单步中断是在标志位TF=1时,每条指令执行后,CPU自动 产生中断类型号为1的中断。 断点中断:中断类型号为3。用debug调试程序时,可用G命令 设置断点。当C
9、PU执行到断点时便产生中断,同时显示当前各寄 存器和有关存储单元的内容,以及下条要执行的指令,供用户检 查。设置断点实际上是把一条断点指令INT 3插入到断点设置处。7-2 中断处理过程可屏蔽中断处理的过程一般分成几步:中断请求;中断 响应;保护现场;转入中断服务子程序;恢复现场和中断返回。 其流程如图7-2所示。图7-2 可屏蔽中断处理流程图一、CPU响应中断过程 CPU响应中断要有三个条件: 外设提出中断申请 本中断位未被屏蔽 中断允许 当中断接口电路中的中断屏蔽触发器未被屏蔽时,外设 可通过中断接口发出中断申请。外设向CPU发出中断请求的时 间是随机的,而CPU在每条指令的最后一个机器周
10、期的最后一 个T状态去采样中断请求输入线INTR,当CPU在INTR引脚上 接收到一个有效的中断请求信号,而CPU内部的中断允许触发 器是开放的,则在当前指令执行完后CPU响应中断。 CPU响应中断后,对外设接口发出两个中断响应信号,第一个 信号通知外设,CPU已响应申请的中断请 求,准备发送中断类型号;当外设收到第二个 以后,立即 往数据线上给CPU送中断类型号。CPU在响应外部中断,并转 入相应中断服务子程序的过程中,自动依次做以下工作:(1)从数据总线上读取中断类型号,将其存入内部暂存器。 (2)将标志寄存器PSW的值入栈。 (3)将PSW中的中断允许标志IF和单步标志TF清0,以屏蔽外
11、 部其它中断请求,和避免CPU以单步方式执行中断处理子程序。 (4)保护断点,将当前指令下面一条指令的段地址CS和指令 指针IP的值入栈,使中断处理完毕后,能正确返回到主程序继 续执行。 (5)根据中断类型号到中断向量表中找到中断向量,转入相应 中断服务子程序。 (6)中断处理程序结束后,从堆栈中依次弹出IP、CS和PSW, 然后返回主程序断点处,继续执行原来的程序。 对于不可屏蔽中断请求,不必判断IF是否为1,也不是由 外设接口给出中断类型号,从NMI引脚进入的中断请求规定其 中断类型号为2。在运行中断子程序过程中,若NMI引脚上有不 可屏蔽中断请求信号,CPU仍能响应。 软件中断由程序设定
12、,没有随机性,它不受中断允许标志位IF的影响,中断类型号由指令INT n中的n决定。正在执行软 件中断时,如果有不可屏蔽中断请求,就会在当前指令执行完 后立即予以响应。如果有可屏蔽中断请求,并且IF=1,也会在 当前指令执行完后予以响应。 二、中断向量表 寻找中断源可以用查询中断及矢量中断两种方法。 查询中断是采用软件查询方法,中断响应后启动中断查 询程序,依次查询哪个设备的中断请求触发器为1,检测到后, 转向此设备预先设置的中断服务程序入口地址。此方法较简单, 但花费时间多,并且后面的设备服务机会少,在8086系统中一 般采用矢量中断方法。 矢量中断是将每个设备的中断服务程序的入口地址(矢
13、量地址)集中,依次放在中断向量表中。当CPU响应中断后, 控制逻辑根据外设提供的中断类型号查找中断向量表,然后将 中断服务程序的入口地址送到CS段寄存器和指令指针IP,CPU 转入中断服务子程序。这样大大加快了中断处理的速度。1. 中断向量表 中断向量表又称中断服务程序入口地址表。8086/8088 系统允许处理256种类型的中断,对应的中断类型号为0FFH 在存储器的00000H003FFH,占用1K字节空间,用作存放中 断向量。每个类型号占4个字节,高2个字节存放中断入口地址 的段地址,低2个字节存放段内偏移地址,如图7-4所示。图7-4 8086/8088中断向量表各个中断处理程序的段地
14、址和偏移地址按中断类型号顺 序存放在中断向量表中。因此由中断类型号n4即可得到相应 中断向量的地址,取4n和4n+1单元中的内容(中断入口程序偏 移地址)装入指令指针IP,取4n+2和4n+3单元中的内容(中断 入口程序段地址)装入代码段寄存器CS,即可转入中断处理服 务子程序。例7-3 某中断的中断类型号为68H,图7-5图示了中断操作过程: (1)取中断类型号68H; (2)计算中断向量地址68H4=1A0H; (3)取中断入口地址的偏移地址送入IP,IP=2050H,段地址;送入CS,CS=A000H; (4)转向中断服务程序; (5)中断返回到INT 68H指令的下一条指令。图7-5
15、中断操作过程例子2. 中断向量(中断入口地址)的设置 IBM PC对256种中断类型已进行了地址分配,附录D中 给出了中断向量地址分配表。其中类型04为专用中断,中断 入口地址已由系统定义,用户不能修改;类型5类型31为系 统使用中断,也不允许用户修改;其余的中断类型号原则上可 以由用户定义,但实际上,有些中断类型目前已有用途,例 INT 21H为系统功能调用,中断类型20H3FH为DOS中断调 用。供用户使用的中断类型号,它可以由用户定义为软中断, 由INT n指令引用;也可以通过INTR端直接接入,或通过中断 控制器8259A引入可屏蔽硬件中断。使用时用户要自己将中断 服务程序入口地址置入
16、相应的中断向量表中。有两种方法可为 中断类型号n设置中断向量,即将中断服务程序的入口地址置入 中断类型号n所对应的中断向量表中。一种方法用指令来设置, 另一种方法利用DOS功能调用来设置。例7-5 用指令来设置中断服务程序的入口地址到中断类型号n 所对应的中断向量表中。 MOV AX,0 MOV ES,AX MOV BX,N*4 MOV AX,OFFSET INTRAD ;置入偏移地址 MOV ES:WORD PTRBX,AX MOV AX,SEG INTRAD;置入段地址 MOV ES:WORD PTRBX+2,AX STI INTRAD: ;类型号n的中断服务子程序 IRET 实际上,在设置或检查任何中断向量时,总是避免直接 使用中断向量的绝对地址,而是利用DOS功能调用INT 21H设置中断向量和取出中断向量。此外要注意,在设置自己的中断 向量时,应先保存原中断向量,在设置新的中断向量,在程序 结束前恢复原中断向量。 设置中断向