1
第四章 中断控制
1 中断系统基本概念
2 8086/8088的中断系统
3 Intel 8259A可编程中断控制器
4 中断程序举例
2
本章学习目标
掌握有关中断的基本概念,中断优先级,中断嵌套,中断屏蔽,中断向量等基本概念 。
了解 8086/8088中断系统中的中断源分类,IBM-PC
机中断系统结构 。
掌握可编程中断控制器 8259A的功能,内部结构,
工作方式及初始化命令和操作命令的定义,使用方法,
服务程序的基本编写方法 。
3
计算机采用中断控制技术的主要用途计算机采用中断控制技术主要用在以下三个方面:
( 1)故障处理
( 2)分时操作
( 3)实时处理
4
1 中断的基本概念一 CPU与外设之间的数据传送控制方式
(即 I/O控制方式 ),通常有以下三种:
程序控制方式
中断方式
DMA方式 (Direct Memory Access)
5
程序控制方式
查询式输入、输出程序流程图读取状态信息准备好?
输入数据是否读取状态信息忙?
输出数据否是
CPU通过执行程序不断读取并检测外设的状态,只有在外设确实已准备就绪的情况下,才进行数据传送;否则,还要继续不断地查询外设的状态。
查询方式的程序实现都是在主程序里
6
程序控制方式
程序查询传送方式比无条件传送方式要准确可靠,但在此种方式下,CPU要不断查询外设的状态,占用了大量 CPU时间,而真正用于数据传送的时间却很少,即 CPU的工作效率很低;另外,采用这种方式,也很难满足实时系统对 I/O处理的要求。因此,出现了中断控制方式。
7
一、中断基本概念定义,CPU穿插处理随机事件的过程。
中断过程:
中断处理的隐操作,程序状态及程序断点地址的进栈及出栈。
中断请求 中断响应 中断服务 中断结束中断处理二 中断方式
8
一个完整的中断过程包括:
中断请求;
中断判优;
中断响应;
中断处理;
中断返回,
中断的全过程及有关概念
9
,中断请求,是指中断源 (引起中断的事件或设备 )向 CPU发出的请求中断的要求;
当有多个中断源发出中断请求时,需要通过适当的办法 (软件的;
硬件的;软、硬件结合的 )决定究竟先处理哪个中断请求,这就是,中断判优,;
,中断响应,是指 CPU中止现行程序转至中断服务程序的过程;
,中断处理,就是指 CPU执行中断服务程序;
执行完中断服务程序后,返回到原先被中断的程序称为,中断返回,。
为了能正确返回到原来程序被中断的地方 (也称 断点 -即主程序中当前指令下面一条指令的地址 ),在中断服务程序的最后应专门放置一条 中断返回指令 。
另外,为了使主程序在返回后仍能从断点处继续执行,还需要在中断服务程序的开头-保护现场 (通过 PUSH指令实现 ),在中断服务程序的末尾-恢复现场 (通过 POP指令实现 )。
10
中断响应和处理过程
需要指出,
不同的中断类型 (如可屏蔽中断、不可屏蔽中断;
外部中断、内部中断 …),处理器 (CPU)进行响应和处理的具体过程并不完全相同;另外,就是对同一种中断类型 (如可屏蔽中断 ).
不同的处理器 (如 Z80,80X86)进行响应和处理的过程也不尽相同。
11
书 P357中断响应过程 6点( 1,2,3,4,5,6)
其中,前 2项一般由硬件 (处理器内部 )完成;而后 4
项一般是由软件 (由程序设计者编写的中断服务程序 )
来完成,即整个中断响应和处理过程是由 CPU内部的有关 硬件 和 中断处理软件 密切配合,共同完成的。
针对一个具体的系统 (机型 ),中断服务程序设计者应该清楚在中断响应时,,硬件,完成了哪些操作 (如 FR是否已被压入堆栈 ),还需要
,软件,(中断服务程序 )完成哪些操作。
12
中断优先级和中断嵌套
中断优先级 (Priority)的解决方法
系统中多个中断请求可能同时出现,CPU只能按一定的次序 (优先级策略 )予以响应和处理,这个响应的次序称为中断优先级。
一般的方法有:
软件查询法 —— 程序查询识别 (需要少量硬件 )
硬件查询法 —— 菊花链 (daisy chain)优先级排队电路
中断向量法识别 —— 采用可编程中断控制器 (如 8259)
13
微处理器的 3种中断技术示意图外设中断请求 外设提供
1# 1# 设备
2# 2# 标志码
3# 3#
外设中断请求外设中断请求
( a ) 单线中断 ( b ) 多级中断 ( c ) 矢量中断
CP U
IN T R
IN T R1
IN T R2
IN T R3
CP U
D0
D1
,
,C P U
,
D7
IN T R
14
(1) 软件查询法
把各个外设的中断请求信号,相或”,产生一个总的 INT
信号
当 CPU响应中断后,进入中断处理程序,在中断处理程序的开始部分安排一段带有优先级的查询程序。
优点:省硬件
缺点:中断响应慢
01267
INT
磁盘磁带
CRT 键盘打印
,或,
端口号=
XXH
15
程序查询识别中断方法
Y
Y
Y
N
N
N
保护现场检查 I R Q 1 的中断状态是否为,1,
检查 I R Q 2 的中断状态是否为,1,
检查 I R Q 3 的中断状态是否为,1,
I R Q 1 的服务程序
I R Q 2 的服务程序
I R Q 3 的服务程序恢复现场中断返回中断处 理入口
16
(2) 菊花链优先级排队电路中断请求 INT1 INT2 INT3
CPU
INTR
INTA
接口设备 3
接口设备 2
接口设备 1
菊花链逻辑电路中断回答集电极开路门 (OC门 )INT1+INT2+INT3
+5V
17
(2) 菊花链优先级排队电路
INTR=INT1+INT2+INT3
当 INTA信号沿菊花链行进时,最靠近 CPU并发出 INT请求的接口将首先拦截住 INTA信号,并送出 中断类型码,进入相应的中断处理程序;在服务完成后撤销其请求
(解除对下一级的阻塞和封锁 )。
(3)可编程中断控制器 (如 8259)
INTR
INTA
中断请求
18
排队链优先权的控制方法中断请求信号外调 A 外设 B 外设 C
中断响应信号允许 中断 允许 中断 允许 中断接收 请求 接收 请求 接收 请求
CP U
19
矢量中断优先权的控制系统中央处理器
CP U
中断控制器中断请求允许接受中断请求允许接受中断请求允许接受外设 A 外设 B 外设 C
20
向量中断示意图
I N T R 1
I N T A 1
I N T M 1
I N T R 2
I N T A 2
I N T M 2
I N T R n
I N T A n
I N T M n
中断优先权编码电路设备接口
1
IR
IM
设备接口
2
IR
IM
设备接口
n
IR
I M
I N T R
I N T A
向量地址主机
21
一个完整的向量中断过程中断请求中断判优中断响应 N
Y N
Y
中断处理中断返回 Y
N
各个设备异步实时提出中断请求中断控制器按判优原则选中当前优先级最高的中断请求
CP U 执行 完当前一条指令向中断控制器输出 INT A 表示中断应答中断控制器给 CP U 输出选中的中断信号
CP U 将中断号乘 4 做为中断向量地址到中断向量表获取相应的中断向量
CP U 执行中断服务程序完成设备请求服务
CP U 发中断结束命令给中断控制器
CP U 执行中断返回指令 IRE T 返回到断点现场,继续执行原程序
CP U 取下一条指令允许中断?
中断有效?
自动结束?
CP U 禁止中断(置标志 IF = 0 )并保护断点现场(返回地址)转向中断服务程序
22
单级中断处理不允许其他设备再中断 CPU的程序;
多级中断处理允许优先级高的中断打断优先级低的中断服务程序 。
单级中断处理和多级中断处理
23
多级中断结构 单级中断结构
I R Q 1
I R Q 2
I R Q 3
,
IRQ n
CPU
I R Q 1
I R Q 2
I R Q 3
,
IRQ n
CPU
INT
+
24
同时中断请求的处理方法
( a) 单级中断处理
( b) 多级中断处理
B 处理 A 处理 B 处理 C 处理
( a )CPU B 处理 C P U A 处理 C P U C 处理 C P U
( b )CPU C P U C P U
B 请求 A,C 请求
( a) 单级中断处理
25
中断嵌套
通常,正在执行较低级的中断服务程序时,
可以响应较高级的中断请求,而将正在处理的中断暂时挂起,称为中断嵌套。
……,.
STI ……,
IRET
STI
IRET
可实现
,多重嵌套,
26
2 8086/8088的中断系统
一、中断的分类:在 8086/8088系统中,可将中断分为两大类:
第一类 硬件中断:是由外部的中断请求信号启动的中断,也称为外部中断。又可分为:
非屏蔽中断 NMI:整个系统只有一个,不受 IF屏蔽
可屏蔽中断 INTR:受 IF屏蔽,在中断控制器 8259的统一管理下,可屏蔽中断可有几个至几十个。
27
中断的分类
(注意,这里的 IF是 CPU内部的标志寄存器的 IF位,
IF= 0,则对所有从 INTR引脚进入的中断请求均不予响应 (“总开关” );另外,也可以在 CPU外部的中断控制器 (8259)中以及各个 I/O接口电路 (如
8255)中对某一级中断或某个中断源单独进行屏蔽 )。
第二类 软件中断:是由 CPU内部的标志状态 (如 TF、
OF)或执行一条中断指令 (INT n),以及除数为 0引起的中断,也称为内部中断。
28
二 中断向量和中断向量表
所谓中断向量,即中断服务程序的入口地址。
中断向量表是存放中断向量 (中断服务程序入口地址 )
的一个特定的内存区域 (最低地址区 ).
一个中断向量占 4个字节单元,其中:
低地址的两个字节单元存放中断服务程序入口地址的偏移量
(IP)- 低字节在前 (低地址 ),高字节在后 (高地址 );
高地址的两个字节单元存放中断服务程序入口地址的段地址
(CS)- 低字节在前 (低地址 ),高字节在后 (高地址 )。
29
中断向量和中断向量表
8086/8088的中断向量表如书 P377图 9.22所示
8086/8088可以处理 256种中断,对每种中断都指定一个中断类型号 (也称中断向量号 ),每个中断类型号与一个中断服务程序的入口地址相对应。
256个中断向量要占 256*4= 1024个字节单元,地址编号从
00000H~003FFH
5个专用中断 (类型 0~类型 4),它们有固定的定义和处理功能;
27个保留的中断 (类型 5~类型 31)。占 0000:0014H~ 0000:007FH,共
108个字节单元。这个区域供系统使用,不允许用户自行定义。
224个用户可定义的中断 (类型 32~类型 255)。占
0000:0080H~0000:03FFH单元;使用时,要由用户自行填写相应的中断入口地址。(其中有些中断类型已经有了固定用途,例如,类型21H的中断已用作 MS-Dos的 系统功能调用 )。
30
中断向量表
003 F F H
003 F C H
0 0 0 8 0 H
0 0 0 7 C H
0 0 0 1 4 H
0 0 0 1 2 H
0 0 0 0 C H
0 0 0 0 8 H
0 0 0 0 4 H
0 0 0 0 0 H
专用中断向量
( 5 个)
系统保留中断向量
( 27 个)
用户可用中断向量
( 2 2 4 个)
16 位
CS
IP
255 号向量
∶
32 号向量
31 号向量
∶
5 号向量
4 号向量 ( 溢出 )
3 号向量
2 号向量(非屏蔽)
1 号向量(单步)
0 号向量(除法错)
31
IBM PC/ XT机的中断类型号的安排(一)
32
IBM PC/ XT机的中断类型号的安排(二)
中断类型号地址
( H) 中断功能中断类型号地址
( H) 中断功能
20 80-83 程序结束 26 98-9B 绝对磁盘写
21 84-87 DOS系统调用 27 9C-9F 程序结束,驻 留内存
22 88-8B 结束地址 28 A0-A3 DOS内部使用
23 8C-8F 中止处理 29~ 2E A4-BB DOS保留
24 90-93 错误处理 2F BC-BF DOS内部使用
25 94-97 绝对磁盘 读 30~ 3F C0-FF DOS保留
33
8259输入 中断类型 号 中断源
IRQ0 08 电子钟时间基准
IRQ1 09 键盘
IRQ2 0A 为用户保留
IRQ3 0B 异步通信,COM2
IRQ4 0C 异步通信,COM1
IRQ5 0D 硬盘
IRQ6 0E 软盘
IRQ7 0F 并行打印机
IB
M
PC
/X
T
机中断源和中断类型号
34
中断向量和中断向量表
中断向量在中断向量表是按中断类型号顺序存放的;
中断向量的地址 =中断类型号× 4
CPU响应中断时,需把中断类型号 N乘以 4,得到中断向量的对应地址 4N(该中断向量所占 4个字节单元的第一个字节单元的地址 )
然后把由此地址开始的 两个低字节单元 的内容装入 IP寄存器,IP (4N,4N+1),再把 两个高字节单元 的内容装入 CS寄存器,CS (4N+2,4N+3),这就是转入中断类型号为 N的中断服务程序的控制过程。
N的来源,对于不同的中断类型 (内部,外部,NMI,INTR)
情况有所不同,详见后述
35
例 1:若中断类型号为 3,则由中断类型号取得中断服务入口地址的过程如下图所示:
00000H
00001H
0000CH
(0000:000CH)
1EA00H
(1E00:0A00H)
FFFFFH
低地址内存高地址
1E00 0 H
+ 0A0 0 H
1EA0 0 H
中断类型号 3× 4
= 000CH
…….
00(IPL)
0A(IPH)
00(CSL)
1E(CSH)
…....
中断服务程序
36
例 2.中断类型号为 20H,中断服务程序的入口地址存放在 0000:0080H开始的 4个单元中。若:
(0080H)=10H
(0081H)=20H
(0082H)=30H
(0083H)=40H
则,中断服务程序的入口地址为
37
例 3.中断类型号为 23(17H),中断服务程序的入口地址为,2340:7890H,由于中断类型号 17H对应的中断向量存放在 0段的 0000:005CH(17H× 4=5CH)处,所以有:
(005CH)=
(005DH)=
(005EH)=
(005FH)=
0101 1100 B左移 2位,
0001 0111 B
5 C H
38
三 8086/8088中断处理流程图结束当前指令除法错,I N T
n,INT0?
NMI?
INTR?
TF=1?
执行下一条指令
N
读中断类型码
Y
Y
N
N
N
响应中断内部自动提供类型码
F R -> 栈
T F -> 暂存器
0 -> T F 和I F
C S,I P -> 栈
(4N,4N+1)- > IP
(4N+2,4N+3)- > CS
有N M I?
暂存器= 1?
执行中断服务程序执行I R E T 指令
( 弹出C S,I P,F R )
IF=1?
N
N
N
Y
Y
(1)
(1)
(2)
(3)
(4)
(5)
39
8086/8088中断处理流程图
8086中断优先级 (Priority)
说明:
(1)~(5)步是 CPU的内部处理 (由硬件自动完成 )
所有内部中断 (除法错,INT n、
INT0,单步 )以及 NMI中断不需要从数据总线上读取中断类型码,而 INTR中断需读取中断类型码,中断类型码由发出
INTR信号的接口提供。
中断 优先级除法错,INTn,INT0
NMI
INTR
单步中断最高最低
40
单步运行方式时发生中断的处理过程
IF=1
TF=1
执行D I V 或I D I V
指令
F R - > 栈,T F - > 暂存器清I F,T F
CS,IP->栈
(0,1)->IP
(2,3)->CS
F R - > 栈,T F - > 暂存器清I F,T F
CS,IP->栈
(4,5)->IP
(6,7)->CS
执行单步中断服务程序,
执行I R E T,弹出C S,I P,F R
单步中断识别形成类型码0 1 H
执行除法错处理程序;执行I R E T 指令,
弹出C S,I P,F R
执行下一条指令
5040H:7060H
2010H:4030H
除法错中断识别形成类型码0 0 H
发生除法错
.
.
.
.
41
单步运行方式时发生中断的处理过程
堆栈的情形:
60
70
40
50
(FR)’
30
40
10
20
(FR)
低地址高地址
IP
CS
TF=0
IP
CS
TF=1
作业:
画出在单步运行时 (TF=1)发生 INTR中断的处理流程及堆栈的情形。假定当前指令下一条指令的地址为 4030H:2080H; INTR中断服务程序的入口地址为 9080H:3020H.
42
四 软件中断 (内部中断 )
除法错中断 (也称除数为 0中断 )- 类型 0
在执行 DIV(无符号除法 )或 IDIV(带符号除法 )指令时,若发现除数为 0,则立即产生一个类型号为 0的内部中断,CPU转向除法错中断处理程序。
溢出中断- 类型 4
若上一条指令执行的结果使溢出标识位 OF被置 1,则接着执行 INTO指令时,将引起类型为 4的内部中断,CPU转入对溢出错误处理程序,若 OF=0时,INTO指令执行空操作,即
INTO指令不起作用。 INTO指令通常安排在算术指令之后,
以便在溢出时能及时处理。
43
软件 (指令 )中断 (执行 INT n指令引起的中断 )
双字节指令,第一个字节为 操作码 ;第二个字节为 中断类型号,该指令控制 CPU转向相应的中断服务程序。
主程序,.
.
.
ADD AX,BX; 若 OF=1
INTO
溢出中断服务程序:
IRET
…
44
断点中断- 类型 3
INT3或简写为 INT,是单字节指令。调试程序时可以在一些关键性的地方设置断点,使 CPU在此断点处执行中断服务程序。
单步中断- 类型 1
TF=1
…,.
单步执行
45
软件中断 (内部中断 )的特点
中断类型号由 CPU内部自动提供 (包括由中断指令第二字节提供的中断类型号 ),不需去执行中断响应总线周期读取中断类型号 。
除单步中断外,所有内部中断 (除法错,INTO,
INT n)均不可以用软件来屏蔽。
除单步中断外,所有内部中断都比外部中断优先级高。
46
五 中断服务程序的一般结构
……
保护现场 (将需要保护的寄存器压入堆栈 )
STI(可选 );
恢复现场
IRET
中断处理例如:
PUSH AX
PUSH BX
PUSH CX
…
POP CX
POP BX
POP AX
47
指令系统中没有单独置,1”或清,0” TF的指令,可实现如下:
PUSHF; FR的内容压入堆栈
POP AX; FR的内容弹出到 AX
OR AX,0100H; 使 AX中对应 TF的位置为,1”,其他位不变
PUSH AX; 修改后的 AX内容压入栈
POPF 弹回到 FR(TF=1)
1->TF
PUSHF
POP AX
AND AX,
PUSH AX;
POPF
0->TF
48
中断服务程序框图与程序示例中断服务程序入口
C P U 响应中断后自动关中 断保护现场开中断中断服务关中断恢复现场开中断中断返回入口地址,P U S H A X ;保护现场
P U S H B X
P U S H C X
P U S H D X
P U S H S I
P U S H D I
P U S H S P
P U S H B P
C L I ;开中断
∶ ;中断服务
S T I ;关中断
P O P B P ;恢复现场
P O P S P
P O P D I
P O P S I
P O P D X
P O P C X
P O P B X
P O P A X
C L I ;开中断
I R E T ;中断返回结尾部分主体部分起始部分
49
第三节 可编程中断控制器 8259A
(8259A Programmable Interrupt Controller-PIC)
Intel 8259A用于管理和控制 80x86的外部中断请求,实现优先级判决,提供中断矢量码,屏蔽中断输入等功能。
使用单片 8259A可以管理 8级中断,采用级联方式,可扩充到 64级(用 9片 8259A)。
50
.
IR0
IR7
单片
INT
INTA
8259A
INTR
INTA
CPU
.
.
.
中断请求
CPU?8259A,.
.
.
.
IR0
IR7
级联主
8259A IR0
从
.
.
.
IR7
8259A IR0
从
.
.
.
IR7
INTA
INTR
51
INTA# INT
控制逻辑
D7~D0 总线缓冲器读 / 写逻辑
RD#
WR#
A0
CS#
级连缓冲器
/ 比较器
CAS0
CAS1
CAS2
中断在服务寄存器 ISR
优先权裁决器中断请求寄存器 IRR
:
:
IR0
IR1
IR6
IR7
中断屏蔽寄存器 IMR
SP# / EN#
8259A 内部结构框图
52
内部逻辑,IRR,IMR,PR,ISR及控制电路。
中断请求过程,IR->INT。
&INT
ISR编码中断请求优先级编码器中断请求寄存器IR
R
IR0
IR7
…
…
&
&
&
&
&
&
&
&
中断屏蔽寄存器 IMR
D0 D7…
≥1
比较器
B0
B1
B2
A>B
A0
A1
A2
53
封装形式 28脚双列直插( 28- pin DIP),
DIP:Dual-In-Line Package,如下图所示。
8259A的引脚功能
54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
8259A
CS
WR
RD
D7
D6
D4
D5
D2
D3
D0
D1
CAS0
CAS1
GND
INTA
IR7
IR6
IR4
IR5
IR2
IR3
IR0
IR1
INT
CAS2
SP/EN
VCC
A0
可编程中断控制器 8259A
55
8259A引脚介绍
--片选信号( Chip Select)低电平有效,来自地址译码器的输出只有 有效时,CPU才能对 8259A进行读写操作。
--写信号,低电平有效,来自 CPU的 输出;当有效且 有效时,使 8259A接受 CPU送来的命令字。
--读信号,低电平有效,来自 CPU的 输出;且有效且 有效时,使 8259A将状态信息放到数据总路线上,供 CPU检测。
CS
WR
CS
CS
CS
RD RD
WRWR
RD
56
D7~ D0,双向数据总线,接到系统数据总线的 D7~ D0
上,用来传送控制字、状态字和中断类型号。
IR7~IR0,中断请求信号,输入,来自外部接口电路。
(单片时)
INT,向 CPU发出的中断请求信号。(单片时)。
,中断响应信号,由此接收 CPU发来的中断响应脉冲。
INTA
57
A0,地址输入信号,用于对 8259A内部寄存器的寻址。
CAS2~ CAS0:级联线( CASCADE LINES),传送 3位 标 识码,用于区分特定的从控制器。双向:
对于主片为输出,对于从片为输入。
,从片 /允许缓冲器信号。双功能引脚:
作为输入时,8259A作为主片( = 1)
8259A作为主片( = 0)
作为输出时,用来启动(允许)数据总线收发器(如 8286)。
*究竟是作为输入还是输出,取决于 8259A是否工作于“缓冲方式”
(即 8259A是否通过一个“数据总线收发器”与系统总线相连)。
详见后面 ICW4的格式。
SP/ EN
SP/ EN
SP/ EN
58
二,8259A的内部结构
CPU
AD7~AD0
INTA
INTR
SP/EN
ISR
ICW1 OCW1 (IMR)
ICW2 OCW2
ICW3 OCW3
ICW4
PR IRRD7~D0
地址译码.
.
.
INT
INTA
CS
RD
WR
A0
CAS0
CAS1
CAS2
.
.
.IR
7
IR0
59
IRR— Interrupt Request Register
PR---Priority Resolver
ISR---In-Service Register
IMR---Interrupt Mask Register
ICWs---Initialization Command Words
OCWs---Operation Command Words
7个 CPU可访问的寄存器,分两组:
初始化命令字 ICW1 ~ICW4---系统初启时设定。
操作命令字 OCW1~OCW3—系统运行时,由应用程序设定 (实现对中断处理的动态管理和控制 ).
The OCWs can be written into the 8259A anytime after initialization。
8259A的内部结构
60
7个寄存器的寻址问题,
规定,A0
0
1
1
1
ICW1:用偶地址写入,且 D4=1
ICW2
ICW3
ICW4
紧接着 ICW1,用奇地址写入
1
0
0
OCW1:也用奇地址写入,但不紧跟 ICW1
OCW2
OCW3 也用偶地址写入,但 D4=0
即,0
1
0 0
0 1
D
4
D
3
I C W
1
O C W
2
O C W
3
0
0
采用了专门的“标识位,以节省输入地址的引脚数 (仅用了 A0)
61
8259A的处理部件:
中断请求寄存器 IRR- 8位寄存器+控制逻辑作用,接受并锁存来自 IR0~ IR7的中断请求信号
中断服务寄存器 ISR
作用,保存当前正在处理的中断请求
优先级裁决器 PR
作用,把新进入的中断请求和当前正在处理的中断进行比较,以决定哪一个优先级更高
62
处理过程:
IR0~ IR7上出现某一中断请求信号 ->IRR对应位被置,1” ->
由 IMR的相应位决定是否将其屏蔽 (屏蔽位 =1,不通过;屏蔽位 =0,通过 )->中断请求进 PR->PR把新进入的中断请求和当前正在处理的中断进行优先级比较 ->若新进入的中断优先级高,该中断请求被送到 CPU。
若 CPU的 IF=1,CPU完成当前指令后,响应中断,在 引脚上发出两个负脉冲 (执行两个中断响应总线周期,参见
P122图 5.4),INTA
63
处理过程 (续 ):
8259A收到第一个负脉冲后
使 IRR锁存允许,不予接受 IR0~ IR7上的中断请求信号;直到第二个负脉冲结束后,才又使 IRR锁存禁止 (输入输出透明 )
使 ISR的相应位置,1”,以便为优先级裁决器以后的裁决提供依据。
清除 IRR的相应位。
8259A收到第二个负脉冲后:
把中断类型码寄存器的内容 (ICW2的内容 )送到 D7~ D0
如果 ICW4的 AEOI位为 1,则在第二个 脉冲结束时,将 ISR中被第一个 脉冲置,1” 的位清除 (自动结束 ); 否则,要等到中断结束命令 (EOI)发送后才能清除。
INTA
INTA
64
三 8259A的工作方式
1,设置优先级的方式
(1) 全嵌套方式 (FULLY NESTED MODE)
也称固定优先级方式。在这种方式下,由 IRi引入的中断请求具有固定的优先级- IR0(最高 )- >IR7(最低 ).
This mode is entered after initialization unless another mode is
programmed.
当一个中断请求被响应时,ISR中的对应位 ISn被置,1”,
8259A把中断类型码放到数据总线上,然后,进入中断服务程序。一般情况下 (除了,中断自动结束,方式 外 ),在 CPU
发出中断结束命令 (EOI)前,此对应位一直保持为,1” -封锁同级或低级的中断响应,但并不禁止比本级优先级高的中断响应 -实现中断,嵌套,。
65
(2) 特殊全嵌套方式 (SPECIAL FULLY NESTED MODE- SFNM)
在处理某一级中断时,不但允许优先级更高的中断请求进入,也允许同级的中断请求进入。
用于主从结构的 8259系统中,将主片设置为,特殊全嵌套方式,。
通过 ICW4的,SFNM”位可以设置此种方式。 (参见 p132)
CPU
IR0
IR1
IR7
…
IR0
IR1
IR7
…
8259(主片 ) 8259(从片 )
66
(3) 优先级自动循环方式 (AUTOMATIC ROTATION)
优先级是循环变化的 (不希望有固定的优先级差别 )-一个设备的中断服务完成后,其优先级自动降为最低,而将最高优先级赋给原来比它低一级的中断请求。
开始时,优先级队列还是,IR0->IR7,若此时出现了 IR0请求,
响应 IR0并处理完成后,队列变为:
IR1,IR2,IR3,IR4,IR5,IR6,IR7,IR0。
若又出现了 IR4请求,处理完 IR4后,队列变为:
__________________________________
系统中是否采用,自动循环优先级,,由操作命令字 OCW2来设定。
IR
0
IR
1
IR
2
IR
3
IR
4
IR
5
IR
6
IR
7
67
(4)优先级特殊循环方式 (SPECIFIC ROTATION)
与“优先级自动循环方式”相比,只有一点不同,
即可以设置开始的最低优先级。例如,设定 IR4为最低优先级,那么 IR5就是最高优先级,其余各级按循环方法类推。 (OCW2:”110”)
68
2,屏蔽中断源的方式 (中断屏蔽方式 )
普通屏蔽方式
通过对中断屏蔽寄存器 (IMR)的设定,实现对相应位为,1”的中断请求的屏蔽。
可通过 OCW1使 IMR的一位或几位置,1” 。
*特殊屏蔽方式 (SPECIAL MASK MODE)
作用:用于电源故障,其优先级高于屏蔽中断。
实现,输出 OCW3(ESMM=1,SMM=1)
输出 OCW1(使 IMR对应于本级的位为,1” )
……
……
输出 OCW1(使 IMR对应于本级的位为,0” )
输出 OCW3(ESMM=1,SMM=0)
,中断级无效,
设置撤销
69
3,中断结束方式 (END OF INTERRUPT- EOI)
(1)中断自动结束方式 (AUTOMATIC- AEOI方式 )
在第二个 后沿,即完成把对应的 ISR位复位。
注意,AEOI方式是在中断响应后,而不是在中断处理程序结束后将 ISR位清 0。这样,在中断处理过程中,8259A中就没有,正在处理” 的标识。此时,若有中断请求出现,且 IF= 1,则无论其优先级如何 (比本级高、低或相同 ),都将得到响应。尤其是当某一中断请求信号被 CPU响应后,如不及时撤销,就会再次被响应 -“二次中断”
所以,AEOI方式 适合于中断请求信号的持续时间有一定限制以及不出现中断嵌套的场合。
通过 ICW4可以设置 AEOI方式 (AEOI=1)
INTA
70
(2)一般 (常规 )中断结束方式
适合于 全嵌套方式 。
实现:在中断服务程序结束时,向 8259A发常规中断结束命令 (OCW2:EOI=1,SL=0,R=0)
例,MOV AL,20H; OCW2=20H
OUT 20H,AL; 端口地址 =20H(偶地址 )
在全嵌套方式下,ISR中最高优先级的置,1”位,正对应于当前正在处理的中断,将其清,0”,就完成了当前正在处理中断的结束操作。
1 1 0 1 …
IR0 IR7
71
(3)特殊中断结束方式 (SPECIFIC EOI- SEOI)
在非全嵌套方式下,无固定的优先级序列 (使用设置优先权命令或特殊屏蔽方式 ),此时,根据 ISR的内容 就无法确定刚刚所响应 (处理 )的中断。这种情况下,就不能用上述的 EOI方式 进行中断结束处理,
而必须用特殊的中断结束命令 SEOI-- 用
OCW2:EOI=1,SL=1,R=0,L2~ L0.
由 L2~ L0指定清除 ISR中的哪一位。
72
4,中断触发方式
电平触发方式:由 IRi上的有效电平来触发,中断请求触发器,。
边沿触发方式:由 IRi上由低电平向高电平的跳变来触发,中断请求触发器,。
由 ICW1的 LTIM位 可以设置中断触发方式。
73
5,连接系统总线的方式
缓冲方式 (ICW4的 BUF=1)
8259A通过总线驱动器 (如 8286)和数据总线相连。
在缓冲方式下,8259A的 作为输出 ( 有效 ),此时,由 ICW4
的 M/S位来定义 (标识 )本 8259A是主片还是从片。
非缓冲方式 (ICW4的 BUF=0)
即 8259A直接与数据总线相连
在,非缓冲方式下,,8259A的 作为输入 ( 有效 )
此时,由 端来标识本 8259A是主片还是从片。
在,非缓冲方式下,,ICW4的 BUF= 0,M/S位无意义。
SP / EN EN
SP / EN SP
SP / EN
74
*“中断查询”方式
特点:总的说,既有中断的特点,又有查询 (Polling)
的特点。
外设仍然向 8259A发中断请求信号,要求 CPU服务。
CPU的 IF=0,不响应外部的中断请求 (对 CPU的中断请求信号不起作用 )
此时,CPU需要用 软件查询 方法来确认中断源,从而实现对设备的服务
先向 8259A发查询命令 (poll command)
OCW3:
0 0 0 0 1 1 0 0
P
75
紧接着执行一条读指令 (IN指令 ),读出专门的
“中断状态字”,
当 8259A收到 P=1的查询命令后,在下一个 信号将使 ISR的相应位置,1”,就像收到了 一样,
并把上述的“中断状态字”送到数据总线上,由
CPU读入 AL。
0
A0
IR - - - - W2 W1 W0
D7 D0
1:有设备请求服务;
0:无设备请求服务。
当前最高优先级的中断请求
RD
INTA
76
IR0
IR1
IR2
:
:
IR7
SP#/EN#
INTA#
INT
8259A
CAS0
CAS1
CAS2
IR0
IR1
IR2
:
:
IR7
SP#/EN#
INTA#
INT
8259A
CAS0
CAS1
CAS2
IR0
IR1
IR2
:
:
IR7SP#/EN#
INTA#
INT
8259A
CAS0
CAS1
CAS2
最多
64
条中断请求线+5
SLAVE1
SLAVE2
SLAVE0;
SLAVE7
MASTER
:
8
0
8
6
四
82
59A
的级联使用
77
A0
0 ADILTIM SNGLA7 A6 A5 IC41
D7 D6 D5 D2 D1 D0D4 D3
ICW1
(chip control)
用于 8085 8085
1 A15/T7 A14/T6 A13/T5 A12/T4 A13/T3 A10 A9 A8
ICW2
(type)
用于 8085
SNGL=1
1 S5 S4S6S7 S3 S2/ID2 S1/ID1 S0/ID0
ICW3
(slave control)
Y
N
IC4=1
N
1 SFNM00 BUF M/S AEOI u PM0
ICW4
(mode control)
可中断
8259A初始化流程
78初始化流程图开始初始化 ICW 1
初始化 ICW 2
是否用级连方式?
初始化 ICW 3
是否用 ICW 4?
初始化 ICW 4
准备接近中断请求结束
Y
Y
Y
N
N
79
1,初始化命令字
ICW1~ICW4.(详见 P131)
8259A的初始化流程:
I C W
1
I C W
2
级联方式?
I C W
3
需I C W
4
I C W
4
准备接受中断请求
Y E S (I C
4
= 1 )
Y E S (S N G L = 0 )
N O (S N G L = 1 )
N O (I C
4
= 0 )
80
2,8259A的操作命令字 OCW1~OCW3(P132)
3.关于 8259A的读出操作,可以读四个方面的内容
读“中断状态字” (“查询字” ):
先写入 P=1的 OCW3查询命令字
用偶地址读 (IN AL,20H)
读 IRR:
先写入 OCW3(RR=1,RIS=0)
用偶地址读 (IN AL,20H)
读 ISR:
先写入 OCW3(RR=1,RIS=1)
用偶地址读 (IN AL,20H)
随时可用奇地址读 IMR
(IN AL,21H)
例 1:
IN AL,21H ; 读 IMR
AND AL,7FH ; 开放 IR7中断
OUT 21H,AL
例 2:
IN AL,21H ; 读 IMR
OR AL,80H ; 关闭 IR7中断
OUT 21H,AL
81
(1)设置中断向量
把由 AL指定的中断类型的中断向量 DS:DX放置在中断向量表的相应位置中。
AH=25H 执行,INT 21H
AL=中断类型号
DS:DX=中断向量
(2)取中断向量
把由 AL指定的中断类型的中断向量从中断向量表中取到
ES:BX中
预置,AH=35H 执行,INT 21H
AL=中断类型号
返回,ES:BX=中断向量
82
例:使用 DOS功能调用存取中断向量
….
MOV AL,N; type N Interrupt
MOV AH,35H; get Interrupt vector
INT 21H;
PUSH ES; save the old base and
PUSH BX; offset of interrupt N
PUSH DS;
MOV AX,SEG INTHAND;
MOV DS,AX; base of INTHAND in DS
MOV DX,Offset INTHAND; offset in DX
MOV AL,N;
MOV AH,25H; Set Interrupt Vector
INT 21H;
POP DS;
…
83
POP DX; restore the old offset
POP DS; and base of interrupt
MOV AL,N;
MOV AH,25H; set interrupt vector
INT 21H;
RET ; return
INTHAND:
…,Interrupt Processing Routine
IRET
84
中断向量表的初始化方法一:采用 DOS系统功能调用。即 INT 21H的
25H号功能调用。
方法二:将中断服务程序的入口地址直接装入中断向量表中。
85
8086/8088中断优先级别对中断源的管理
1.中断优先级别中断源 优先级除法错,INT n,INT O 最高
NMI ↑
INTR ∣
单步(陷阱) 最低中断优先级顺序
86
2,8086/8088对中断源的采样有几条指令是在紧跟其后的一条指令也被执行完才去采样:
1)对段寄存器的装入指令
2) STI和 IRET指令
3) WAIT指令
4) HLT指令
87
3,8086/8088中断处理过程
1) 将中断类型码乘 4,指向中断向量表中的中断处理子程序的入口地址 。
2) 保存 CPU的状态 。
3) 清除 IF和 TF的状态标志位 。
4) 保存原来执行的主程序的中断点 。
5) 转中断处理子程序入口地址 。
6) 执行中断处理子程序 。
7) 返回到被中断了的主程序的断点继续执行 。
88
中断处理过程框
89
IBM-PC/XT的中断控制逻辑
( 1) 内部中断源:除法错引起的中断,溢出引起的中断,执行中断指令 INT( 包括 INT3断点中断 ) 引起的中断以及单步中断 。
( 2) 非屏蔽中断 NMI,系统板上存储器奇偶校验错,I/O通道中的插件奇偶校验错,8087请求中断 。
( 3) 可屏蔽中断 INTR,外部设备请求中断时,
是通过 INTR引脚向 8088 CPU请求屏蔽中断 。
90
8086/8088 CPU的中断结构体系
8086/8088的中断源
I N T R
N MI
8 0 8 6 / 8 0 8 8 C P U
中断逻辑单步( T F = 1 )
除法出错
I N T O 溢出
I N T 3 断点非屏蔽中断请求
8 2 5 9 A
可屏蔽中断请求
I N T n 指令
91中断控制逻辑电路如图
92
8259A在 PC/AT微型计算机中的应用
IBM— PC/AT微型计算机系统的 CPU采用
80286芯片,系统中有两个 8259A芯片 。 若设置
8259A按特殊的完全嵌套方式工作,则系统中优先权从最高至最低的排列顺序是:主片 IRQ0、
IRQ1,从片 IRQ0,IRQ1至 IRQ7,主片 IRQ3至
IRQ7。
93
IBM PC/AT的外中断实时时钟 IRQ8 定时器 IRQ0
INT O A H IRQ9 键盘 IRQ1
保留 IRQ1 0 INT IRQ2
保留 IRQ1 1 串行口 1 IRQ 3
保留 IRQ1 2 串行口 2 IRQ 4
8 0 2 8 7 IRQ1 3 并行口 2 IRQ 5
硬盘 IRQ1 4 软盘 IRQ 6
保留 IRQ1 5 并行口 1 V cc
INT R
8 2 5 9 A
(从片)
中 断控制器
C AS 0 C1 C 2 S P
INT
8 2 5 9 A
(主片)
中 断控制器
S P C 0 C 1 CA S 2
80 28 6 C PU
94
80386系统微机采用 82C206作为中断控制器 。 82C206芯片实际上是将两个级连的 8259A
与 8237等芯片集成在一起 。 82C206内部
INTC1及 INTC2的级连情况如图所示 。 82C206
中断控制器的中断源安排如表所示 。
95
82C206中断控制器内部级
IN T R
IN T A
IN T
IN T A
CSA 2
CSA 1
CSA 0
IN T A IN T
IR 2
CSA 2
CSA 1
CSA 0
96
82C206中断控制器的中断源安排
97
82C206中断控制器的中断源安排
第四章 中断控制
1 中断系统基本概念
2 8086/8088的中断系统
3 Intel 8259A可编程中断控制器
4 中断程序举例
2
本章学习目标
掌握有关中断的基本概念,中断优先级,中断嵌套,中断屏蔽,中断向量等基本概念 。
了解 8086/8088中断系统中的中断源分类,IBM-PC
机中断系统结构 。
掌握可编程中断控制器 8259A的功能,内部结构,
工作方式及初始化命令和操作命令的定义,使用方法,
服务程序的基本编写方法 。
3
计算机采用中断控制技术的主要用途计算机采用中断控制技术主要用在以下三个方面:
( 1)故障处理
( 2)分时操作
( 3)实时处理
4
1 中断的基本概念一 CPU与外设之间的数据传送控制方式
(即 I/O控制方式 ),通常有以下三种:
程序控制方式
中断方式
DMA方式 (Direct Memory Access)
5
程序控制方式
查询式输入、输出程序流程图读取状态信息准备好?
输入数据是否读取状态信息忙?
输出数据否是
CPU通过执行程序不断读取并检测外设的状态,只有在外设确实已准备就绪的情况下,才进行数据传送;否则,还要继续不断地查询外设的状态。
查询方式的程序实现都是在主程序里
6
程序控制方式
程序查询传送方式比无条件传送方式要准确可靠,但在此种方式下,CPU要不断查询外设的状态,占用了大量 CPU时间,而真正用于数据传送的时间却很少,即 CPU的工作效率很低;另外,采用这种方式,也很难满足实时系统对 I/O处理的要求。因此,出现了中断控制方式。
7
一、中断基本概念定义,CPU穿插处理随机事件的过程。
中断过程:
中断处理的隐操作,程序状态及程序断点地址的进栈及出栈。
中断请求 中断响应 中断服务 中断结束中断处理二 中断方式
8
一个完整的中断过程包括:
中断请求;
中断判优;
中断响应;
中断处理;
中断返回,
中断的全过程及有关概念
9
,中断请求,是指中断源 (引起中断的事件或设备 )向 CPU发出的请求中断的要求;
当有多个中断源发出中断请求时,需要通过适当的办法 (软件的;
硬件的;软、硬件结合的 )决定究竟先处理哪个中断请求,这就是,中断判优,;
,中断响应,是指 CPU中止现行程序转至中断服务程序的过程;
,中断处理,就是指 CPU执行中断服务程序;
执行完中断服务程序后,返回到原先被中断的程序称为,中断返回,。
为了能正确返回到原来程序被中断的地方 (也称 断点 -即主程序中当前指令下面一条指令的地址 ),在中断服务程序的最后应专门放置一条 中断返回指令 。
另外,为了使主程序在返回后仍能从断点处继续执行,还需要在中断服务程序的开头-保护现场 (通过 PUSH指令实现 ),在中断服务程序的末尾-恢复现场 (通过 POP指令实现 )。
10
中断响应和处理过程
需要指出,
不同的中断类型 (如可屏蔽中断、不可屏蔽中断;
外部中断、内部中断 …),处理器 (CPU)进行响应和处理的具体过程并不完全相同;另外,就是对同一种中断类型 (如可屏蔽中断 ).
不同的处理器 (如 Z80,80X86)进行响应和处理的过程也不尽相同。
11
书 P357中断响应过程 6点( 1,2,3,4,5,6)
其中,前 2项一般由硬件 (处理器内部 )完成;而后 4
项一般是由软件 (由程序设计者编写的中断服务程序 )
来完成,即整个中断响应和处理过程是由 CPU内部的有关 硬件 和 中断处理软件 密切配合,共同完成的。
针对一个具体的系统 (机型 ),中断服务程序设计者应该清楚在中断响应时,,硬件,完成了哪些操作 (如 FR是否已被压入堆栈 ),还需要
,软件,(中断服务程序 )完成哪些操作。
12
中断优先级和中断嵌套
中断优先级 (Priority)的解决方法
系统中多个中断请求可能同时出现,CPU只能按一定的次序 (优先级策略 )予以响应和处理,这个响应的次序称为中断优先级。
一般的方法有:
软件查询法 —— 程序查询识别 (需要少量硬件 )
硬件查询法 —— 菊花链 (daisy chain)优先级排队电路
中断向量法识别 —— 采用可编程中断控制器 (如 8259)
13
微处理器的 3种中断技术示意图外设中断请求 外设提供
1# 1# 设备
2# 2# 标志码
3# 3#
外设中断请求外设中断请求
( a ) 单线中断 ( b ) 多级中断 ( c ) 矢量中断
CP U
IN T R
IN T R1
IN T R2
IN T R3
CP U
D0
D1
,
,C P U
,
D7
IN T R
14
(1) 软件查询法
把各个外设的中断请求信号,相或”,产生一个总的 INT
信号
当 CPU响应中断后,进入中断处理程序,在中断处理程序的开始部分安排一段带有优先级的查询程序。
优点:省硬件
缺点:中断响应慢
01267
INT
磁盘磁带
CRT 键盘打印
,或,
端口号=
XXH
15
程序查询识别中断方法
Y
Y
Y
N
N
N
保护现场检查 I R Q 1 的中断状态是否为,1,
检查 I R Q 2 的中断状态是否为,1,
检查 I R Q 3 的中断状态是否为,1,
I R Q 1 的服务程序
I R Q 2 的服务程序
I R Q 3 的服务程序恢复现场中断返回中断处 理入口
16
(2) 菊花链优先级排队电路中断请求 INT1 INT2 INT3
CPU
INTR
INTA
接口设备 3
接口设备 2
接口设备 1
菊花链逻辑电路中断回答集电极开路门 (OC门 )INT1+INT2+INT3
+5V
17
(2) 菊花链优先级排队电路
INTR=INT1+INT2+INT3
当 INTA信号沿菊花链行进时,最靠近 CPU并发出 INT请求的接口将首先拦截住 INTA信号,并送出 中断类型码,进入相应的中断处理程序;在服务完成后撤销其请求
(解除对下一级的阻塞和封锁 )。
(3)可编程中断控制器 (如 8259)
INTR
INTA
中断请求
18
排队链优先权的控制方法中断请求信号外调 A 外设 B 外设 C
中断响应信号允许 中断 允许 中断 允许 中断接收 请求 接收 请求 接收 请求
CP U
19
矢量中断优先权的控制系统中央处理器
CP U
中断控制器中断请求允许接受中断请求允许接受中断请求允许接受外设 A 外设 B 外设 C
20
向量中断示意图
I N T R 1
I N T A 1
I N T M 1
I N T R 2
I N T A 2
I N T M 2
I N T R n
I N T A n
I N T M n
中断优先权编码电路设备接口
1
IR
IM
设备接口
2
IR
IM
设备接口
n
IR
I M
I N T R
I N T A
向量地址主机
21
一个完整的向量中断过程中断请求中断判优中断响应 N
Y N
Y
中断处理中断返回 Y
N
各个设备异步实时提出中断请求中断控制器按判优原则选中当前优先级最高的中断请求
CP U 执行 完当前一条指令向中断控制器输出 INT A 表示中断应答中断控制器给 CP U 输出选中的中断信号
CP U 将中断号乘 4 做为中断向量地址到中断向量表获取相应的中断向量
CP U 执行中断服务程序完成设备请求服务
CP U 发中断结束命令给中断控制器
CP U 执行中断返回指令 IRE T 返回到断点现场,继续执行原程序
CP U 取下一条指令允许中断?
中断有效?
自动结束?
CP U 禁止中断(置标志 IF = 0 )并保护断点现场(返回地址)转向中断服务程序
22
单级中断处理不允许其他设备再中断 CPU的程序;
多级中断处理允许优先级高的中断打断优先级低的中断服务程序 。
单级中断处理和多级中断处理
23
多级中断结构 单级中断结构
I R Q 1
I R Q 2
I R Q 3
,
IRQ n
CPU
I R Q 1
I R Q 2
I R Q 3
,
IRQ n
CPU
INT
+
24
同时中断请求的处理方法
( a) 单级中断处理
( b) 多级中断处理
B 处理 A 处理 B 处理 C 处理
( a )CPU B 处理 C P U A 处理 C P U C 处理 C P U
( b )CPU C P U C P U
B 请求 A,C 请求
( a) 单级中断处理
25
中断嵌套
通常,正在执行较低级的中断服务程序时,
可以响应较高级的中断请求,而将正在处理的中断暂时挂起,称为中断嵌套。
……,.
STI ……,
IRET
STI
IRET
可实现
,多重嵌套,
26
2 8086/8088的中断系统
一、中断的分类:在 8086/8088系统中,可将中断分为两大类:
第一类 硬件中断:是由外部的中断请求信号启动的中断,也称为外部中断。又可分为:
非屏蔽中断 NMI:整个系统只有一个,不受 IF屏蔽
可屏蔽中断 INTR:受 IF屏蔽,在中断控制器 8259的统一管理下,可屏蔽中断可有几个至几十个。
27
中断的分类
(注意,这里的 IF是 CPU内部的标志寄存器的 IF位,
IF= 0,则对所有从 INTR引脚进入的中断请求均不予响应 (“总开关” );另外,也可以在 CPU外部的中断控制器 (8259)中以及各个 I/O接口电路 (如
8255)中对某一级中断或某个中断源单独进行屏蔽 )。
第二类 软件中断:是由 CPU内部的标志状态 (如 TF、
OF)或执行一条中断指令 (INT n),以及除数为 0引起的中断,也称为内部中断。
28
二 中断向量和中断向量表
所谓中断向量,即中断服务程序的入口地址。
中断向量表是存放中断向量 (中断服务程序入口地址 )
的一个特定的内存区域 (最低地址区 ).
一个中断向量占 4个字节单元,其中:
低地址的两个字节单元存放中断服务程序入口地址的偏移量
(IP)- 低字节在前 (低地址 ),高字节在后 (高地址 );
高地址的两个字节单元存放中断服务程序入口地址的段地址
(CS)- 低字节在前 (低地址 ),高字节在后 (高地址 )。
29
中断向量和中断向量表
8086/8088的中断向量表如书 P377图 9.22所示
8086/8088可以处理 256种中断,对每种中断都指定一个中断类型号 (也称中断向量号 ),每个中断类型号与一个中断服务程序的入口地址相对应。
256个中断向量要占 256*4= 1024个字节单元,地址编号从
00000H~003FFH
5个专用中断 (类型 0~类型 4),它们有固定的定义和处理功能;
27个保留的中断 (类型 5~类型 31)。占 0000:0014H~ 0000:007FH,共
108个字节单元。这个区域供系统使用,不允许用户自行定义。
224个用户可定义的中断 (类型 32~类型 255)。占
0000:0080H~0000:03FFH单元;使用时,要由用户自行填写相应的中断入口地址。(其中有些中断类型已经有了固定用途,例如,类型21H的中断已用作 MS-Dos的 系统功能调用 )。
30
中断向量表
003 F F H
003 F C H
0 0 0 8 0 H
0 0 0 7 C H
0 0 0 1 4 H
0 0 0 1 2 H
0 0 0 0 C H
0 0 0 0 8 H
0 0 0 0 4 H
0 0 0 0 0 H
专用中断向量
( 5 个)
系统保留中断向量
( 27 个)
用户可用中断向量
( 2 2 4 个)
16 位
CS
IP
255 号向量
∶
32 号向量
31 号向量
∶
5 号向量
4 号向量 ( 溢出 )
3 号向量
2 号向量(非屏蔽)
1 号向量(单步)
0 号向量(除法错)
31
IBM PC/ XT机的中断类型号的安排(一)
32
IBM PC/ XT机的中断类型号的安排(二)
中断类型号地址
( H) 中断功能中断类型号地址
( H) 中断功能
20 80-83 程序结束 26 98-9B 绝对磁盘写
21 84-87 DOS系统调用 27 9C-9F 程序结束,驻 留内存
22 88-8B 结束地址 28 A0-A3 DOS内部使用
23 8C-8F 中止处理 29~ 2E A4-BB DOS保留
24 90-93 错误处理 2F BC-BF DOS内部使用
25 94-97 绝对磁盘 读 30~ 3F C0-FF DOS保留
33
8259输入 中断类型 号 中断源
IRQ0 08 电子钟时间基准
IRQ1 09 键盘
IRQ2 0A 为用户保留
IRQ3 0B 异步通信,COM2
IRQ4 0C 异步通信,COM1
IRQ5 0D 硬盘
IRQ6 0E 软盘
IRQ7 0F 并行打印机
IB
M
PC
/X
T
机中断源和中断类型号
34
中断向量和中断向量表
中断向量在中断向量表是按中断类型号顺序存放的;
中断向量的地址 =中断类型号× 4
CPU响应中断时,需把中断类型号 N乘以 4,得到中断向量的对应地址 4N(该中断向量所占 4个字节单元的第一个字节单元的地址 )
然后把由此地址开始的 两个低字节单元 的内容装入 IP寄存器,IP (4N,4N+1),再把 两个高字节单元 的内容装入 CS寄存器,CS (4N+2,4N+3),这就是转入中断类型号为 N的中断服务程序的控制过程。
N的来源,对于不同的中断类型 (内部,外部,NMI,INTR)
情况有所不同,详见后述
35
例 1:若中断类型号为 3,则由中断类型号取得中断服务入口地址的过程如下图所示:
00000H
00001H
0000CH
(0000:000CH)
1EA00H
(1E00:0A00H)
FFFFFH
低地址内存高地址
1E00 0 H
+ 0A0 0 H
1EA0 0 H
中断类型号 3× 4
= 000CH
…….
00(IPL)
0A(IPH)
00(CSL)
1E(CSH)
…....
中断服务程序
36
例 2.中断类型号为 20H,中断服务程序的入口地址存放在 0000:0080H开始的 4个单元中。若:
(0080H)=10H
(0081H)=20H
(0082H)=30H
(0083H)=40H
则,中断服务程序的入口地址为
37
例 3.中断类型号为 23(17H),中断服务程序的入口地址为,2340:7890H,由于中断类型号 17H对应的中断向量存放在 0段的 0000:005CH(17H× 4=5CH)处,所以有:
(005CH)=
(005DH)=
(005EH)=
(005FH)=
0101 1100 B左移 2位,
0001 0111 B
5 C H
38
三 8086/8088中断处理流程图结束当前指令除法错,I N T
n,INT0?
NMI?
INTR?
TF=1?
执行下一条指令
N
读中断类型码
Y
Y
N
N
N
响应中断内部自动提供类型码
F R -> 栈
T F -> 暂存器
0 -> T F 和I F
C S,I P -> 栈
(4N,4N+1)- > IP
(4N+2,4N+3)- > CS
有N M I?
暂存器= 1?
执行中断服务程序执行I R E T 指令
( 弹出C S,I P,F R )
IF=1?
N
N
N
Y
Y
(1)
(1)
(2)
(3)
(4)
(5)
39
8086/8088中断处理流程图
8086中断优先级 (Priority)
说明:
(1)~(5)步是 CPU的内部处理 (由硬件自动完成 )
所有内部中断 (除法错,INT n、
INT0,单步 )以及 NMI中断不需要从数据总线上读取中断类型码,而 INTR中断需读取中断类型码,中断类型码由发出
INTR信号的接口提供。
中断 优先级除法错,INTn,INT0
NMI
INTR
单步中断最高最低
40
单步运行方式时发生中断的处理过程
IF=1
TF=1
执行D I V 或I D I V
指令
F R - > 栈,T F - > 暂存器清I F,T F
CS,IP->栈
(0,1)->IP
(2,3)->CS
F R - > 栈,T F - > 暂存器清I F,T F
CS,IP->栈
(4,5)->IP
(6,7)->CS
执行单步中断服务程序,
执行I R E T,弹出C S,I P,F R
单步中断识别形成类型码0 1 H
执行除法错处理程序;执行I R E T 指令,
弹出C S,I P,F R
执行下一条指令
5040H:7060H
2010H:4030H
除法错中断识别形成类型码0 0 H
发生除法错
.
.
.
.
41
单步运行方式时发生中断的处理过程
堆栈的情形:
60
70
40
50
(FR)’
30
40
10
20
(FR)
低地址高地址
IP
CS
TF=0
IP
CS
TF=1
作业:
画出在单步运行时 (TF=1)发生 INTR中断的处理流程及堆栈的情形。假定当前指令下一条指令的地址为 4030H:2080H; INTR中断服务程序的入口地址为 9080H:3020H.
42
四 软件中断 (内部中断 )
除法错中断 (也称除数为 0中断 )- 类型 0
在执行 DIV(无符号除法 )或 IDIV(带符号除法 )指令时,若发现除数为 0,则立即产生一个类型号为 0的内部中断,CPU转向除法错中断处理程序。
溢出中断- 类型 4
若上一条指令执行的结果使溢出标识位 OF被置 1,则接着执行 INTO指令时,将引起类型为 4的内部中断,CPU转入对溢出错误处理程序,若 OF=0时,INTO指令执行空操作,即
INTO指令不起作用。 INTO指令通常安排在算术指令之后,
以便在溢出时能及时处理。
43
软件 (指令 )中断 (执行 INT n指令引起的中断 )
双字节指令,第一个字节为 操作码 ;第二个字节为 中断类型号,该指令控制 CPU转向相应的中断服务程序。
主程序,.
.
.
ADD AX,BX; 若 OF=1
INTO
溢出中断服务程序:
IRET
…
44
断点中断- 类型 3
INT3或简写为 INT,是单字节指令。调试程序时可以在一些关键性的地方设置断点,使 CPU在此断点处执行中断服务程序。
单步中断- 类型 1
TF=1
…,.
单步执行
45
软件中断 (内部中断 )的特点
中断类型号由 CPU内部自动提供 (包括由中断指令第二字节提供的中断类型号 ),不需去执行中断响应总线周期读取中断类型号 。
除单步中断外,所有内部中断 (除法错,INTO,
INT n)均不可以用软件来屏蔽。
除单步中断外,所有内部中断都比外部中断优先级高。
46
五 中断服务程序的一般结构
……
保护现场 (将需要保护的寄存器压入堆栈 )
STI(可选 );
恢复现场
IRET
中断处理例如:
PUSH AX
PUSH BX
PUSH CX
…
POP CX
POP BX
POP AX
47
指令系统中没有单独置,1”或清,0” TF的指令,可实现如下:
PUSHF; FR的内容压入堆栈
POP AX; FR的内容弹出到 AX
OR AX,0100H; 使 AX中对应 TF的位置为,1”,其他位不变
PUSH AX; 修改后的 AX内容压入栈
POPF 弹回到 FR(TF=1)
1->TF
PUSHF
POP AX
AND AX,
PUSH AX;
POPF
0->TF
48
中断服务程序框图与程序示例中断服务程序入口
C P U 响应中断后自动关中 断保护现场开中断中断服务关中断恢复现场开中断中断返回入口地址,P U S H A X ;保护现场
P U S H B X
P U S H C X
P U S H D X
P U S H S I
P U S H D I
P U S H S P
P U S H B P
C L I ;开中断
∶ ;中断服务
S T I ;关中断
P O P B P ;恢复现场
P O P S P
P O P D I
P O P S I
P O P D X
P O P C X
P O P B X
P O P A X
C L I ;开中断
I R E T ;中断返回结尾部分主体部分起始部分
49
第三节 可编程中断控制器 8259A
(8259A Programmable Interrupt Controller-PIC)
Intel 8259A用于管理和控制 80x86的外部中断请求,实现优先级判决,提供中断矢量码,屏蔽中断输入等功能。
使用单片 8259A可以管理 8级中断,采用级联方式,可扩充到 64级(用 9片 8259A)。
50
.
IR0
IR7
单片
INT
INTA
8259A
INTR
INTA
CPU
.
.
.
中断请求
CPU?8259A,.
.
.
.
IR0
IR7
级联主
8259A IR0
从
.
.
.
IR7
8259A IR0
从
.
.
.
IR7
INTA
INTR
51
INTA# INT
控制逻辑
D7~D0 总线缓冲器读 / 写逻辑
RD#
WR#
A0
CS#
级连缓冲器
/ 比较器
CAS0
CAS1
CAS2
中断在服务寄存器 ISR
优先权裁决器中断请求寄存器 IRR
:
:
IR0
IR1
IR6
IR7
中断屏蔽寄存器 IMR
SP# / EN#
8259A 内部结构框图
52
内部逻辑,IRR,IMR,PR,ISR及控制电路。
中断请求过程,IR->INT。
&INT
ISR编码中断请求优先级编码器中断请求寄存器IR
R
IR0
IR7
…
…
&
&
&
&
&
&
&
&
中断屏蔽寄存器 IMR
D0 D7…
≥1
比较器
B0
B1
B2
A>B
A0
A1
A2
53
封装形式 28脚双列直插( 28- pin DIP),
DIP:Dual-In-Line Package,如下图所示。
8259A的引脚功能
54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
8259A
CS
WR
RD
D7
D6
D4
D5
D2
D3
D0
D1
CAS0
CAS1
GND
INTA
IR7
IR6
IR4
IR5
IR2
IR3
IR0
IR1
INT
CAS2
SP/EN
VCC
A0
可编程中断控制器 8259A
55
8259A引脚介绍
--片选信号( Chip Select)低电平有效,来自地址译码器的输出只有 有效时,CPU才能对 8259A进行读写操作。
--写信号,低电平有效,来自 CPU的 输出;当有效且 有效时,使 8259A接受 CPU送来的命令字。
--读信号,低电平有效,来自 CPU的 输出;且有效且 有效时,使 8259A将状态信息放到数据总路线上,供 CPU检测。
CS
WR
CS
CS
CS
RD RD
WRWR
RD
56
D7~ D0,双向数据总线,接到系统数据总线的 D7~ D0
上,用来传送控制字、状态字和中断类型号。
IR7~IR0,中断请求信号,输入,来自外部接口电路。
(单片时)
INT,向 CPU发出的中断请求信号。(单片时)。
,中断响应信号,由此接收 CPU发来的中断响应脉冲。
INTA
57
A0,地址输入信号,用于对 8259A内部寄存器的寻址。
CAS2~ CAS0:级联线( CASCADE LINES),传送 3位 标 识码,用于区分特定的从控制器。双向:
对于主片为输出,对于从片为输入。
,从片 /允许缓冲器信号。双功能引脚:
作为输入时,8259A作为主片( = 1)
8259A作为主片( = 0)
作为输出时,用来启动(允许)数据总线收发器(如 8286)。
*究竟是作为输入还是输出,取决于 8259A是否工作于“缓冲方式”
(即 8259A是否通过一个“数据总线收发器”与系统总线相连)。
详见后面 ICW4的格式。
SP/ EN
SP/ EN
SP/ EN
58
二,8259A的内部结构
CPU
AD7~AD0
INTA
INTR
SP/EN
ISR
ICW1 OCW1 (IMR)
ICW2 OCW2
ICW3 OCW3
ICW4
PR IRRD7~D0
地址译码.
.
.
INT
INTA
CS
RD
WR
A0
CAS0
CAS1
CAS2
.
.
.IR
7
IR0
59
IRR— Interrupt Request Register
PR---Priority Resolver
ISR---In-Service Register
IMR---Interrupt Mask Register
ICWs---Initialization Command Words
OCWs---Operation Command Words
7个 CPU可访问的寄存器,分两组:
初始化命令字 ICW1 ~ICW4---系统初启时设定。
操作命令字 OCW1~OCW3—系统运行时,由应用程序设定 (实现对中断处理的动态管理和控制 ).
The OCWs can be written into the 8259A anytime after initialization。
8259A的内部结构
60
7个寄存器的寻址问题,
规定,A0
0
1
1
1
ICW1:用偶地址写入,且 D4=1
ICW2
ICW3
ICW4
紧接着 ICW1,用奇地址写入
1
0
0
OCW1:也用奇地址写入,但不紧跟 ICW1
OCW2
OCW3 也用偶地址写入,但 D4=0
即,0
1
0 0
0 1
D
4
D
3
I C W
1
O C W
2
O C W
3
0
0
采用了专门的“标识位,以节省输入地址的引脚数 (仅用了 A0)
61
8259A的处理部件:
中断请求寄存器 IRR- 8位寄存器+控制逻辑作用,接受并锁存来自 IR0~ IR7的中断请求信号
中断服务寄存器 ISR
作用,保存当前正在处理的中断请求
优先级裁决器 PR
作用,把新进入的中断请求和当前正在处理的中断进行比较,以决定哪一个优先级更高
62
处理过程:
IR0~ IR7上出现某一中断请求信号 ->IRR对应位被置,1” ->
由 IMR的相应位决定是否将其屏蔽 (屏蔽位 =1,不通过;屏蔽位 =0,通过 )->中断请求进 PR->PR把新进入的中断请求和当前正在处理的中断进行优先级比较 ->若新进入的中断优先级高,该中断请求被送到 CPU。
若 CPU的 IF=1,CPU完成当前指令后,响应中断,在 引脚上发出两个负脉冲 (执行两个中断响应总线周期,参见
P122图 5.4),INTA
63
处理过程 (续 ):
8259A收到第一个负脉冲后
使 IRR锁存允许,不予接受 IR0~ IR7上的中断请求信号;直到第二个负脉冲结束后,才又使 IRR锁存禁止 (输入输出透明 )
使 ISR的相应位置,1”,以便为优先级裁决器以后的裁决提供依据。
清除 IRR的相应位。
8259A收到第二个负脉冲后:
把中断类型码寄存器的内容 (ICW2的内容 )送到 D7~ D0
如果 ICW4的 AEOI位为 1,则在第二个 脉冲结束时,将 ISR中被第一个 脉冲置,1” 的位清除 (自动结束 ); 否则,要等到中断结束命令 (EOI)发送后才能清除。
INTA
INTA
64
三 8259A的工作方式
1,设置优先级的方式
(1) 全嵌套方式 (FULLY NESTED MODE)
也称固定优先级方式。在这种方式下,由 IRi引入的中断请求具有固定的优先级- IR0(最高 )- >IR7(最低 ).
This mode is entered after initialization unless another mode is
programmed.
当一个中断请求被响应时,ISR中的对应位 ISn被置,1”,
8259A把中断类型码放到数据总线上,然后,进入中断服务程序。一般情况下 (除了,中断自动结束,方式 外 ),在 CPU
发出中断结束命令 (EOI)前,此对应位一直保持为,1” -封锁同级或低级的中断响应,但并不禁止比本级优先级高的中断响应 -实现中断,嵌套,。
65
(2) 特殊全嵌套方式 (SPECIAL FULLY NESTED MODE- SFNM)
在处理某一级中断时,不但允许优先级更高的中断请求进入,也允许同级的中断请求进入。
用于主从结构的 8259系统中,将主片设置为,特殊全嵌套方式,。
通过 ICW4的,SFNM”位可以设置此种方式。 (参见 p132)
CPU
IR0
IR1
IR7
…
IR0
IR1
IR7
…
8259(主片 ) 8259(从片 )
66
(3) 优先级自动循环方式 (AUTOMATIC ROTATION)
优先级是循环变化的 (不希望有固定的优先级差别 )-一个设备的中断服务完成后,其优先级自动降为最低,而将最高优先级赋给原来比它低一级的中断请求。
开始时,优先级队列还是,IR0->IR7,若此时出现了 IR0请求,
响应 IR0并处理完成后,队列变为:
IR1,IR2,IR3,IR4,IR5,IR6,IR7,IR0。
若又出现了 IR4请求,处理完 IR4后,队列变为:
__________________________________
系统中是否采用,自动循环优先级,,由操作命令字 OCW2来设定。
IR
0
IR
1
IR
2
IR
3
IR
4
IR
5
IR
6
IR
7
67
(4)优先级特殊循环方式 (SPECIFIC ROTATION)
与“优先级自动循环方式”相比,只有一点不同,
即可以设置开始的最低优先级。例如,设定 IR4为最低优先级,那么 IR5就是最高优先级,其余各级按循环方法类推。 (OCW2:”110”)
68
2,屏蔽中断源的方式 (中断屏蔽方式 )
普通屏蔽方式
通过对中断屏蔽寄存器 (IMR)的设定,实现对相应位为,1”的中断请求的屏蔽。
可通过 OCW1使 IMR的一位或几位置,1” 。
*特殊屏蔽方式 (SPECIAL MASK MODE)
作用:用于电源故障,其优先级高于屏蔽中断。
实现,输出 OCW3(ESMM=1,SMM=1)
输出 OCW1(使 IMR对应于本级的位为,1” )
……
……
输出 OCW1(使 IMR对应于本级的位为,0” )
输出 OCW3(ESMM=1,SMM=0)
,中断级无效,
设置撤销
69
3,中断结束方式 (END OF INTERRUPT- EOI)
(1)中断自动结束方式 (AUTOMATIC- AEOI方式 )
在第二个 后沿,即完成把对应的 ISR位复位。
注意,AEOI方式是在中断响应后,而不是在中断处理程序结束后将 ISR位清 0。这样,在中断处理过程中,8259A中就没有,正在处理” 的标识。此时,若有中断请求出现,且 IF= 1,则无论其优先级如何 (比本级高、低或相同 ),都将得到响应。尤其是当某一中断请求信号被 CPU响应后,如不及时撤销,就会再次被响应 -“二次中断”
所以,AEOI方式 适合于中断请求信号的持续时间有一定限制以及不出现中断嵌套的场合。
通过 ICW4可以设置 AEOI方式 (AEOI=1)
INTA
70
(2)一般 (常规 )中断结束方式
适合于 全嵌套方式 。
实现:在中断服务程序结束时,向 8259A发常规中断结束命令 (OCW2:EOI=1,SL=0,R=0)
例,MOV AL,20H; OCW2=20H
OUT 20H,AL; 端口地址 =20H(偶地址 )
在全嵌套方式下,ISR中最高优先级的置,1”位,正对应于当前正在处理的中断,将其清,0”,就完成了当前正在处理中断的结束操作。
1 1 0 1 …
IR0 IR7
71
(3)特殊中断结束方式 (SPECIFIC EOI- SEOI)
在非全嵌套方式下,无固定的优先级序列 (使用设置优先权命令或特殊屏蔽方式 ),此时,根据 ISR的内容 就无法确定刚刚所响应 (处理 )的中断。这种情况下,就不能用上述的 EOI方式 进行中断结束处理,
而必须用特殊的中断结束命令 SEOI-- 用
OCW2:EOI=1,SL=1,R=0,L2~ L0.
由 L2~ L0指定清除 ISR中的哪一位。
72
4,中断触发方式
电平触发方式:由 IRi上的有效电平来触发,中断请求触发器,。
边沿触发方式:由 IRi上由低电平向高电平的跳变来触发,中断请求触发器,。
由 ICW1的 LTIM位 可以设置中断触发方式。
73
5,连接系统总线的方式
缓冲方式 (ICW4的 BUF=1)
8259A通过总线驱动器 (如 8286)和数据总线相连。
在缓冲方式下,8259A的 作为输出 ( 有效 ),此时,由 ICW4
的 M/S位来定义 (标识 )本 8259A是主片还是从片。
非缓冲方式 (ICW4的 BUF=0)
即 8259A直接与数据总线相连
在,非缓冲方式下,,8259A的 作为输入 ( 有效 )
此时,由 端来标识本 8259A是主片还是从片。
在,非缓冲方式下,,ICW4的 BUF= 0,M/S位无意义。
SP / EN EN
SP / EN SP
SP / EN
74
*“中断查询”方式
特点:总的说,既有中断的特点,又有查询 (Polling)
的特点。
外设仍然向 8259A发中断请求信号,要求 CPU服务。
CPU的 IF=0,不响应外部的中断请求 (对 CPU的中断请求信号不起作用 )
此时,CPU需要用 软件查询 方法来确认中断源,从而实现对设备的服务
先向 8259A发查询命令 (poll command)
OCW3:
0 0 0 0 1 1 0 0
P
75
紧接着执行一条读指令 (IN指令 ),读出专门的
“中断状态字”,
当 8259A收到 P=1的查询命令后,在下一个 信号将使 ISR的相应位置,1”,就像收到了 一样,
并把上述的“中断状态字”送到数据总线上,由
CPU读入 AL。
0
A0
IR - - - - W2 W1 W0
D7 D0
1:有设备请求服务;
0:无设备请求服务。
当前最高优先级的中断请求
RD
INTA
76
IR0
IR1
IR2
:
:
IR7
SP#/EN#
INTA#
INT
8259A
CAS0
CAS1
CAS2
IR0
IR1
IR2
:
:
IR7
SP#/EN#
INTA#
INT
8259A
CAS0
CAS1
CAS2
IR0
IR1
IR2
:
:
IR7SP#/EN#
INTA#
INT
8259A
CAS0
CAS1
CAS2
最多
64
条中断请求线+5
SLAVE1
SLAVE2
SLAVE0;
SLAVE7
MASTER
:
8
0
8
6
四
82
59A
的级联使用
77
A0
0 ADILTIM SNGLA7 A6 A5 IC41
D7 D6 D5 D2 D1 D0D4 D3
ICW1
(chip control)
用于 8085 8085
1 A15/T7 A14/T6 A13/T5 A12/T4 A13/T3 A10 A9 A8
ICW2
(type)
用于 8085
SNGL=1
1 S5 S4S6S7 S3 S2/ID2 S1/ID1 S0/ID0
ICW3
(slave control)
Y
N
IC4=1
N
1 SFNM00 BUF M/S AEOI u PM0
ICW4
(mode control)
可中断
8259A初始化流程
78初始化流程图开始初始化 ICW 1
初始化 ICW 2
是否用级连方式?
初始化 ICW 3
是否用 ICW 4?
初始化 ICW 4
准备接近中断请求结束
Y
Y
Y
N
N
79
1,初始化命令字
ICW1~ICW4.(详见 P131)
8259A的初始化流程:
I C W
1
I C W
2
级联方式?
I C W
3
需I C W
4
I C W
4
准备接受中断请求
Y E S (I C
4
= 1 )
Y E S (S N G L = 0 )
N O (S N G L = 1 )
N O (I C
4
= 0 )
80
2,8259A的操作命令字 OCW1~OCW3(P132)
3.关于 8259A的读出操作,可以读四个方面的内容
读“中断状态字” (“查询字” ):
先写入 P=1的 OCW3查询命令字
用偶地址读 (IN AL,20H)
读 IRR:
先写入 OCW3(RR=1,RIS=0)
用偶地址读 (IN AL,20H)
读 ISR:
先写入 OCW3(RR=1,RIS=1)
用偶地址读 (IN AL,20H)
随时可用奇地址读 IMR
(IN AL,21H)
例 1:
IN AL,21H ; 读 IMR
AND AL,7FH ; 开放 IR7中断
OUT 21H,AL
例 2:
IN AL,21H ; 读 IMR
OR AL,80H ; 关闭 IR7中断
OUT 21H,AL
81
(1)设置中断向量
把由 AL指定的中断类型的中断向量 DS:DX放置在中断向量表的相应位置中。
AH=25H 执行,INT 21H
AL=中断类型号
DS:DX=中断向量
(2)取中断向量
把由 AL指定的中断类型的中断向量从中断向量表中取到
ES:BX中
预置,AH=35H 执行,INT 21H
AL=中断类型号
返回,ES:BX=中断向量
82
例:使用 DOS功能调用存取中断向量
….
MOV AL,N; type N Interrupt
MOV AH,35H; get Interrupt vector
INT 21H;
PUSH ES; save the old base and
PUSH BX; offset of interrupt N
PUSH DS;
MOV AX,SEG INTHAND;
MOV DS,AX; base of INTHAND in DS
MOV DX,Offset INTHAND; offset in DX
MOV AL,N;
MOV AH,25H; Set Interrupt Vector
INT 21H;
POP DS;
…
83
POP DX; restore the old offset
POP DS; and base of interrupt
MOV AL,N;
MOV AH,25H; set interrupt vector
INT 21H;
RET ; return
INTHAND:
…,Interrupt Processing Routine
IRET
84
中断向量表的初始化方法一:采用 DOS系统功能调用。即 INT 21H的
25H号功能调用。
方法二:将中断服务程序的入口地址直接装入中断向量表中。
85
8086/8088中断优先级别对中断源的管理
1.中断优先级别中断源 优先级除法错,INT n,INT O 最高
NMI ↑
INTR ∣
单步(陷阱) 最低中断优先级顺序
86
2,8086/8088对中断源的采样有几条指令是在紧跟其后的一条指令也被执行完才去采样:
1)对段寄存器的装入指令
2) STI和 IRET指令
3) WAIT指令
4) HLT指令
87
3,8086/8088中断处理过程
1) 将中断类型码乘 4,指向中断向量表中的中断处理子程序的入口地址 。
2) 保存 CPU的状态 。
3) 清除 IF和 TF的状态标志位 。
4) 保存原来执行的主程序的中断点 。
5) 转中断处理子程序入口地址 。
6) 执行中断处理子程序 。
7) 返回到被中断了的主程序的断点继续执行 。
88
中断处理过程框
89
IBM-PC/XT的中断控制逻辑
( 1) 内部中断源:除法错引起的中断,溢出引起的中断,执行中断指令 INT( 包括 INT3断点中断 ) 引起的中断以及单步中断 。
( 2) 非屏蔽中断 NMI,系统板上存储器奇偶校验错,I/O通道中的插件奇偶校验错,8087请求中断 。
( 3) 可屏蔽中断 INTR,外部设备请求中断时,
是通过 INTR引脚向 8088 CPU请求屏蔽中断 。
90
8086/8088 CPU的中断结构体系
8086/8088的中断源
I N T R
N MI
8 0 8 6 / 8 0 8 8 C P U
中断逻辑单步( T F = 1 )
除法出错
I N T O 溢出
I N T 3 断点非屏蔽中断请求
8 2 5 9 A
可屏蔽中断请求
I N T n 指令
91中断控制逻辑电路如图
92
8259A在 PC/AT微型计算机中的应用
IBM— PC/AT微型计算机系统的 CPU采用
80286芯片,系统中有两个 8259A芯片 。 若设置
8259A按特殊的完全嵌套方式工作,则系统中优先权从最高至最低的排列顺序是:主片 IRQ0、
IRQ1,从片 IRQ0,IRQ1至 IRQ7,主片 IRQ3至
IRQ7。
93
IBM PC/AT的外中断实时时钟 IRQ8 定时器 IRQ0
INT O A H IRQ9 键盘 IRQ1
保留 IRQ1 0 INT IRQ2
保留 IRQ1 1 串行口 1 IRQ 3
保留 IRQ1 2 串行口 2 IRQ 4
8 0 2 8 7 IRQ1 3 并行口 2 IRQ 5
硬盘 IRQ1 4 软盘 IRQ 6
保留 IRQ1 5 并行口 1 V cc
INT R
8 2 5 9 A
(从片)
中 断控制器
C AS 0 C1 C 2 S P
INT
8 2 5 9 A
(主片)
中 断控制器
S P C 0 C 1 CA S 2
80 28 6 C PU
94
80386系统微机采用 82C206作为中断控制器 。 82C206芯片实际上是将两个级连的 8259A
与 8237等芯片集成在一起 。 82C206内部
INTC1及 INTC2的级连情况如图所示 。 82C206
中断控制器的中断源安排如表所示 。
95
82C206中断控制器内部级
IN T R
IN T A
IN T
IN T A
CSA 2
CSA 1
CSA 0
IN T A IN T
IR 2
CSA 2
CSA 1
CSA 0
96
82C206中断控制器的中断源安排
97
82C206中断控制器的中断源安排