第7章 中断方式

  • 格式:doc
  • 大小:259.50 KB
  • 文档页数:10

7-1 第七章 中断技术

基本内容: 中断常用的概念如:中断、断点、断点保护、中断返回、中断服务程序、保护现场;中断的用途;中断源及分类;中断的一般过程;中断源识别;中断优先权的确定。

基本要求:理解中断的概念、分类;掌握中断的处理过程,会编写中断服务程序;掌握中断的优先权排队方法;了解中断嵌套的概念。

重点内容: 中断的一般过程;中断源识别;现场保护;中断向量表与中断类型号关系。

难点内容: 中断优先权的确定、现场保护。

第一节 中断的基础知识

一、 中断的概念

1. 什么是中断

所谓中断,是指处理器在执行正常程序过程中,当出现某些异常情况或某个外部设备请求时,处理器暂时中止正在执行的程序,转而去执行其特定的服务程序,并在执行完服务程序后返回原来被中止的程序处继续执行的过程。

中断最初用于解决高速CPU与低速外设之间的速度矛盾。目前己经广泛地应用在分时操作、实时处理、人机交互、多机系统等方面。

2. 什么是断点

所谓断点,就是指响应中断时,主程序中当前指令下面的一条指令地址,包括代码段寄存器CS和指令指针寄存器IP的值。只有保存了断点,才能在中断处理子程序完成以后,正确返回到主程序继续执行。

3. 中断返回 (举例说明)

使CPU返回到中断前的程序,并从断点处继续执行。

4. 中断服务程序

一般地,每一个中断源都有其相应的服务程序,即中断程序。当CPU识别中断源后,就会取得其中断程序的入口地址,并转入该中断程序,进行相应的中断服务。中断服务是整个中断处理的核心。

5. 中断现场和中断保护

状态寄存器状态(硬件保存)、内部寄存器内容(程序保存) 原程序CPU响应中断中断返回中断请求中断处理程序 7-2 当CPU响应某个中断时,就会转到相应中断源的服务程序上。为了使CPU在完成中断服务后能返回原程序继续执行,需要将原程序被中断处的相关信息保存到堆栈中。

对8086/8088 CPU,断点处的IP、CS和标志寄存器内容由硬件进行自动保护,其他信息的保护则由中断服务程序来完成。

二、 中断源及分类

引起中断的外部设备或内部原因,

称为中断源。

种类:

(1)一般的输入/输出设备;

(2)实时时钟;

(3)故障源;

(4)软件中断。

不可屏蔽中断:不能用软件来控制是否允许中断的一种外部中断。

常见NMI中断有:(1)电源掉电; (2)存储器检验出错; (3)总线奇偶错有 无 当前指令执行完毕

有中断请求否?

关中断

保护现场和断点

开中断

中断服务

关中断

恢复现场

开中断 取下一条指令

返回

图1 微机系统的中断处理过程 7-3 等。

可屏蔽中断:可用软件控制是否允许中断的外部中断。即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、中断响应

中断响应过程:把从接到中断请求到中断处理之前,即从请求有效到转中断服务程序入口地址这一段时间。 7-4 对不可屏蔽中断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已在进入前完成保护;对于其他寄存器等的保护,与子程序一样可适当入栈保护。 7-5 (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。 7-6

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指令后:

CS = 4030 H IP= 2010H

PSW= 0041 H