大工计算机原理-第6章 中断系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
你正在溜号,老师突然提问你,你回答完坐下后,接着溜号。
这就是现实中,中断的实例。
这一章的概念很重要
1、中断:当CPU正常运行时,系统外部、内部或现行程序本身若出现紧急事件,处理器必须立即强行中止现行程序的运行,改变机器的工作状态并启动相应的程序来处理这些事件,然后再恢复原来的程序运行,这一过程称为中断。
2、中断源:能够向CPU发出中断请求的中断来源称为中断源。
中断源分为(硬件中断源)和(软件中断源)。
中断源能发出中断请求信号到CPU,所以中断源中一般要求有(中断请求触发器),请求信号有(边沿请求)和(电平请求)两种。
3、中断系统的目的:维持系统正常工作,提高系统效率;实时处理;为故障处理作准备。
4、中断分类:中断分为(外部中断,也叫硬件中断)和(内部中断,也叫软件中断)两大类。
其中外部中断分为两类:
⑴可屏蔽中断INTR,受标志寄存器中的IF位控制;(高电平触发)
⑵不可屏蔽中断NMI,不受标志寄存器中的IF位控制。
(上升沿信号触发)
5、中断系统功能
⑴中断处理:发现中断请求、响应中断请求、执行中断服务程序、中断返回。
⑵中断控制:中断优先权排队、中断嵌套。
某优先权低的中断B正在处理中,允许另一个优先权高于它的中断A中断它(B)。
二、中断处理过程
8086CPU在每条指令的(最后一个时钟周期)检测(中断请求信号输入线INTR)。
我的理解:
检测:程序的执行就是一条条指令的执行,而每条指令执行后会自动检测是否有中断发生。
是否中断处理:如果检测到有中断发生,是否响应它呢?有两个条件:①当前是否开放中断?(也就是IF=1?)②现行指令执行完了吗?如果这两个条件都是成立,则进入中断处理阶段。
中断处理过程(######重要重要重要重要######):
1.关中断(中断响应信号INTA)
2.保存断点(指令指针IP值和CS值压入堆栈,也就是断点保护)
3.识别中断源(找到相应的中断服务程序的入口地址,就是中断的识别)
4.保护现场(把断点处有关寄存器的内容以及标志寄存器的状态压入堆栈保护)
5.执行中断服务程序(此期间,可在适当时刻重新开放中断,以允许响应较高优先级的中断)
6.恢复现场并返回
我的解释:1-有人请求我了,其它人别请求我了。
2-记住此位置,以便将来再回来。
3-谁请求的我,找到它。
4-记住更详细的细节,以便回来时恢复现场。
5-到请求我的那疙瘩去一趟,这时候又可以让一些人请求我了。
6-完成请求,我回来了,恢复现场,就像什么都没发生。
● 现场:是指进入中断服务程序之前,CPU 各个寄存器的状态。
前3项是中断响应过程,一般由中断系统硬件负责完成;后3项是中断处理过程,通常是由用户或系统程序设计者编制的中断处理程序(软件)负责完成。
● 中断优先级:实际系统中,多个中断请求可能同时出现,但中断系统只能按一定的次序来响应和处理,这时CPU 必须确定服务的次序,即根据中断源的(重要性)和(实时性),照顾到(操作系统处理的方便),对中断源的响应次序进行确定。
这个响应次序称为中断优先级。
我的解释:中断请求可能同时出现,但同一时刻我只能处理一个,怎么办?有三点依据来确定我处理它们的次序:根据中断源的①重要性和②实时性,照顾到③操作系统处理的方便。
这个次序就是中断优先级。
重要重要
⏹ 软件查询法:软件来确定中断优先级(硬件简单,实时性差)。
非解决之道!
⏹ 硬件组成中断优先级编码电路来实现。
真正解决之道!
✓ 简单硬件查询方式——菊花链法
✓ 中断控制专用硬件方式
●
中断嵌套的深度:可多级,级数原则上不受限制,取决于堆栈深度。
● 中断分类:
二、中断向量表
中断向量:实际上就是中断服务程序的入口地址,每个中断类型对应一个中断向量。
每个中断向量占(4字节)的存储单元。
其中,前两个字节单元存放中断服务程序入口地址的偏移量(IP),低字节在前,高字节在后;后两个字节单元存放中断服务程序入口地址的段基值(CS),也是低字节在前,高字节在后。
(一定要记住呀)
中断向量表:存放中断向量的存储区称为中断向量表。
通常在存储器的低地址区。
8086/8088有256种中断类型,类型号为0-255(或0-FFH ),共有256个中断向量,每个占4个存储单元,所以需要1024个字节,在存储器的最低端,地址从00000H-003FFH ,这块地址空间就是中断向量表。
(一定要记住呀)先是IP 的低高字节,再是CS 的低高字节。
● 从低地址开始:
5个专用的中断:#0-除数为0中断、#1-单步中断、#2-非屏蔽中断(NMI)、#3-断点
中断、#4-溢出中断
27个保留的中断:
大部分用于系统中断,如20H-3FH 为DOS 中断调用。
● 中断向量按中断类型码从0-255顺序存放。
知道了中断类型号,便可计算出相应的中断
向量在表中存放的位置。
从0开始哟!
先是IP 的低高字节,再是CS 的低高字节。
中断类型号×4=中断向量指针的低地址 →(IP )
中断类型号×4+2 =中断向量指针的高地址 →(CS )
● 设中断类型码为N ,试叙述使程序转入相应中断服务程序的控制过程。
CPU 响应中断时,只需要把中断类型码N 左移2位(乘以4),即可得到中断向量在中断向量表中的对应地址4N ,然后把由此地址开始的两个低字节单元的内容装入IP 寄存器: IP ← (4N, 4N+1); 再把两个高字节单元的内容装入 CS 寄存器: CS ←(4N+2, 4N+3)。
这就是使程序转入中断类型码为N 的中断服务程序的控制过程
● 要会计算。
◆ 例子1:中断类型码为27H 的中断所对应的中断向量应存放在:
中断类型码27H=0010 0111B ,左移2位得:1001 1100B (9CH )。
可得向量表地址为:
从0000H :009CH 开始的4个连续字节单元中 如果相应存储单元的内容如下图所示,按先低后高原则,IP =4321H ,CS =8765H 。
那么27H 号中断的中断服务程序的入口地址即为8765H:4321H 。
0000:009FH
0000:009CH
◆ 例子2:设中断向量表中(00128H )=258AH ;(0012AH )=3C02H ;当执行INT 4AH
指令后,则转移到中断子程序入口的物理地址是多少?
解: 4AH =0100 1010B ,左移2位,即4AH*4=128H
(IP )=(0128H )=258AH ,(CS )=(012AH )=3C02H
转移到中断子程序入口的物理地址=3C02H :258A =3C02H*16+258AH=3E5AAH
◆例子3:在一个系统中,对应于中断类型号27H的中断处理程序放在
2345H:7890H开始的内存区域,请计算相应的中断向量表地址及内容。
解:0000:009CH~009FH 存放(90H、78H、45H、23H)
●外部中断,也称硬件中断。
8086 CPU为外部中断提供两条引线,即(NMI)和(INTR),
用来输入中断请求信号。
(注意填空)
1、非屏蔽中断(NMI):不受中断标志位的控制,中断类型号固定为2,所以中断向量放
在0000:0008开始的4个单元中。
N MI中断一般用于紧急情况的处理。
2、可屏蔽中断(INTR):受中断标志位的控制,IF=1,CPU才能响应INTR中断。
CPU响
应INTR中断时,往INTA引脚上发两个负脉冲(因INTR是0有效),外设接到第二个负脉冲后,立即往数据总线上送出中断类型码,供CPU读取。
3、若NMI和 INTR 同时发生,则优先响应NMI。
●内部中断即软件中断,它是由于CPU执行了INT n(含INT 3)、INT 0指令,或者由于除
法出错以及进行单步操作所引起的中断,主要包括:INT n指令中断、断点中断、溢出中断、除法错中断以及单步中断。
(与专用的5个中断,基本相对应!)
●要记住5个专用类型:
◆类型0中断-----除数为0中断(软)
◆类型1中断-----单步中断(软)
◆类型2中断-----非屏蔽中断(NMI) (硬件中断)
◆类型3中断-----断点中断(软)
◆类型4中断-----溢出中断(软)
●单步中断(类型1)
当把CPU标志寄存器的TF=1后,CPU便处于单步工作方式。
在单步工作方式下,CPU每执行完一条指令,就会自动产生一个1 型中断,进入1型中断处理程序。
此处理程序显示CPU内部各寄存器的内容并告知某些附带的信息。
●简答题:
对一个大的程序,不可能对整个程序全部用单步方式来调试,而只能先将程序中的某错误确定在程序中的一小段中,再对这一小段程序用单步方式跟踪调试。
断点中断就是用来达到这个目的的。
◆在所有INT n
断指令都是两字节指令。
◆内部中断的特点是:
(1) 中断类型码由CPU内部自动提供。
(2) 除单步中断外,所有内部中断都不可以用软件的方法来禁止(屏蔽)。
单步中断可以通过软件将TF标志置1或清0来予以允许或禁止。
(3) 除单步中断外,所有内部中断(也就是软件中断)的优先级都比外部中断高。
软
软
◆
所有内部中断的优先级都比外部中断高。
(错) ◆
所有软件中断的优先级都比硬件中断高。
(错) ◆
所有内部中断都不可以用软件的方法来禁止(屏蔽)
◆
所有软件中断都不可以用软件的方法来禁止(屏蔽)◆ 所谓断点就是指响应中断时,主程序中当前指令下面的一条指令的段寄存器CS 的值和
指令指针寄存器IP 的值压入堆栈,先压CS ,再压IP 的值。
(与中断向量表的顺序相反)
#####中断类型号的获得#####
⑴ 除法错误、单步中断、非屏蔽中断NMI 、断点中断和溢出中断,分别由CPU 内部自动提供中断类型号(0-4)。
⑵ 软件中断(内部中断),则是从指令流中,即在第2个字节中读得中断类型号。
⑶ 硬件中断(外部中断),可屏蔽中断INTR 可以用不同的方法获得中断类型号,通常由硬件提供,如8259A 芯片可以将中断类型号送到数据总线上,由CPU 读取而获得。
至于不可屏蔽中断NMI ,中断类型码由CPU 内部自动产生,固定为类别码2。
⏹ Intel 8259A (可编程中断控制器(PIC Programmable Interrupt Controller ))用于管理和控制8086/8088的外部中断请求,实现优先级判决,提供中断类型码,屏蔽中断输入等功能。
⏹ 使用单片8259A 可以管理8级中断;采用级联方式,可扩充到64级
⏹ (但需要用9片8259A 。
1主,8从)。
⏹ CAS2-CAS0 ------级联线(CASCADE LINES ),传送3位标识码,用于区分特定的从控制器。
双向:对于主片为输出,对于从片为输入。
主片CAS 0~CAS 2为输出,从片CAS 0~CAS 2为输入;主从片间对应的CAS 0~CAS 2相连;(见下图)
⏹ EN SP /------从片(Slave PIC)/允许缓冲器信号。
作为输入时,8259A 作为主片(EN SP /=1)下图接+5V
8259A 作为从片(EN SP /=0)下图接地
#########东大课件,级联的解释##########
一个系统中,8259A 可以级连,有1个主8259A ,若干个(最多8个)从8259A 。
级连时,主8259A 的三条级连线CAS0~CAS2作为输出线,连至每个从8259A 的CAS0~CAS2。
每个从8259A 的中断请求信号INT ,连至主8259A 的一个中断请求输入端IR 。
主8259A 的INT 线连至CPU 的中断请求输入端SP*/EN*在非缓冲方式下,规定该8259A 是主片(SP*=1)还是从片(SP*=0)
主 从
从。