第7章中断与异常

Download Report

Transcript 第7章中断与异常

现代微机原理与接口技术(第3版)
第7章 中断与异常
1
http://www.njyangqs.com/
7.1 概述
现代微机原理与接口技术(第3版)
7.1.1 中断、异常、中断向量
1.中断与异常概念
中断是在程序执行过程中,为了响应从硬件发来的信
号而随机产生的事件。系统硬件使用中断来处理外部
事物,比如外设的请求。软件也能够通过执行INT n指
令来产生中断。
当处理器检测到执行一条指令时的错误,比如除0错
、保护侵犯、缺页故障、内部机器故障等,就会产
生异常。当内部硬件错误和总线错误被检测到时,
有机器检查功能的处理器(Pentium,P6,Pentium
4,Core及以后)也会产生机器检查异常。
2
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
2.中断大致过程:
中断到来的时候,CPU暂停现行程序,转而处理随机
到来的事件,待处理完后再回到被暂停的程序继续执
行。
中断请求
中断响应 中断服务 中断结束
中断处理
中断处理的隐操作:程序状态及程序断点地址
的进栈及出栈。
3
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
3.中断系统其他功能:
支持多中断源和多种中断源。
支持中断屏蔽处理。
支持中断嵌套处理。
支持中断优先级修改。
支持中断结束方式选择。
4
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
4.中断向量号、中断向量
为了处理异常和中断,每一个IA-32/Intel 64体系定义
的异常和每一个需要特殊处理的中断类型都被分配了
唯一的识别号,该识别号称之为中断向量号。
对每个异常或中断而言,处理器都有相应的中断处理
程序,而中断向量就是中断处理程序的入口地址。
 中断向量号允许的范围是0~255
 0~31号向量被Intel 64和IA-32用作体系结构内部定义的异常和
中断。
 32~255号向量作为用户定义的中断,这些中断通常安排给外部
I/O设备,使这些设备能够利用外部的某一种硬件中断机制
(比如8259A中断控制器)向处理器发出中断请求。
 作为INT n指令引发的软件中断,其向量号可以在0~255的范围。
5
http://www.njyangqs.com/
7.1.2 中断源及中断类型
现代微机原理与接口技术(第3版)
1.外部中断
 Pentium及以上的处理器外部中断通过处理器外部引
脚或者本地APIC获得
Pentium之前的处理器,中断信号直接从INTR和NMI
引脚引入
Pentium之后的处理器,主要的中断引脚是LINT[1:0]
,它们连接到本地APIC
• 如果处理器内本地APIC被禁止时,LINT[1:0]引脚分别
被配置为INTR和NMI引脚
• 如果本地APIC被使能时,LINT[1:0]引脚能够通过
APIC的本地向量表编程去关联任一个处理器的异常和
中断向量
 外部中断又可分为可屏蔽中断和不可屏蔽中断。
APIC是高级可编程中断控制器,是从Pentium处理器开始被引入
的面向多处理器及多核系统的中断控制器,由处理器中的本地
6 APIC,PCH中的I/O APIC以及两者之间的连线构成。
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
1.外部中断
1)可屏蔽中断(如键盘 、鼠标,串口,并口打印机等)
属性:硬件、可屏 蔽、向量。
中断请求:多个中断请求的排队和判优由中断控制器完
成,产生的中断请求信号送到CPU的INTR引脚或本地
APIC 。
中断向量号:通过数据总线送到CPU中。
…
IRQx
SERIRQ
SIO
LPC47B27X
PIRQx
INTR
中断向量号
PCH
北桥
CPU
EFLAGS寄存器的IF位影响CPU对中断请求的响应。
处理器在当前指令执行结束的时候启动中断识别INTA
总线周期。
7
http://www.njyangqs.com/
1.外部中断
2)不可屏蔽中断
现代微机原理与接口技术(第3版)
属性:硬件、不可屏蔽、向量。
中断请求:中断请求的信号送到CPU的NMI引脚或
本地APIC 。
中断向量号:固定为2。
CPU不需要进行中断识别,直接处理中断。
NMI由0跳变到1以后要维持至少4个连续的处理
器时钟周期的高电平才被识别。
NMI由1跳变到0以后要维持至少4个连续的处理
器时钟周期的低电平,新的NMI中断才能被识别。
8
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
2.软件中断
属性:软件、不可屏蔽、向量。
中断请求: INT n是使用非常广泛的软件中断指令。
中断向量号: INT n的第二字节n给出指令指定的中
断向量号
BIOS中断:I/O设备控制、实用服务、特殊中断、专
用参数中断。
DOS中断:公开/未公开、可调用、系统功能。
自由中断:未定义(20H~3FH中未使用的中断)。
CPU不需要进行中断识别,直接处理中断。
9
http://www.njyangqs.com/
7.1.3 异常源及异常类型
现代微机原理与接口技术(第3版)
1.异常源
 处理器检测到的程序错误产生的异常
