当前位置:文档之家› 微机原理与接口技术 第八章 中断系统

微机原理与接口技术 第八章 中断系统

中断判优 (判别中断源的优先级)
若符合中断条件和优先权,CPU接受中断 请求,进入中断响应阶段
中断过程
中断响应
① 保存断点地址(一般采用堆栈,有的采用寄存器) ② 利用中断向量表将指令指针指向中断服务程序入口 在中断响应里,要完成断点保存、标志寄存器保存、
关中断等,部分操作由CPU自动完成,用户也需要 完成一些操作。
中断源的优先级是默认确定的 对于用户和开发人员,需要确定和处理实际
外中断源的优先级。
中断优先级排队
软件查询实现
优点是接口简单、编程简单、应用面广 缺点是不够灵活
中断优先级排队
中断服务程序首先读入锁存器的内容,然后对于读入的内容从D7(对 应高优先级)到D0(对应低优先级)进行查询。如果查到某一位是高 电平(有申请)就跳转到相应的服务程序进行处理。处理完毕后返回 来继续查询,直到查询完毕,退出服务程序。相应的程序段如下:
数为0,或者商的值超过了寄存器可以
存放的范围就自动启动
1
单步中断

通过TF=1来启动,用于调试程序
2
非屏蔽中断

保留给外部的非屏蔽中断请求。所有
非屏蔽中断源都触发一个中断服务程序,
需要通过查询方式来分别处理
3
断点中断
INT 3
单字节指令,程序执行到断点处会
停下,显示所有寄存器的值。也可进行
其他调试。
中断服务
执行中断服务程序
中断返回
返回到正常程序的断点
8.2 8086中断系统
8086的中断源
256个不同的中断,中断类型号的取值是00H~FFH 中断分为软中断和硬中断,硬中断又分为非屏蔽中
断和可屏蔽中断 非屏蔽中断的请求从NMI引脚输入。可屏蔽中断的
请求从INTR引脚输入 软中断是通过指令 INT n
8086CPU按默认的中断优先级查询,但多个INTR中断同时 申请的排队问题由中断接口电路来解决。
8086获取了中断类型号以后,进行 :
标志寄存器的值入堆栈 标志IF和TF清零,即中断服务程序CPU处于关中断状态 断点的CS和IP入堆栈 根据中断类型号查中断向量表,将中断服务程序入口地址写入
可屏蔽中断的中断周期
8086收到INTR引脚上的申请后,如果CPU处于开中 断状态,则响应可屏蔽中断,要进入中断响应周期。
中断响应周期需要两个总线周期,共8个T状态 其他类型的中断,不进入中断响应周期,也不需要外
设传送中断类型号
8086的中断向量表
8086的中断向量表存储向量中断,即中断服 务程序的入口地址,位于存储器的0~3FFH地 址,共1024字节。为256个中断类型号每个 分配4字节。
例如:8086CPU硬中断的非屏蔽中断是无条件中 断,硬中断的可屏蔽中断是条件中断。
有时CPU根据自己的工作状态会切换系统的开关 中断状态
中断优先级
中断优先级 (原因)
可以有序处理多个中断源对CPU的同时申请, CPU优先处理优先级高的中断;
可以允许中断嵌套。
中断嵌套的规则:
对于大多数系统,只有高优先级的中断源可以打 断低优先级中断的服务;低级中断,或者同级中 断原则上是不能要求中断嵌套的。
第八章 中断系统
《微机原理与接口技术》 杜秀川
8.1 中断的基本概念
中断是CPU和外部设备交换数据的一种方式。 当CPU正常运行程序时,用户通过某种方式向
CPU请求为自己服务,CPU接收请求暂时中断 正在运行的程序,转去执行直接为用户服务 的服务程序,执行完毕后再返回被中断的程 序。这一过程被称为中断。 中断的作用
并行操作,提高工作效率 实现实时处理 及时处理紧急情况(如故障等)
中断源
能够导致CPU产生中断的来源
硬中断源 (外中断) ——由外部请求引起的中断 软中断源 ——由指令执行引起的中断
中断源
(1)一般的输入输出设备 (INTR) 键盘,打印机,鼠标等。
(2)数据通道中断源 (INTR) 软盘,硬盘等。
其中的 n 可以是 0 ~ 255。如DOS中断调用就是 INT 21H。 对于 n 为0 ~ 4的5种软中断是属于8086的专用中断,它们
的功能是固定的。 其余的中断类型号既可以分配给软中断使用,也可以分配
给可屏蔽中断使用。
中断类型号0~4
中断类型号 0
用途 除法溢出
对应的指令
说明

