第七章 中断技术
基本内容: 中断常用的概念如:中断、断点、断点保护、中断返回、中断服务程序、保
护现场;中断的用途;中断源及分类;中断的一般过程;中断源识别;中断优先权的确定。
基本要求:理解中断的概念、分类;掌握中断的处理过程,会编写中断服务程序;掌握
中断的优先权排队方法;了解中断嵌套的概念。
重点内容: 中断的一般过程;中断源识别;现场保护;中断向量表与中断类型号关系。 难点内容: 中断优先权的确定、现场保护。
第一节 中断的基础知识 一、 中断的概念
1. 什么是中断
所谓中断,是指处理器在执行正常程序过程中,当出现某些异常情况或某个外部设备请求时,处理器暂时中止正在执行的程序,转而去执行其特定的服务程序,并在执行完服务程序后返回原来被中止的程序处继续执行的过程。
中断最初用于解决高速CPU 与低速外设之间的速度矛盾。目前己经广泛地应用在分时操作、实时处理、人机交互、多机系统等方面。
2. 什么是断点
所谓断点,就是指响应中断时,主程序中当前指令下面的一条指令地址,包括代码段寄存器CS 和指令指针寄存器IP 的值。只有保存了断点,才能在中断处理子程序完成以后,正确返回到主程序继续执行。
3. 中断返回 (举例说明) 使CPU 返回到中断前的程序,并从断点处继续执行。
4. 中断服务程序
一般地,每一个中断源都有其相应的服务程序,即中断程序。当CPU 识别中断源后,就会取得其中断程序的入口地址,并转入该中断程序,进行相应的中断服务。中断服务是整个中断处理的核心。
5. 中断现场和中断保护
状态寄存器状态(硬件保存)、内部寄存器内容(程序保存)
原程序
中断请求
中断处理程序
当CPU 响应某个中断时,就会转到相应中断源的服务程序上。为了使CPU 在完成中断服务后能返回原程序继续执行,需要将原程序被中断处的相关信息保存到堆栈中。
对8086/8088 CPU ,断点处的IP 、CS 和标志寄存器内容由硬件进行自动保护,其他信息的保护则由中断服务程序来完成。
二、 中断源及分类
引起中断的外部设备或内部原因,称为中断源。 种类:
(1)一般的输入/输出设备; (2)实时时钟; (3)故障源;
(4)软件中断。
不可屏蔽中断:不能用软件来控制是否允许中断的一种外部中断。
常见NMI 中断有:(1)电源掉电; (2)存储器检验出错; (3)总线奇偶错
图1 微机系统的中断处理过程
等。
可屏蔽中断:可用软件控制是否允许中断的外部中断。即STI使IF=1,允许中断;CLI使IF=0,禁止中断。
常见INTR中断有:所有外部设备中断如键盘、鼠标、打印机、显示器、声卡、CD-ROM 等。
软件中断的特点:
①用一条指令进入中断处理子程序,并且,中断类型码由指令提供。
②不执行中断响应总线周期,也不从数据总线读取中断类型码。
③不受中断允许标志IF的影响
④执行过程中可响应外部硬件中断
⑤软件中断没有随机性
三、中断的一般过程
有些书上把中断处理细分为七个过程:1) 中断请求; 2) 中断响应; 3) 断点保护;
4) 中断源识别;5) 中断服务;6) 断点恢复;7) 中断返回。
此处简化为5个过程:中断请求、中断判优、中断响应、中断服务、中断返回。
1、中断请求
含义:中断源发出中断请求信号。
中断源→CPU,由外设、指令执行引起(包括中断指令或执行结果引起)
对外部中断源,这个信号加至CPU的中断请求输入引脚,形成对CPU的中断请求;
对内部中断源,则通过CPU内部特定事件的发生或特定指令的执行作为对CPU
的中断请求。
?外部中断源主要有:
(1) I/O设备,如键盘、显示器、打印机等。
(2) 数据通道,如软、硬磁盘,磁带等。
(3) 实时钟,如外部所需的定时电路等。
(4) 故障源,如掉电、存储器奇偶校错等。
?内部中断源主要包括:
(1) CPU指令产生异常,如被0除、溢出、单步等。
(2) 程序执行INT软件中断指令,如INT 19H等。
2、中断判优
由于中断是随机的,可能同时出现多个中断源同时请求中断,这时必须对申请中断的中断源进行优先级判别,这一阶段称为中断判优。
IBM-PC规定的中断优先级的次序是:
内部异常中断(除单步外)> INT n > NMI > INTR > 单步中断
3、中断响应
中断响应过程:把从接到中断请求到中断处理之前,即从请求有效到转中断服务程序入口地址这一段时间。
对不可屏蔽中断NMI响应,CPU执行完当前工作指令后,做好保护工作后进入。
对可屏蔽中断响应,
对INTR响应,要满足三个条件:
(1)无总线请求;
(2)CPU允许中断(IF=1);
(3)CPU执行完当前指令。
可屏蔽中断的响应过程:
(1) 处理器接到中断申请,处理完当前指令即进入响应周期。
(2) 第二阶段即中断响应周期,在其间CPU向外部中断控制器发送两个响应脉冲信号INTA。
第一个响应脉冲通知中断控制器,已经响应外部中断请求,让中断控制器提供中断类型号。第二个响应脉冲,CPU取走中断类型号。
前两个可理解为读取中断类型码
(3) 将标志寄存器中的内容压入堆栈保护,然后清IF和TF标志,以禁止INTR引脚以及陷阱和单步中断。
(4) 将断点地址压入堆栈(CS:IP或CS:EIP)。
断点地址:指中断时CPU待执行的下一条指令对应的逻辑地址。
顺序:先压入断点地址的CS,后压入偏移地址EIP(或IP)。
(5)通过中断类型号n与中断服务程序入口地址的关系找出该类型对应的段基地址和偏移地址,从而转入中断服务程序入口地址。完成中断响应任务。
对以上各中断响应时先完成三任务:
①标志寄存器PSW入栈
②关闭中断,令IF和TF=0
③CS、IP入栈(断点保护)
④取得中断入口地址,进入中断程序
(SP)←(SP)-2
((SP)+1,(SP))←(PSW)
(SP)←(SP)-2
((SP)+1,(SP))←(CS)
(SP)←(SP)-2
((SP)+1,(SP))←(IP)
(IP)←(TYPE*4)
(CS)←(TYPE*4+2)
3、中断服务
一般地,每一个中断源都有其相应的服务程序,即中断程序。当CPU识别中断源后,就会取得其中断程序的入口地址,并转入该中断程序,进行相应的中断服务。中断服务是整个中断处理的核心。
(1)保护现场。
保护现场实质:将重要信息压入堆栈。
PSW、CS、IP已在进入前完成保护;对于其他寄存器等的保护,与子程序一样可适当入栈保护。
(2)开中断STI
进入中断服务前,已令IF=0,此时不会响应其它中断,若需要重新令IF=1
目的:开放所有可屏蔽中断,以允许高级中断嵌套。
(3)执行中断服务功能
中断服务程序主体——中断的目的。
(4)关中断
目的:关中断以确保可靠有效地恢复现场。
(5)恢复现场
恢复现实质:将原来压入堆栈中的内容弹出来。
POP 寄存器
4、中断返回
使CPU返回到中断前的程序,并从断点处继续执行。
中断服务程序的最后一条指令都无一例外地使用中断返回指令(如IRET或IRETD)。
中断返回的目的:使原来在中断响应过程中的断点地址和标志寄存器中的内容,依次从堆栈中弹出,以便继续执行原来的程序。
恢复断点地址及PSW
(IP)←((SP)+1,(SP))
(SP)←(SP)+2
(CS)←((SP)+1,(SP))
(SP)←(SP)+2
(PSW)←((SP)+1,(SP))
(SP)←(SP)+2
四、中断向量表与中断向量
8086采用矢量型的中断结构,共有256个中断矢量号,又称中断类型号,编号从0~255。
中断向量——每一个中断服务程序有一个确定的入口地址,该地址称为中断向量。
中断矢量表是中断矢量号与它相应的中断服务程序的转换表。8086以中断矢量为索引号,从中断矢量表中取得中断服务程序的入口地址。
存放256个中断向量的内存区域。即存放中断服务程序入口地址的内存区域称为中断向量表。
中断向量表大小:1KB
中断向量表地址范围:00000H~003FFH。
CPU响应中断时,只要知道类型号即可响应对应中断。
例:产生NMI中断,则类型号为2,2*4=8 即从0008H开始取出中断服务程序的地址进行执行。
8086/8088 CPU把存储器的0000~03FFH共1024个单元作为中断矢量的存储区,每个中断矢量占用4个存储单元。4个单元中的前两个单元存放中断服务程序所在段的段内偏移量,偏移量为16位地址,低8位地址存放在存储器的低地址单元;高8位地址存放在存储器的高地址单元;后两个单元存放中断服务程序所在段的16位段地址。如下:中断矢量表分为三部分:
(1)专用中断:类型0~类型4,共有5种类型。专用中断的中断服务程序的入口地址由系统负责装入,用户不能随意修改。
(2)备用中断:类型5~类型3FH,这是Intel公司为软、硬件开发保留的中断类型,一般不允许用户改作其他用途。
(3)用户中断:类型40H~类型FFH,为用户可用中断,其中断服务程序的入口地址由用户程序负责装入。
例,已知SP=1800H,FLAG寄存器的内容PSW=0241H,中断服务处理程序的入口地址表如下所示;当前地址CS=1000H, IP=0280H处有一条双字节指令INT 7H,当CPU 执行该指令后,填写以下寄存器的内容和栈顶相关单元的偏移地址和内容。
中断服务程序入口地址表
执行INT 7H指令后:
分析:中断过程:
(1) 将中断类型号乘4,并将其作为中断向量表的指针,使其指向中断处理程序的入口地址。
(2) 保存CPU 状态,即把标志寄存器的内容入栈。 (3) 清除IF 和TF 的状态标志位,屏蔽新的INTR 和单步中断。(此处TF 已经为0了) (4) 保存断点,即把CS 和IP 内容入栈。
(5) 从中断向量表中获取CS 、IP ,转入中断处理子程序入口地址 (6) 将CPU 内部各寄存器的内容入栈,开中断(允许中断嵌套),然后执行中断处理子程序,进行中断服务。当中断处理程序结束时,恢复被保存寄存器的内容,最后执行中断返回指令IRET 。IRET 指令将从堆栈中弹出IP 、CS 和标志寄存器的内容,此时,CPU 结束中断处理子程序的运行,返回到被中断的主程序断点处继续执行。
六、 用户中断服务程序的设计 (内部中断)
①用户定义的软中断由程序中安排的 INT n 指令调用
②确定中断类型号 n ,n 原则上只能在系统预留给用户的类型号中选择。
③向中断向量表中设置对应的的中断向量 (即将中断服务程序的入口地址置入中断类型 n 所对应的中断向量表中)
注:IBM-PC/XT 机是在计算机启动过程中将中断向量表写入内存。
用户自行设计中断接口时,需要在初始化完成后,人为设置中断向量表,以使设
计的中断向量与相应的中断处理程序建立连接。这样,当CPU 响应这些中断源的中断请求时,便能根据中断向量找到相应的处理程序,进行相应的中断服务。
设置中断向量的方法:
① 用指令进行中断向量设置
② 利用DOS 功能调用(AH=25H)进行中断向量设置
40H
0001FH 80H 0002BH 70H 0002AH 60H 00029H 50H 00028H …… …
30H
0001EH 20H
0001DH 10H 0001CH 内容 物理地址 02 17 FF H 41 10 00
02
80 17 FA H 内容 偏移地址 栈顶相关单元 (在堆栈中)
①用指令进行中断向量设置的方法
例,设中断源对应的中断处理程序首地址标号为PROG0,若对应的中断向量为F8H,则中断向量的设置程序如下:
MOV SI,3E0H ;中断向量(F8H)对应的内存地址“4*F8”
MOV AX,OFFSET PROG0 ;取得对应中断处理程序的偏移地址
MOV [SI],AX ;偏移地址写入中断向量表中“4*F8”地址处
MOV AX,SEG PROG0 ;取得对应中断处理程序的段地址
MOV [SI+2],AX ;段地址写入中断向量表中“4*F8+2”地址处
②利用DOS功能调用(AH=25H)进行中断向量设置
功能号: (AH) = 25H。
入口参数: (AL) = 中断类型号
(DS) = 中断服务程序入口地址的段地址
(DX) = 中断服务程序入口地址的偏移地址
功能:把由AL中指定中断类型号的中断向量(DS:DX),放置在中断向量表中。
例,编程将AX中的16位有符号数 (例 -100 ) 取绝对值,然后存入6000:0000H
单元中。要求运用 INT 60H 软调用,中断服务程序的功能是:将AX中的16位有符号数取绝对值后仍放在AX中。
ABS_P PROC
AND AX, AX ; AX内容无变化,清CF、OF位
JNS L1 ;判是否为负数
NEG AX ;若为负数取绝对值后仍放在AX中
L1: IRET ;返回
ABS_P ENDP
CODE SEGMENT
ASSUME CS:CODE
ABS_P PROC
AND AX, AX ;
JNS L1 ;
NEG AX ;
L1: IRET ;
ABS_P ENDP
START: MOV AX, CODE
MOV DS, AX ;中断服务程序入口地址的段地址送入 DS
LEA DX, ABS_P ;中断服务程序入口地址的偏移地址送入 DX MOV AL, 60H ;中断类型号 60H 送入 AL
MOV AH, 25H
INT 21H ;把中断向量(DS:DX) 放置在中断向量表中 MOV AX, 6000H
MOV DS, AX
MOV SI, 0
MOV AX, -100
INT 60H
MOV [SI], AX
MOV AH, 4CH
INT 21H
CODE ENDS
END START
第二节中断优先权的确定
中断优先权,多中断项同时产生中断请求时,CPU对中断响应的优先次序。
若一个系统有多个外设同时向CPU申请中断,CPU该响应那一个呢?这就涉及到中断优先权问题,常用以下几种方法
一、软件查询方式
采用软件查询中断方式时,中断优先权由查询顺序决定,先查询的中断源具有最高的优先权。(调整查询顺序即可改变优先权)
图2 软件查询方法的接口电路
优点:电路简单。软件查询的顺序就是中断优先权的顺序,不需要专门的优先权排队电路,可以直接修改软件查询顺序来修改中断优先权,不必更改硬件。
缺点:当中断源个数较多时,由逐位检测查询到转入相应的中断服务程序所耗费的时间较长,中断响应速度慢,服务效率低。
二、简单硬件方式――菊花链法
菊花链法是解决中断优先级的一个简单硬件方法。其做法是在每个外设对应的接口上
连接一个逻辑电路,这些逻辑电路构成一个链,称为菊花链。由菊花链来控制中断回答信号的通路。电路如书上119页图4.3所示。
该电路必须具备以下基本功能:
(1) 当有两个以上中断源申请中断时,能响应最高级的,屏蔽低级的。
(2) 当响应较低级中断时,若有更高级的中断,可以暂停低级中断服务,高级的中断申请立刻得到响应。
三、专用硬件方式
专用硬件法是利用专用芯片,该芯片可允许多个中断源申请中断;可以用接收软件指令的方法对某些中断源执行屏蔽;也可以用接收软件指令的方法给多个中断源排出优先级。这种芯片称为可编程中断控制器。在8086系统中,解决中断优先级管理的办法是采用可编程中断控制器8259A。8259是可编程控制器,有8级中断优先权控制,可提供向量中断,最多提供64级优先权控制。(略)