第九章 中断
? 概述
? 中断原理
? 中断系统组成及其功能
? 中断响应过程
? 8086中断系统
? 8086CPU的中断管理
? 可编程中断管理芯片 8259A
概述
当 CPU用查询的方式与外设交换信息时,
CPU就要浪费很多时间去等待外设。这样
就引出一个快速的 CPU与慢速的外设之间
数据传送的矛盾,这也是计算机在发展
过程中遇到的严重问题之一。为解决这
个问题,一方面要提高外设的工作速度,
另一方面发展了中断慨念。中断系统是
计算机的重要指标之一。
9,1 中断原理
一、从无条件传送、条件传送到中断传送
条件传送最大的缺点就是为了 CPU和外设在
时间上配合正确,CPU花大量的时间用无条件
方式对状态线进行查询,从而降低了整个系统
的工作效率。
具有中断功能的 CPU中,有一个硬件部件专
门用于检测外设的状态线。
检测状态信号
状态信号有效?
外设处理
外设处理检测状态信号



二、中断概念
在中断传送方式下,外设应有请求 CPU
服务的权利,当外部设备准备好向 CPU传送
数据,或者外设已准备就绪接收 CPU的数据,
或者有某些紧急情况要求处理,或者是定时
时间到等等。这时,外设向 CPU发出中断请
求,CPU接收到请求并在一定条件下,暂时
停止执行原来的程序而转去中断处理,处理
好中断服务再返回来执行原来程序,这就是
一个中断概念。
处理文档
电话铃响
暂停文档
文档中作暂停记号
电话交谈
找出暂停记号位置
继续处理文档
执行主程序 ( 日常事务程序 )
中断申请信号有效 ( 中断请求 )
暂停执行主程序响应中断
当前 PC 及寄存器入栈 ( 保护现场 )
处理外设要求 ( 中断服务 )
寄存器及 PC 出栈 ( 恢复现场及中断返回 )
继续执行主程序
三、中断应用
1、实时故障处理
存储器出错检测电路
存储器
奇偶检测电路
奇偶