处理器在执行应用程序或操作系统期间检测到程序错
误,会产生一个或多个异常
IA-32/Intel 64结构为每一个“处理器可检测”的异常
指定了一个向量号
 机器检测异常
P6家族和Pentium处理器提供了内部和外部机器检测
机制用于检查内部芯片硬件和总线事务的操作
当发现机器检测错误,处理器发出一个机器检测异常
并返回一个错误号
10
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
1.异常源
 软件产生的异常
INTO是溢出异常指令,如果EFLAGS.OF=1,同时又
执行INTO指令,则将产生向量号为4的异常中断
INT 3是断点异常指令,它是一条单字节指令,常被放
在需要放置断点的指令前面。实际上,很多调试程序
都是利用INT 3指令来完成断点跟踪功能的
BOUND指令是边界检查指令,它具有两个操作数:第
一个操作数用来指定存放数组索引的寄存器;第二个
操作数必须是存储器操作数,其第一个字是数组下标
的下限,第二个字是数组下标的上限。BOUND指令执
行时将检查数组的索引值,若小于下限或大于上限,
则将发生向量号为5的异常中断
11
http://www.njyangqs.com/
2. 异常的属性与种类
现代微机原理与接口技术(第3版)
属性:软件、不可屏蔽、向量。
中断请求:指令执行中产生。
中断向量号:CPU规定。
故障(失效):错误在指令完成前,错误指令的CS:
EIP压栈。该指令会重做。
陷阱:错误在指令完成后,错误指令下一指令的CS:
EIP压栈。
中止:不保存,重启机器。
CPU不需要进行中断识别,直接处理中断。
12
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
7.2 可编程中断控制器——Intel 8259A
7.2.1 8259A主要任务
• 接受外部的中断请求;
• 管理所有外部的中断请求(排队、判优、屏蔽、嵌套);
• 向CPU产生中断请求INTR信号及中断向量号;
• 进行中断结束处理;
• 接受CPU命令及返回状态。
13
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
7.2.2 8259A引脚及内部结构
1.8259A引脚
CPU侧:
CS#;
DB0~DB7;
RD#、WR#、A0;
INT、INTA#;
外设侧:
IR0~IR7;
级联:
14
SP#/EN#、
CAS0~CAS2。
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
2.8259A内部结构
在
15
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
接口电路:CPU接口、I/O接口。
内部逻辑:IRR、IMR、PR、ISR及控制电路。
中断请求过程:IR->INT。
D0
ISR编码
&
A>B
中断屏蔽寄存器IMR
&
中
断
请
求
优
先
级
编
码
器
&
&
&
&
&
&
&
16
IR0
中
断
请
求
寄
存
器
IRR
A0
A1
A2
D7
… …
INT
比
较
器
B0
B1
B2
≥1
…
IR7
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
CPU响应可屏蔽中断条件:
当前指令执行完毕;
EFLAGS中IF=1;
INTR信号有效。
中断响应过程:8259向CPU送中断向量号。
第一个INTA#,CPU封锁总线(LOCK#有效),8259A
最高优先级请求对应ISR位置位,对应IRR复位。
第二个INTA#,总线解锁,ALE无效,8259A将当前
中断服务程序对应中断向量号送到数据总线上。
ISR的复位在自动结束/非自动结束时不一致。
回ICW3
17
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
级联方式结构:
级联1
18
级联2
级联3
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
3.8259A工作方式
中断请求方式:
边沿触发方式:正跳变向8259A请求中断。
电平触发方式:高电平向8259A请求中断,响应
中断后要及时清除高电平。
查询中断方式:
外设向8259A请求中断,并将请求状态保存
在状态寄存器中等待CPU来查询。
PC机初始化为边沿触发,非查询中断方式
19
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
连接总线与级联方式:
非缓冲方式:小系统中,8259A数据线直接连
系统数据总线,不需要总线缓冲器,此时
SP#/EN#表示级联时主/从关系。
主片:SP#/EN#接高电平;
从片:SP#/EN#接低电平。
缓冲方式:大系统中,数据总线都具有总线
缓冲器,此时SP#/EN#表示数据传送方向,级联
时主/从关系通过软件设定ICW4来决定。
PC机初始化为非缓冲方式
20
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
屏蔽方式:
缺省特性:自动屏蔽低于自己优先级的IR。
正常屏蔽:IMR中相应位置位;
特定屏蔽:开放比自己优先级低的IR。
优先级管理方式:
缺省特性:IR0~IR7的优先级为一循环队列。
固定优先权:从IR0~IR7降序;
轮转优先权:
自动轮转:刚被服务的IR的优先级降至最低;
指定轮转:指定的IR的优先级降至最低。
PC机初始化为缺省屏蔽特性,固定优先权
21
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
嵌套方式:
全嵌套:禁止同优先级和低优先级请求发生;
特殊全嵌套:禁止低优先级请求发生。
应用:级联时主片特殊全嵌套,从片全嵌套。
级联结构
结束方式(ISR复位方式):
自动:中断响应后ISR中最高优先级位自动复位;
非自动:中断服务程序返回前,需要处理程序
发出对ISR中相应位复位的中断结束命令;
不指定方式:ISR中最高优先级位复位;
指定方式:命令中指定的ISR中相应位复位。
PC机初始化为全嵌套,非自动结束方式
22
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
4.8259A的操作功能及命令
I/O端口地址:只提供二个端口(使用A0区别);
命令:初始化--ICW1~ICW4,
操 作--OCW1~OCW3。
状态:IRR、ISR、IMR、查询字。
I/O端口操作冲突时解决方法:
信息字节中有空闲位时:特征位方法;
信息字节中无空闲位时:时序方法、读/写区
分法。
23
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
8259A命令关系表(地址以PC机中为例):
PIC1
PIC2
操作
内容
特征位
D4D3D2
20H
0A0H
写
21H
0A1H
写
ICW1
OCW2
OCW3
ICW2~ICW4
1××
00×
01×
无
24
0A0H
读
21H
0A1H
读
IRR,ISR
查询字
IMR
无
在初始化期间,
ICW1之后
ICW2→ICW4
无
非初始化期间
OCW3决定
无
无
OCW1
20H
时序
注:ICWx只有在初始化过程中才会出现。
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
(1)初始化命令ICW1
特征位:D4=1;
初始化命令ICW4主要设定嵌套、缓冲、结束方式,
缺省值为全嵌套、非缓冲、非自动结束方式。
当SNGL=0,需要初始化命令ICW3来设置级联项。
PCH芯片将内嵌的8259 ICW1的D3位作废
25
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
(2)初始化命令ICW2
时序: ICW1→ ICW2→[ICW3]→[ICW4]。
IRi的中断向量号 = ICW2+i
例:如果ICW2为08H,则
IR3的中断向量号为08H+03H=0BH。
思考题:如果一个中断的类型号是16H,请问该中断接
在IR几?该8259初始化的ICW2是多少?
26
http://www.njyangqs.com/
(3)初始化命令ICW3
级联方式结构设置:
现代微机原理与接口技术(第3版)
级联结构
需要分别对主片和从片进行设置。
主片:S7~S0分别对应相应的IR号的引脚,
为1的位对应的引脚接有从片;
从片:ID2~ID1的编号是该从片接到主片的
IR引脚的IR号。
27
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
主 片:MOV AL, 14H
OUT 21H,AL
从片1:MOV AL, 04H
OUT 0A1H,AL
级联结构
从片2:MOV AL, 02H
OUT 0C1H,AL
级联方式中断请求及响应过程:
非级联响应
主片请求:与非级联一致。
主片响应:收到第一个INTA#后,对从片的IR请求,
在第一个INTA#下降沿从CAS线送出该IR编码;否则,
在第二个INTA#返回中断向量号。
从片请求:与非级联一致,但其INT送到主片,服
从主片的请求规则。
从片响应:通过CAS线译码,选中时在收到第二个
INTA#后,返回中断向量号。
28
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
(4)初始化命令ICW4
D0:用于8位(0)/16位(1)微机,PCH中此位恒为1;
D1:非中断自动结束(0)/自动结束(1)方式;
从片非自动结束时,主、从片均需发EOI命令。
D2:缓冲方式(D3=1)时的主从片级联位置设置,
从片(0)/主片(1) ;
D3:非缓冲(0)/缓冲(1)方式;
D4:全嵌套(0)/特殊全嵌套(1)方式。
29
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
(5)操作命令OCW1
特征位:无,时序:无。
功能:写中断屏蔽寄存器IMR
实际上改变了中断优先级(屏蔽掉高优先级的
中断请求)。
对IMR的读取在21H(主)、0A1H(从)端口
做读操作。
30
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
(6)操作命令OCW2
特征位:D4D3=00;
31
功能:结束方式和优先权轮转管理;
结束方式管理:
D6D5=×0,自动结束,硬件自动清除ISR的相应位;
D6D5=01,非自动结束[命令不指定清ISR的哪一位];
D6D5=11,非自动结束[命令指定清ISR的哪一位]。
优先权管理:
D7=0,优先权固定;D7=1,优先权轮转。
D6的含义仍然有效
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
R SL EOI 0 0 L2 L1 L0
功能
0 0
0 0 0 0 0 0 自动EOI、优先权固定命令
0 0
1 0 0 0 0 0 非自动EOI[不指定] 、优先权固
定命令
0 1
1 0 0 L2 L1 L0 非自动EOI[指定] 、优先权固定
命令
1 0
0 0 0 0 0 0 自动EOI、优先权自动轮转命令
32
1 0
1
1 1
1
1 1
0
0 非自动EOI[不指定] 、优先权自
动轮转命令
0 0 L2 L1 L0 非自动EOI[指定] 、优先权指定
轮转命令
0 0 L2 L1 L0 自动EOI、优先权指定轮转命令
0 0
0
0
例:MOV AL, 20H
OUT 20H,AL的含义?
http://www.njyangqs.com/
(7)操作命令OCW3
现代微机原理与接口技术(第3版)
特征位:D4D3=01;
P RR RIS
33
功能
1 × ×
读取查询字信息
0
1
0
读取IRR内容
0
1
1
读取ISR内容
0
0
×
不读取任何寄存器内容
MOV
OUT
IN
MOV
OUT
IN
MOV
OUT
IN
应用
AL, 0CH
20H, AL
AL, 20H
AL, 0AH
20H,AL
AL,20H
AL, 0BH
20H,AL
AL,20H
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
查询字格式:
I=0,无中断请求;
I=1,有中断请求。
W2~W0,正在申请中断的若干中断源中优先
级最高的中断源的编码。
34
http://www.njyangqs.com/
特定屏蔽管理:
ESMM SMM
0
×
1
0
1
1
现代微机原理与接口技术(第3版)
功能
该操作对特定屏蔽无效
取消特定屏蔽
设置特定屏蔽
设置方法:
用OCW1屏蔽部分IR[含自己],
用OCW3置SMM即可。
取消方法:
用OCW3取消特定屏蔽,
用OCW1取消被屏蔽的IR。
35
http://www.njyangqs.com/
7.2.3 8259A初始化编程
1.初始化编程步骤
现代微机原理与接口技术(第3版)
out 20h(a0h), al
out 21h(a1h), al
out 21h(a1h), al
out 21h(a1h), al
36
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
2.初始化编程
注意点:
•
•
•
37
不同8259A的I/O端口地址不同;
8259A级联时,每个8259A均必须有完整的
初始化过程[端口地址和部分参数不同而已];
全嵌套方式时,初始IR优先级IR0最高。
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
例:
INTM00 EQU 020H
INTM01 EQU 021H
……
MOV
AL, 00010011B
38
OUT
JMP
MOV
INTM00, AL
SHORT $+2
AL, 00001000B
OUT
JMP
MOV
INTM01, AL
SHORT $+2
AL, 00000001B
OUT
JMP
……
INTM01, AL
SHORT $+2
;8259A端口0
;8259A端口1
;ICW1:边沿触发,要ICW4;
;单片方式,不要ICW3。
;I/O端口延时
;ICW2:设置中断向量,起始的
;中断向量为08H。
;ICW4:非缓冲,全嵌套,非自
;动中断结束(EOI)。
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
思考题:
MOV
OUT
MOV
OUT
MOV
OUT
AL, 12H
20H, AL
AL, 08H
21H, AL
AL, 02H
21H, AL
MOV
OUT
MOV
OUT
MOV
OUT
AL, 13H
20H, AL
AL, 08H
21H, AL
AL, 02H
21H, AL
问:以上左右两段对8259的访问程序中,最
后一句分别是发的什么命令?
39
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
5.2.4 微机中8259A应用(D31:F0)
1.PC机系统板上8259A的连接
IOW#
RD#
15
1
Y0#
IOR# 接8288
A5
A
WR#
14
2
总线控
A6
CS#
B
INTA# 制器
INTA#
3
13
A7
C
INT INTR 接CPU
74LS138 12
5
11
IR[7..0]
G2B#
8259A
A8
4
10
A9
G2A#
接中断源
9
6
DB[7..0]
G1
AEN#
Y# 7
接数据线
7
A0 A0 接地址线
中断控制器8259A的端口地址为20H、21H
40
http://www.njyangqs.com/
2.现代微机中PCH中8259A级联
现代微机原理与接口技术(第3版)
注意:
主、从区分;
IRQ优先级;
请求与响应。
41
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
3. PCH中的中断请求触发方式设置
在PCH中,ICW1的D3位LTIM位无效,中断请求的触发方式由
下面两个寄存器决定。
ELCR1——主控制器边沿/电平触发寄存器(地址4D0H)
7
6
5
4
3
2
1
0
IRQ7 IRQ6 IRQ5
IRQ4
IRQ3
0
0
0
ELCR2——从控制器边沿/电平触发寄存器(地址4D1H)
7
6
5
4
3
2
1
0
IRQ15 IRQ14
0
IRQ12 IRQ11 IRQ10 IRQ9
0
IRQx=0 :IRQx为边沿触发
IRQx=1 :IRQx为电平触发
42
http://www.njyangqs.com/
;对主片8259A的初始化
现代微机原理与接口技术(第3版)
INTM00
EQU 020H
;主8259A端口0
INTM01
EQU 021H
;主8259A端口1
……
MOV AL, 00010001B ;ICW1:边沿触发,要ICW4;级联方式,要ICW3。
OUT INTM00, AL
JMP SHORT $+2
;I/O端口延时
MOV AL, 00001000B ;ICW2:设置主片的中断向量,起始的中断向量为08H
OUT INTM01, AL
JMP SHORT $+2
MOV AL, 00000100B ;ICW3:表示从8259A的INT输出是连接到主片的IR2。
OUT INTM01, AL
JMP SHORT $+2
MOV AL, 00010001B ;ICW4:非总线缓冲,特殊全嵌套,非自动EOI
OUT INTM01, AL
JMP SHORT $+2
MOV AL,00000000B ;ELCR1:全部边沿触发
MOV DX,4D0H
OUT DX,AL
……
43
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
;对从片8259A的初始化
INTS00
EQU 0A0H
;从8259A端口0
INTS01
EQU 0A1H
;从8259A端口1
……
MOV AL, 00010001B ;ICW1边沿触发,要ICW4;级联方式,要ICW3。
OUT INTS00, AL
JMP SHORT $+2
MOVAL, 01110000B ;ICW2:设置从片的中断向量,起始的中断向量为70H
OUT INTS01, AL
JMP SHORT $+2
MOV AL, 00000010B ;ICW3:设置从片的识别标志,指定对应主片的IR2。
OUT INTS01, AL
JMP SHORT $+2
MOV AL, 00000001B ;ICW4:非总线缓冲,全嵌套,非自动中断结束。
OUT INTS01, AL
JMP SHORT $+2
MOV AL,00000000B ;ELCR2:全部边沿触发
MOV DX,4D1H
OUT DX,AL
……
44
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
4. PCH中的中断请求线连接
8259 引脚
主片
0
1
2
3
4
5
6
7
中断向
典型的中断源
量号
8H
内部
9H
键盘
0AH 内部
0BH 串行端口2
0CH 串行端口1
0DH 并行端口/普通
0EH 软磁盘
0FH
被连接的引脚/功能
内部时钟/计数器0的输出
通过SERIRQ来的IRQ1
从控制器的级联引脚
通过SERIRQ来的IRQ3
通过SERIRQ来的IRQ4
通过SERIRQ来的IRQ5
通过SERIRQ来的IRQ6
并行端口/普通 通过SERIRQ来的IRQ7
返回下页
45
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
被连接的引脚/功能
8259 引脚 中断向量号
典型的中断源
从片
内部实时时钟 内部RTC
0
70H
1
71H
普通
通过SERIRQ来的IRQ9
2
72H
普通
通过SERIRQ来的IRQ10
3
73H
普通
通过SERIRQ来的IRQ11
4
74H
PS/2鼠标
通过SERIRQ来的IRQ12
5
75H
内部
基于处理器FERR#的状态机输出
6
76H
基本SATA
从 输 入 信 号来 或 通 过 SERIRQ来
的IRQ14
7
77H
第二SATA
从输入信号来或通过 SERIRQ来
的IRQ15
转上页
46
…
IRQx
SERIRQ
SIO
LPC47B27X
INTR
PCH
IRQ14,15
CPU
返回PCI中断
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
7.3 现代微机中的中断处理
7.3.1 中断响应过程
在当前指令结束后,可屏蔽中断根据EFLAGS寄存器
IF位决定是否响应;其他中断给予响应。
中断响应的步骤如下:
1.保护断点
通过堆栈及相关硬件实现EFLAGS、CS、EIP的保护。
并清除IF和TF。
压栈的顺序是EFLAGS、CS、EIP
2.取得中断向量号
对可屏蔽中断通过中断响应周期取得中断向量号。
其他中断直接取得入口地址,无须第2步
47
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
3.取得中断服务程序入口地址
对向量中断,通过中断向量号查中断向量表或中断描
述符表取得中断服务程序的入口地址。
4.转入中断处理程序
从中断处理程序入口地址转到中断处理程序。执行对
中断的处理。
5.返回断点
恢复断点(EIP、CS、EFLAG顺序出栈)继续执行主
程序。
48
http://www.njyangqs.com/
7.3.2 现代微机中断控制
现代微机原理与接口技术(第3版)
PCH
内部逻辑
PCI INTA
北桥
中断向量号
从8259A 主8259A
CPU
两个 INTA#
总
线
INTA#
INTR
CPU
49
IRQ
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
在上面的过程中有几点注意:
• 一个或多个IRQ到来的时候,置中断请求寄存器IRR
的相应位 。如果中断没有被屏蔽,才可以发INTR。
• PCH内部产生两个周期INTA#后,第一个INTA#脉冲
,有最高优先级的ISR的相应位被置上,而IRR的相
应位被复位。第一个脉冲的下降沿,主中断控制器利
用内部3根专用线CAS向从中断控制器发送从片识别
码。第二个INTA#脉冲后,主或从识别码选中的从可
编程中断控制器返回中断向量号。
• 结束中断响应周期时,如果在自动中断结束(AEOI
)模式下,则中断服务寄存器(ISR)的相应位在第
二个INTA#脉冲的末尾被复位,否则ISR相应位保持
置位直到中断处理程序末尾发出EOI命令。
50
http://www.njyangqs.com/
7.3.3 中断识别及其优先级
现代微机原理与接口技术(第3版)
1.中断识别
只有外部硬件中断需要进行识别,其余不需要识别。
中断识别由中断控制器完成。
2.中断优先级
原则:按机器故障、DMA、外围硬件、软件递减。
结果:异常>DMA>外围硬件>BIOS>DOS>自由。
即基本按中断向量表排序。
外围硬件一般可由用户修改其优先权。
51
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
52
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
7.3.4 中断向量表和实地址模式下中断处理程序的编写
一、 PC机中断向量表(IVT,用于实地址模式)
1) 中断向量表
按中断向量号顺序存放中断向量的存储区域。
每个中断向量占4字节。
对8088/8086固定在内存0000 : 0000开始的1KB范围内。
对IA-32处理器中断向量表的基地址和界限值放在
IDTR寄存器中,并可用LIDT指令修改它们,为了兼
容,实地址模式基地址还是0,界限还是为3FFH
2) 中断向量指针
指向存放中断向量地址第一字节的指针。
中断向量指针=中断向量号×4。
软件中断中自由中断的中断向量需用户自己装入。
53
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
IA-32的中断向量表在存储区的最低1KB字节中,对
应256种中断,每个中断向量占4个字节
类型0的
向量指针 00000 类型0的IP
类型0的CS
类型1的 00004 类型1的IP
向量指针
类型1的CS
类型N的 4*N
向量指
针
54
类型N的IP
类型N的CS
类型0的中断向量
类型1的中断向量
类型N的中断向量
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
二、 实模式下中断程序编写
1. 中断编程注意点
中断编程包括主程序部分和中断处理程序部分。
1)使用正确的中断向量号
根据中断处理程序要完成的功能,选择好正确的中
断向量号,如:COM1串行通信用0CH号中断,
Ctrl+Break键控制中断号是1BH,注意定时器中断一
般不使用08H号,而使用更安全的1CH号中断。
如果是自己定义的软中断,注意不要和系统中断向
量号相重合。
55
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
2)中断服务程序入口地址的正确设置(主程序中完成)
有两种设置中断服务程序入口地址(中断向量)的方法:
1)直接写中断向量表(假设中断向量是0CH)
CLI
; 关中断
MOV AX, 0
MOV ES, AX
; ES指向0000H段(中断向量表的段)
MOV SI, 0CH*4 ; 一个中断向量4个字节
MOV AX, OFFSET SERVICE ; 中断入口偏移地址
MOV ES:[SI], AX
MOV AX, SEG SERVICE
; 中断入口的段地址
MOV ES:[SI+2], AX
2)使用DOS功能调用中断
STI ; 开中断
MOV AX, SEG SERVICE
……
MOV DS,AX
; 中断处理子程序
MOV DX,OFFSET SERVICE
SERVICE PROC FAR
MOV AX,250CH
……
INT 21H
56
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
3)适当地保护现场
由于中断随时到来,所以中断处理程序中一定要保护
好需要使用的寄存器。如果使用的寄存器多,可以保
护所有寄存器,如果寄存器用的不多,可只将要用的
寄存器压栈。
4)避免非软件中断中断处理程序中DOS重入
DOS的重入容易引起系统瘫痪,所以在中断处理程序
中要避免调用DOS功能调用,如果是对外设或屏幕的
操作,改用BIOS中断,如果是文件操作,要到中断处
理程序外的主程序中完成。
5)中断程序执行时间的正确估计
中断处理程序执行时间要小于中断到来的周期或最短
间隔时间,中断处理程序里不要出现死循环、需要人
工干预的人机交互和时间很长的循环语句。
57
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
6)中断的打开与关闭
中断响应的时候系统会自动将IF清0,如果希望中断
能有限嵌套(高级与本级中断能嵌套)则在现场保护
后,用STI指令将中断屏蔽打开。
7)中断结束处理及返回
a) 如果现场保护后,执行过STI,这恢复现场前要执
行CLI关闭中断。
b) 如果是外部硬件中断,非自动结束模式下,恢复
现场前应该发中断结束命令(EOI)。
MOV AL, 20H
OUT 20H, AL ; 向主8259发EOI
OUT 0A0H, AL ; 向从8259发EOI
c) 恢复现场,使用和保护现场压栈顺序的逆序将寄存
器的值弹出
d) 使用IRET中断返回指令返回
58
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
2. 中断处理程序举例(假设中断向量号是0CH)
59
; 主程序的相关部分
……
OLD0C DD ?
……
.CODE
……
MOV AX, 350CH
; 保存原来的0CH中断向量
INT
21H
MOV WORD PTR OLD0C,BX
MOV WORD PTR OLD0C+2,ES
MOV AX, SEG SERVICE ; 写入新的0CH中断向量
MOV DS,AX
MOV DX,OFFSET SERVICE
MOV AX,250CH
INT
21H
……
; 其它程序段
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
60
; 中断处理子程序
SERVICE PROC FAR
PUSHA
; 保护现场
PUSH DS
STI
; 打开中断
……
; 中断处理程序主体
……
CLI
; 关闭中断
MOV AL, 20H
OUT 20H, AL ; 发中断结束命令
POP DS
; 恢复现场
POPA
IRET
SERVICE
ENDP
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
7.3.5 保护模式下中断与异常的处理
1.中断描述符表(IDT)
表项长度:8字节,每个表项对应一个中断向量号。
表项类型:任务门、中断门、陷阱门。
61
通过特征位(b40~b44)区分不同类型。
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
表的位置:由中断描述符表寄存器(IDTR)指向。
表的长度:8字节×256=2KB。
2.中断描述符指针
指向中断描述符表中的中断描述符的指针。
中断描述符指针=IDT基地址+中断向量号×8。
3.中断门/陷阱门
内容:段选择符、属性和偏移量。
中断门与陷阱门区别:
通过中断门处理时EFLAG的IF被清0,通过陷阱门
处理IF不清0。
中断门的优先级比陷阱门高,是面向外部硬件中断
的门,后者面向优先级低的中断。
62
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
中断服务子程序入口地址取得:
中断向量号
7
0
IDTR
×8
中断描述符
IDT
CS段描述符缓冲器
GDT/LDT
段描 段基地址 代码段
述符
CS
偏
选择符
基地址
移
属性
属性
EIP 中断服务
偏移
边界
子程序
中断门/
陷阱门
线性地址
段描述符
63
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
4.任务门
内容:TSS选择符与属性。
TSS取得:
中断向量号
7
0
IDT
IDTR
×8
TR描述符缓存器
GDT
任务
门
TSS
选择符
TSS描
述符
TR
基址
段限
属性
基址
TSS
线性地址
优点:中断任务和被中断任务完全隔离。
缺点:中断响应过程耗时长。
64
http://www.njyangqs.com/
7.4 PCI中断
现代微机原理与接口技术(第3版)
7.4.1 PCI中断请求
PCI中断线:INTA#、INTB#、INTC#、INTD#。
PCI中断源:PIRQA#~PIRQD#。
PCI中断源连接:通过映射到ISA(8259)中断(3~7,
9~12,14~15)来实现。
特点:
当PCI中断被映射到一个ISA的IRQ后,该IRQ不可
再被ISA设备(通过SERIRQ的中断)使用。
PCI中断可与低电平有效的非ISA中断共享同一IRQ。
转中断请求线
65
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
实现:
设备31的0号功能的60H~63H、68H~6BH的PIRQ路由
控制寄存器实现PIRQA#~PIRQH#与IRQ的映射关系。
PIRQ#路由控制寄存器[8bit]存放的是IRQ编码。
60H~63H
IR0
PIRQA#
3
8259A
PIRQB#
5
IR3
PIRQC#
7
PIRQD#
3
IR5
PCI中断请求:
IR7
PCI中断请求必须为低电平触发方式。
多个PIRQ#信号线能连在同一个IRQ上。
不同PIRQ#的优先级由IRQ决定。
同一PIRQ#不同设备INT#的优先级由安装次序决定。
66
http://www.njyangqs.com/
7.4.2 PCI中断响应周期
现代微机原理与接口技术(第3版)
• PCI中断响应为单周期响应。
• HOST-PCI桥自动将双中断响应周期转换成单中断响
应周期。
• 其他中断响应过程与8259A同,中断向量号通过
HOST-PCI桥再返回给处理器。
• 中断响应周期中可插入等待周期。
• 中断服务程序入口地址由中断描述符表或中断向量表
管理。
67
http://www.njyangqs.com/
现代微机原理与接口技术(第3版)
CLK
1
2
3
4
5
FRAME#
AD
无效
向量
C/BE#
0000
BE#s(1110)
IRDY#
TRDY#
DEVSEL #
PCI中断响应周期
地址期没有地址,隐含的目标设备是系统中断控制器。一般它
负责驱动DEVSEL#,也可由PCI-ISA桥进行负向译码。
68
http://www.njyangqs.com/
7.4.3 PCI中断共享
现代微机原理与接口技术(第3版)
• PCI中断请求信号为漏极开路的。
• 同一PIRQ#不同设备的优先级最后安装的最高。
即:中断向量表中中断向量为同一PIRQ#中最后安
装的设备的中断服务程序入口地址。
• PCI中断的状态位通过中断服务程序读取,并处理。
同一PIRQ#中断服务实现方法:
采用链表式处理方法。
方法:PNP配置时将同一PIRQ#的原中断向量存放到
其设备驱动的特定寄存器后才替换为新的中断向量。
中断向量
(描述符)
中断处
理程序
设备2
中断处
理程序 ^
设备1
PIRQA#
69
http://www.njyangqs.com/
补充作业练习
看下图完成以下题目:
15
1
Y0#
A5
A
14
2
A6
B
3
13
A7
C
12
74LS138
A8 ≥1 5
11
G2B#
A9
10
A3
A4 ≥1 4 G2A#
9
A2
7
6
Y7#
G1
AEN#
现代微机原理与接口技术(第3版)
RD#
WR#
INTA#
INT
8259A
IOW#
IOR#
INTA#
INTR
IR5
接信号源
DB[7..0]
CS#
A0 A0
希望该8259采用电平触发,起始中断向量号是16,总线缓冲方式
,全嵌套,非自动EOI。现在要求当IR5中断到来的时候,将变量
COME+1,当COME=100时,程序退出(注意中断向量要恢复)
。要求编写与中断相关的程序和中断处理程序。
70
http://www.njyangqs.com/