使用DIV或者IDIV指令时,如果除
一条“结束中断”的命令 中断返回指令是IRET,一般的子程序用RET。
中断服务程序时CPU是关中断状态,若允许中断嵌套, 则在中断服务程序的开始写一条开中断指令:STI。
(4)中断返回,使用IRET指令 IRET指令的具体操作是:
IP←(SP), SP←SP+2 CS←(SP),SP ←SP+2 F←(SP),SP←SP+2
CPU负责从中断向量表读出中断矢量。而用户需要将中 断服务程序的入口地址写入中断向量表。
8086的中断向量表
写入中断向量表的方法 (1)直接写入法:使用指令将中断服务程序入口地址的IP写入n×4
的RAM位置,中断服务程序入口的CS写入n×4+2的位置。
例8-2 若中断类型号n=70H,中断服务程序的过程名是INTSUB。借助 伪指令和传送指令,将中断服务程序入口地址写入中断向量表。
8.3 可编程中断控制器8259A及其应用
8259A是可编程中断控制器,用于多个INTR中断源的 中断接口电路,但不适合NMI中断源。
向量中断 ,一般位于系统的RAM区域(使 用比较灵活),存放的是中断向量。中断 向量是中断服务程序的入口地址。
中断向量表
指令型中断向量表
矢量中断的中断向量表
中断类型号
中断过程
中断申请
除软中断外,外部设备向CPU发送的中断 请求信号(电平信号或脉冲信号)
需要注意外部设备发出的请求信号和CPU 的要求是否一致。如果不一致,就要通过 接口电路来解决。
XOR
AX, AX
MOV
ES, AX
; 段地址为0
MOV
BX, 70H*4
; 中断类型号×4
MOV
AX, OFFSET INTSUB ; 中断服务程序的偏移地址
MOV

ES:[BX], AX
MOV
AX, SEG INTSUB
; 中断服务程序的段地址
MOV
ES:[BX+2], AX
8086的中断向量表
8086的中断向量表
写入中断向量表的方法 (1)直接写入法
例8-3 不借助伪指令,直接用指令将中断服务程序INTSUB的入口地址 写入中断向量表,中断类型号仍然是70H。
答案 解:为不影响DS,在程序段中使用了ES寄存器。先将ES的值置为0; 在使用MOV指令时通过段超越,指定使用ES的值为段地址。
IN CLC RCR JC A1: RCR JC A2: …… …… INTS01: …… JMP INTS02: …… JMP ……
AL, PORT_R AL, 1 INTS01 AL, 1 INTS02
A1 A2
; PORT_R是锁存器地址
; 转向故障处理 ; 转向告警处理
中断优先级排队
硬件优先权排队电路 步骤 :
例8-4 设中断类型号为70H,中断服务程序是INTSUB,用DOS功能调用25H将中断服务 程序入口地址写入中断向量表。
答案
PUSH DS
MOV AX, SEG INTSUB
MOV DS, AX
LEA DX, INTSUB
MOV AL, 70H
MOV AH, 25H
INT 21H
POP DS
8086的中断过程
CS和IP 开始执行中断服务程序
8086的中断过程
8086响应中断的过程
TF=0
8086的中断过程
8086中断过程的特点:
(3)中断服务 ,服务子程序和一般的子程序基本相同, 不同点:
中断服务程序都是远过程,要用“PROC FAR” 标志寄存器入堆栈保护,一般的子程序要用PUSHF 中断接口电路可能要求在中断服务程序结束时向接口电路发送
8086中断过程的特点:
(1)中断申请(包括NMI、INTR)都是高电平有效,高电平延 续的时间不能小于2个CPU的时钟周期。且中断返回前必须 结束。
(2)中断响应,是8086在执行完当前指令后才开始,软中断 和NMI中断,直接提取中断类型号。而对于INTR中断,要 进入中断响应周期,读取外设发送过来的中断类型号。
试问中断类型号n=4的中断服务程序入口地址是什么?
答案 解:先计算查找中断向量表的位置: 4×4 = 16 = 10H 读出中断入口的偏移地址是0465H; 4×4+2 = 18 =12H 读出中断入口的段地址是0070H; 所以,从这个向量表查到的4号中断服务程序的入口地址是: 0070H×10H+0465H = 00B65H
4
溢出中断
INTO
单字节指令,更好的处理运算溢出的
问题。运算后如果有溢出,不会自行启
动溢出中断,必须通过INTO指令。
8086的中断源
只有可屏蔽中断是条件中断,必须CPU在开中断状态下才可以响应 存在多个中断源,先响应高优先级的中断源。 中断源的优先级固定:
除法溢出中断→INT n →INTO →NMI→INTR →单步中断(最低) 外中断源的优先级问题由中断接口电路来处理。
中断服务程序都是远调用,所以要存储入口 的偏移地址和段地址。
低2个字节(n×4)是中断入口的IP ,高2个 字节(n×4+2)是中断入口的CS。
8086的中断向量表
例8-1 如果在DEBUG环境中观察到8086中断向量表 (部分)的内容如下:
相关主题