您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第6章 微机的中断系统 > 【6.2 80x86的中断系统】

6.2 80x86的中断系统

 

6.2  80x86的中断系统

80868位二进制表示一个中断类型,因此可以有256个不同的中断。这些中断又可以划分为内部中断、不可屏蔽中断、可屏蔽中断3类,如图6-5所示。

6-5  8086中断结构

8086有两根外部中断请求输入引脚,不可屏蔽中断请求信号通过NMI引脚输入,可屏蔽中断请求信号通过INTR引脚输入。所有的可屏蔽中断源共用一条INTR线,由可编程的中断控制器Intel 8259A统一管理。

8086 CPU规定了各类中断的优先级,最高级为除法出错中断INT 0,然后依次是溢出中断INTOINT n指令、不可屏蔽中断NMI、可屏蔽中断INTR,单步中断的优先级最低。

6.2.1  内部中断

内部中断是由于执行INT nINTO等指令,或是由于除法出错,或是进行单步操作而引起的中断。8086 CPU的内部中断有5种类型。

1)除法出错中断。

在执行DIV(无符号数除法)或IDIV(有符号数除法)指令时,若发现除数为0或商超过寄存器所能表达的范围,8086 CPU立即执行中断类型为0的内部中断。

2)单步中断。

8086标志寄存器中有一个自陷标志位TF,若TF=1,则CPU每执行完一条指令就引起一个中断类型为1的内部中断。它用于实现单步操作,是一种强有力的调试手段。

3)断点中断。

指令INT 3产生一个中断类型为3的内部中断,称为断点中断。在程序调试过程中需要跟踪程序走向、了解程序执行过程的中间结果时,可以用INT 3指令临时替换原有的指令,称为设置断点。程序执行到断点处,会因执行INT 3指令进入类型3的中断服务程序,于是,原程序被暂停执行。此时可以读出程序的执行环境(指令地址、寄存器值、变量值等),供程序员调试使用。最后恢复原来的指令,继续执行被调试的程序。

4INTO指令。

8086标志寄存器中有一个溢出标志位OF,若前面指令的执行结果使OF=1,则INTO指令引起中断类型码为4的内部中断;否则此指令不起作用,程序顺序执行下一条指令。

5INT n指令。

用户可以用INT n指令产生一个中断,n为中断类型码。

6.2.2  外部中断

外部中断分为可屏蔽中断和不可屏蔽中断。

1.可屏蔽中断

INTR上引入的可屏蔽中断受标志寄存器中的中断允许标志位IF控制。IF=0时,CPU不响应INTR的中断请求,IF=1时,CPU响应INTR的中断请求。可以用STI指令使IF=1,称为开中断;用CLI指令使IF=0,称为关中断。

系统复位后,或CPU响应了任何一种中断(内部中断、NMIINTR)后,都会使IF=0。因此,一般情况下应使用STI指令使IF=1,确保中断开放。

8086的可屏蔽中断源由8259A统一管理,每片8259A可以接受8个外部设备的中断请求。外部设备将中断请求信号送到8259A的输入端,8259A根据屏蔽状态决定是否给8086INTR端发出信号。8086响应中断请求后给8259A发出信号,8259A利用此信号将中断优先级别最高的中断类型码送给8086INTR中断的类型码可以是5255

2.不可屏蔽中断

NMI接收上升沿触发的中断请求信号,只要输入脉冲有效宽度(高电平有效时间)大于两个时钟周期就能被8086锁存。CPUNMI中断请求的响应不受中断允许标志位IF控制。不管IF的状态如何,只要NMI信号有效,8086现行指令执行结束,没有DMA请求都会立即响应NMI中断请求。NMI中断类型码固定为2

6.2.3  中断向量

8088的中断系统能够处理256个不同的中断源,每个中断源都有一个为它服务的中断处理子程序。CPU响应中断后转入中断服务子程序。那么,CPU是如何转入中断服务子程序?其入口地址如何找到?下面将逐一介绍。首先介绍几个概念。

1)中断类型号:为每个中断源指定的一个8位的编号,以识别不同的中断源,这8位的编号称为中断类型号。

2)中断向量:每一个中断服务程序的入口地址称为中断向量。

3)中断向量表:把系统中所有的中断向量集中起来,根据中断类型号从小到大的顺序存放到存储器的某一个区域内,这个存放中断向量的存储区称为中断向量表。在实模式下,中断向量表位于内存的第一个1KB空间。

8088 CPU以存储器的00000H003FFH1024个单元作为中断向量的存储区,每个中断向量占用4个存储单元。4个单元中的前两个单元存放中断服务程序的偏移地址,后两个单元存放中断服务程序的段地址。当CPU响应中断时,16位的段内偏移量装入IP16位的段地址装入CS,从而使CPU转入中断服务程序的执行。

CPU响应中断后,如何从中断向量表中找到该中断服务程序的中断向量呢?它是通过中断类型号×4得到中断向量CSIP在中断向量表中的首地址。中断类型号和中断向量所在的位置关系如表6-1所示。

6-1  8088中断向量表

中断类型号

   

   

中断名称

0

类型0IP

00000H

除法出错

类型0CS

1

类型1IP

00004H

单步跟踪

类型1CS

2

类型2IP

00008H

不可屏蔽中断

类型2CS

3

类型3IP

0000CH

断点中断

类型3CS

4

类型4IP

00010H

溢出中断

类型4CS

5

类型5IP

000014H

 

类型5CS

文本框: …

文本框: …

 

文本框: …

文本框: …

N

类型NIP

4×NH

INT指令中断和可屏蔽中断

类型NCS

文本框: …

文本框: …

 

文本框: …

文本框: …

255

类型255IP

003FCH

 

类型255CS

003FEH

其中,类型号04系统已经占用,不允许用户进行任何修改。类型号05H3FH是系统备用中断,这是Intel公司为软硬件开发保留的中断类型号,一般也是不允许用户改进行其他用途。类型号40HFFH可供用户使用。