中断请求信号
2、分时操作,同时处理
有了中断功能,CPU可命令多个外
设同时工作。虽然 CPU在不同的时间
点上为不同的任务工作,但宏观上
看 CPU几乎同时为不同的任务工作,
极大地发挥了 CPU高速性的特点。
9,2 中断系统组成及其功能
一,三个与中断有关的触发器
1、中断请求触发器
有两个特点:
( 1)它的输出可以作为中断请求信号,在满足一
定条件的情况下把信号发送给 CPU,并在 CPU未响
应时一直保存下去;
( 2)、当 CPU满足一定条件下响应了该中断请求
信号,执行了相关的操作后,该中断请求信号可
以被撤除。 D Q
R D
状态线
中断请求
外设读、写操作
CLK
+5V
2、中断屏蔽触发器
中断屏蔽触发器的功能就是决定
中断请求触发器的输出信号是否可
以作为中断请求信号发送给 CPU,这
样 CPU通过对中断屏蔽触发器的设置
就可以达到对中断源的控制。
3,CPU内部的中断允许触发器。
CPU通过对它进行设置来决定是否对发给它的中
断请求信号进行响应。
有些 CPU,比如 8086CPU,设置了两种中断类型
可屏蔽中断和不可屏蔽中断。可屏蔽中断受中断
允许触发器控制,只有当 IF为 1时,CPU才能响应
中断请求信号。而不可屏蔽中断不受中断允许触
发器的控制,只要中断请求信号有效,不管 IF是
否为 1,CPU就必须响应。因此不可屏蔽中断的中
断优先级要大于可屏蔽中断的中断优先级 。
二,再谈中断条件
外设的中断请求信号要想发给 CPU并能最
终得到 CPU的响应,必须要满足如下两个条
件:一个是中断屏蔽触发器处于非屏蔽状态。
在这种情况下,中断请求信号才能发给 CPU。
但 CPU是否相应这个中断,还要看中断允许
触发器是否处于开中断状态。只有 CPU是开
中断的条件下,CPU才能进入中断响应过程,
处理中断事务。这就是第二个条件。
9,3 中断响应过程
中断过程主要包括三个方面:
? 外设发中断请求信号给 CPU即中断请求;
?CPU对中断请求信号所作出反应即中断响应;
?CPU执行对外设操作的子程序即中断处理。
一、中断申请
当中断屏蔽触发器状态为 1,则中断请
求触发器输出的中断请求信号发给 CPU。
二、中断响应
CPU响应可屏蔽中断申请必须满足 3个条件,
① 无总线请求;
② CPU被允许中断;
③ CPU执行完现行指令,
三、中断处理
CPU响应中断后要自动完成三项任务
1,关闭中断;
2,CS,IP以及 FR的内容推入堆栈
3、中断服务程序段地址送入 CS中,
偏移地址送入 IP中。
一旦 CPU响应中断,就可转入中断服务程
序之中。中断服务程序的结构如下:
push ax ;保护现场
……
push bx
sti ;开中断
…… ;中断处理
cli ;关中断
pop bx ;恢复现场
……
pop ax
sti ;开中断
reti ;中断返回
四、中断源识别及中断优先权
在中断系统中一个非常关键的问题是
CPU如何知道是哪一个中断源发出的中断
申请信号 。 只有正确地确定中断源, CPU
才能转到相应的中断服务程序为之服务 。
这里, 确定中断源的方法被称为中断源
识别或中断方式 。
1,中断源识别
包括两个方面:
其一, 确定中断源,
其二, 找到该中断服务程序的首地址 。
下面我们给出解决问题的两种方案 。
( 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号设备服务程序
( 2)矢量中断
中断申请信号和中断
响应信号是一对握手信号 。
在驱动一个中断事件过程
中, 中断请求信号是外设
发给 CPU的, 当其有效时,
表示外设请求 CPU为之服务 。
而中断响应信号是 CPU发给
外设的, 当其有效时, 表
明 CPU可以为这个外设服务,
同时要求外设提供中断类
型号 。
矢量中断
7
4
L
S
2
4
5
D Q
CLK
R D
A7
A6
A5
A4
A3
A2
A1
A0
+5V
中断申请
接CPU的 D
7
~D
0
INTA
INTR
2,中断优先权
( 1)软件方案
软件查询确定优先权的缺点是,响应中断慢。
( 2)、硬件方案
?链形电路
这种方法是利用外设在系统中的
物理位置来决定其中断优先权的
?编码电路
74LSl48是一个 8到 3线的优先权
编码器,它是一个 16个管脚双列直
插式 TTL器件.
7
4
L
S
2
4
5
D Q
CLK
R D
A7
A6
A5
A4
A3
A2
A1
A0
T
CS
B7
B6
B5
B4
B3
B2
B1
B0
+5V
接CPU 的D
7
~D
0
INTA
INTR
7
4
L
S
1
4
8
I 7
I 6
I 5
I 4
I 3
I 2
I 1
I 0
A 2
A 1
A 0
INT 7
INT 6
INT 5
INT 4
INT 3
INT 2
INT 1
INT 0
9,4 8086中断系统
一,8086的中断源
8086中断系统有两大类型的中断源,一类
是由外部设备产生的中断,我们称之为硬件中
断,硬件中断有时又称外中断。另一类是由指
令在某种运行结果时产生的中断,我们称之为
软件中断。另外对于硬件中断,又分为不可屏
蔽中断和可屏蔽中断,硬件中断是通过 CPU芯
片的 INTR管脚或 NMI管脚从外部引入的。
中断类型号和中断服务子程序的入口地址之
间的关系:
中断类
型号n
×4
0000:4n+0
0000:4n+1
0000:4n+2
0000:4n+3
00
10
00
20
1000
2000
IP
CS
内存
二、不可屏蔽中断
所谓不可屏蔽中断就是用户不能通过
CPU内的中断允许触发器 IF控制的中断,
由 8086CPU的 NMI管脚引入 。 NMI中断请求
采用上升沿触发方式, 这种中断一旦产
生, 在 CPU内部直接生成中断类型号 02。
0000:4*2+0
0000:4*2+1
0000:4*2+2
0000:4*2+3
00
10
00
20
1000
2000
IP
CS
内存IF= 0
IP,CS,FR进 栈
IP=[2*4+0]
CS=[2*4+2]
三,可屏蔽中断
可屏蔽中断就是用户可以控制的中断,
其途径是通过对 CPU内的中断允许触发器
IF的设置来禁止和允许 CPU响应中断 。 可
屏蔽中断由 8086CPU的 INTR管脚引入 。 这
种中断请求需要设备提供中断类型号,
CPU响应中断后, 取中断类型号的 4倍作
为中断服务入口地址表的地址, 通过查
表得到相应的中断服务程序首地址, 转
去执行相应的中断服务程序 。
0000:4*n+0
0000:4*n+1
0000:4*n+2
0000:4*n+3
00
10
00
20
1000
2000
内存IF= 0
IP,CS,FR进 栈
IP=[2*n+0]
CS=[2*n+2]
取中断类型号n
四,8086中断系统
1、软件中断
软件中断是由中断指令引起的 。 中
断指令的指令格式为 INT n,操作数 n
就是中断类型号 。 当 CPU执行完毕中断
指令 INT n后, 就会立即产生一个中断
类型号为 n的中断 。
(1)除法中断
当进行除法运算时,若除数为 0或
除数太小,使得商数大于相应寄存器
所能表示的最大值,被称作除法出错。
这时除法指令就相当于一个中断源,
它向 CPU发出类型 0中断。
(2) 溢出中断
当算术运算产生溢出时,将在 INTO指令控制下向
CPU发出类型 4的中断,即溢出中断。
(3)单步中断和断点中断
? 单步中断
当 8086CPU的标志寄存器中的 TF标志为 1时,
8086CPU处于单步工作方式,这时 CPU在每条指令
执行后自动产生类型 l的中断。
? 断点中断
INT3指令是 1字节指令, 可将这条指令的目
的代码嵌入任意条指令的操作码处, 从而实现断
点中断 。
五、中断概念的再讨论
1、中断与调子程序之间的关系
(1)中断过程实际上是 CPU从执行当前主程序转到执行为外设
服务的子程序,因此从这个角度来看,中断过程是一个调
用子程序的过程。
(2)中断过程与子程序调用还是有很大差别的,首先调用子
程序的过程是一个无条件过程,但中断过程的中断服务程
序的调用一般是有条件的。其次,子程序调用在整个程序
执行中的位置是固定的。但对于硬件中断过程,只要条件
满足,在整个程序执行的任意一时间点都有可能发生从主
程序向中断服务子程序的转移事件,也就是说硬件中断产
生的调用过程是随机的,不可预测的。
2、外部中断和 INT n 之间的关系
结合中断指令 INT n,我们可以这样理
解外部中断:当外部中断源发中断给 CPU时,
如果 CPU满足一定的条件, 处于开中断状态,
CPU就可以响应中断, 这时外设在 CPU正在执
行指令与其下一个指令之间, 等效, 插入,
了一个 INT n指令, 这里的 n就是外设提供的
中断类型号 。 注意这里用, 等效, 两字表示
实际过程中是不存在插入 INT n指令的操作,
但 CPU确实完成了类似 INT n指令的功能, 实
现了主程序向中断程序的转移 。
9,5 8086CPU的中断管理
一,8086CPU的中断处理顺序
8086CPU的中断优先权排列从高到低为:
? 1,除法出错中断, 溢出中断, INT n;
?2,NMl;
?3,INTR;
?4,单步中断 。
二,8086CPU的中
断服务入口地
址表
三,中断入口地址设置
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 ;开中断
……
2、用伪指令
INT- TBLSEGMENT AT 0 ;定义 INT- TBL段, 段基地址为 0
ORG n*4 ;指定偏移地址
DD INT— VCE ;存中断程序入口地址
INT- TBL ENDS
…… ;其他处理
MCODE SEGMENT ;主程序
…… ;其他处理
INT— VCE PROC FAR ;中断服务程序
……
IRET
INT— VCE ENDP
……
3、用系统调用
使用 DOS功能调用的 25H功能
要求:
AL=中断类型号
DS,DX=中断服务程序首地址的段, 偏移地

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
4、直接装入法
若外设的中断类型号为 6BH,则此中断类型
号对应的中断矢量表地址为从 00lACH开始的
四个存储单元.设中断服务程序段地址是
1000H,偏移地址为 2000H。
MOV AX,,0
MOV DS,AX ;置数据段段基地址为 0
MOV AX,2000H
MOV WORD PTR [01ACH],AX;对偏移地址为 01AC的单元
MOV AX,1000H ;送双字
MOV WORD PTR [01ACH+2l,AX
9,6 可编程中断管理芯片 8259A
一,8259A的内部结构
二,8259A的中断管理方式
1、中断优先权管理
( 1)完全嵌套方式
8259A的中断请求输入端引入的中断具
有固定的优先权排队顺序,IR0为最高优
先级,IR1为次高优先级,依次类推,IR7
为最低优先级。
( 2)自动循环方式
从 IR0— IR7引入的中断轮流具有最高优
先权。
( 3)中断屏蔽方式
有两种方法:第一、普通屏蔽方式。
第二,采用特殊屏蔽方式。
( 4) 特殊完全嵌套方式
用在 8259A有级联的情况
2,8259A中断结束的管理方式
( 1)完全嵌套情况
可采用三种中断结束方式,一般 EOI方
式, 特殊 EOI方式, 自动 EOI方式 。 最常
用的为一般 EOI方式 。
( 2) 自动循环情况
也可采用三种中断结束方式,一般 EOI
方式, 特殊 EOI方式, 自动 EOI方式 。
三,IBM-PC机硬件中断
1,中断设置
在 PC/XT机中, 有一片 8259A中断控制
芯片, 可管理 8个中断源 。 在 PC/AT机中
有两片 8259A中断控制芯片, 可管理 15个
中断源 。
主片, IR0,IR1
从片,IR0,IR1,IR2,IR3,IR4,IR4,IR5,IR6,IR7
主片,IR3,IR4,IR5,IR5,IR7
2,PC机中断资源的使用
( 1)对中断屏蔽寄存器的操作
主片 8259A中断屏蔽寄存器的 I/ O端口地
址是 21H,它的 8位对应控制 8个外部设备,
通过设置这个寄存器的某位为 0或为 1来允许
或禁止某外部设备的中断 。 某位为 0表示允
许某种外设中断请求, 某位为 1表示某种外
没的中断请求被屏蔽 (禁止 )。
从片 8259A中断屏蔽寄存器的 I/ O端口
地址是 A1H
例, 只允许键盘中断, 可设置如下中断屏蔽字:
MOV AL,11111101B
OUT 21H,AL
如果系统重新增设键盘中断, 则可用下列指令实
现:
IN AL,21H
AND AL,11111101B
OUT 21H,AL
(2)、中断结束命令
在一次中断处理结束之前,还应给 8259A可编程
中断控制器的中断命令寄存器发出中断结束命令
EOI,可采用一般的 EOI方式,中断命令寄存器的 I
/ O端口地址为 20H,结束外中断用下面的指令:
MOV AL,20H
OUT 20H,AL
同样, 如果中断是从片 8259A的中断输入线产生
的, 则要同时对主片和从片的中断命令寄存器发
EOI命令 。 从片 8259A中断命令寄存器的 I/ O端口地
址是 A0H
四, 中断传送方式的设计过程
1,硬件方面
设定硬件的中断类型号
2,软件方面
? 关中断
? 填写中断入口地址表
? 设置 8259A及其他编程芯片
? 开中断
? 编写中断服务子程序