微机原理与接口技术 第八章 中断系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中断源的优先级是默认确定的 对于用户和开发人员,需要确定和处理实际
外中断源的优先级。
中断优先级排队
软件查询实现
优点是接口简单、编程简单、应用面广 缺点是不够灵活
中断优先级排队
中断服务程序首先读入锁存器的内容,然后对于读入的内容从D7(对 应高优先级)到D0(对应低优先级)进行查询。如果查到某一位是高 电平(有申请)就跳转到相应的服务程序进行处理。处理完毕后返回 来继续查询,直到查询完毕,退出服务程序。相应的程序段如下:
向量中断 ,一般位于系统的RAM区域(使 用比较灵活),存放的是中断向量。中断 向量是中断服务程序的入口地址。
中断向量表
指令型中断向量表
矢量中断的中断向量表
中断类型号
中断过程
中断申请
除软中断外,外部设备向CPU发送的中断 请求信号(电平信号或脉冲信号)
需要注意外部设备发出的请求信号和CPU 的要求是否一致。如果不一致,就要通过 接口电路来解决。
试问中断类型号n=4的中断服务程序入口地址是什么?
答案 解:先计算查找中断向量表的位置: 4×4 = 16 = 10H 读出中断入口的偏移地址是0465H; 4×4+2 = 18 =12H 读出中断入口的段地址是0070H; 所以,从这个向量表查到的4号中断服务程序的入口地址是: 0070H×10H+0465H = 00B65H
中断服务
执行中断服务程序
中断返回
返回到正常程序的断点
8.2 8086中断系统
8086的中断源
256个不同的中断,中断类型号的取值是00H~FFH 中断分为软中断和硬中断,硬中断又分为非屏蔽中
断和可屏蔽中断 非屏蔽中断的请求从NMI引脚输入。可屏蔽中断的
请求从INTR引脚输入 软中断是通过指令 INT n
一条“结束中断”的命令 中断返回指令是IRET,一般的子程序用RET。
中断服务程序时CPU是关中断状态,若允许中断嵌套, 则在中断服务程序的开始写一条开中断指令:STI。
(4)中断返回,使用IRET指令 IRET指令的具体操作是:
IP←(SP), SP←SP+2 CS←(SP),SP ←SP+2 F←(SP),SP←SP+2
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是锁存器地址
; 转向故障处理 ; 转向告警处理
中断优先级排队
硬件优先权排队电路 步骤 :
中断服务程序都是远调用,所以要存储入口 的偏移地址和段地址。
低2个字节(n×4)是中断入口的IP ,高2个 字节(n×4+2)是中断入口的CS。
8086的中断向量表
例8-1 如果在DEBUG环境中观察到8086中断向量表 (部分)的内容如下:
0000:0000 9E 0F C9 00 FF 13 F4 0C-16 00 44 09 F5 13 F4 0C 0000:0010 65 04 70 00 54 FF 00 F0-40 E1 00 F0 6F EF 00 F0 0000:0020 00 00 00 CC 28 00 44 09-3A 00 44 09 52 00 44 09 0000:0030 6A 00 44 09 82 00 44 09-9A 00 44 09 65 04 70 00
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的中断向量表
开中断和关中断
不同的中断源又可以分为条件中断和无条件中断。
无条件中断源的申请,CPU一定要响应 (软中断 都属于无条件中断)
条件中断要求CPU处于开中断状态才响应中断, 在关中断状态则不响应
IF=1
开中断状态
IF=0
关中断状态
通过中断标志IF的置位/复位来控制CPU的开/关中 断状态。
并行操作,提高工作效率 实现实时处理 及时处理紧急情况(如故障等)
中断源
能够导致CPU产生中断的来源
硬中断源 (外中断) ——由外部请求引起的中断 软中断源 ——由指令执行引起的中断
中断源
(1)一般的输入输出设备 (INTR) 键盘,打印机,鼠标等。
(2)数据通道中断源 (INTR) 软盘,硬盘等。
8086的中断向量表
写入中断向量表的方法 (1)直接写入法
例8-3 不借助伪指令,直接用指令将中断服务程序INTSUB的入口地址 写入中断向量表,中断类型号仍然是70H。
答案 解:为不影响DS,在程序段中使用了ES寄存器。先将ES的值置为0; 在使用MOV指令时通过段超越,指定使用ES的值为段地址。
答案 ; 数据段确定中断向量表写入的位置:
VECDATA SEGMENT AT 0
ORG 70H*4
LOCA_70 DW 2 DUP (?)
VECDATA ENDS
; 代码段写入中断向量表:
ININT
SEGMENT
……
MOV LOCA_70, OFFSET INTSUB
MOV LOCA_70+2, SEG INTSUB
外部中断向CPU申请中断 CPU给出中断应答信号 排队电路选择最高级别的中断,产生相应的三态锁存器的
选通信号,将存放在锁存器中的中断源标识传送到CPU的数 据总线 CPU读入中断源的标识,调用相应的中断服务程序
中断优先级排队
硬件优先权排队电路
优点是中断响应快,使用灵活;缺点是接 口电路比较复杂
8086CPU按默认的中断优先级查询,但多个INTR中断同时 申请的排队问题由中断接口电路来解决。
8086获取了中断类型号以后,进行 :
标志寄存器的值入堆栈 标志IF和TF清零,即中断服务程序CPU处于关中断状态 断点的CS和IP入堆栈 根据中断类型号查中断向量表,将中断服务程序入口地址写入
可屏蔽中断的中断周期
8086收到INTR引脚上的申请后,如果CPU处于开中 断状态,则响应可屏蔽中断,要进入中断响应周期。
中断响应周期需要两个总线周期,共8个T状态 其他类型的中断,不进入中断响应周期,也不需要外
设传送中断类型号
8086的中断向量表
8086的中断向量表存储向量中断,即中断服 务程序的入口地址,位于存储器的0~3FFH地 址,共1024字节。为256个中断类型号每个 分配4字节。
4
溢出中断
INTO
单字节指令,更好的处理运算溢出的
问题。运算后如果有溢出,不会自行启
动溢出中断,必须通过INTO指令。
8086的中断源
只有可屏蔽中断是条件中断,必须CPU在开中断状态下才可以响应 存在多个中断源,先响应高优先级的中断源。 中断源的优先级固定:
除法溢出中断→INT n →INTO →NMI→INTR →单步中断(最低) 外中断源的优先级问题由中断接口电路来处理。
中断判优 (判别中断源的优先级)
若符合中断条件和优先权,CPU接受中断 请求,进入中断响应阶段
中断过程
中断响应
① 保存断点地址(一般采用堆栈,有的采用寄存器) ② 利用中断向量表将指令指针指向中断服务程序入口 在中断响应里,要完成断点保存、标志寄存器保存、
关中断等,部分操作由CPU自动完成,用户也需要 完成一些操作。
8086中断过程的特点:
(1)中断申请(包括NMI、INTR)都是高电平有效,高电平延 续的时间不能小于2个CPU的时钟周期。且中断返回前必须 结束。
(2)中断响应,是8086在执行完当前指令后才开始,软中断 和NMI中断,直接提取中断类型号。而对于INTR中断,要 进入中断响应周期,读取外设发送过来的中断类型号。
(3)实时时钟 (INTR) 用外部时钟定时发出中断信号,由CPU进行处理。
(4)故障源 (NMI) (a)外设故障 电源掉电,运行超限等。 (b)计算机故障 内存出错,输入输出出错等。
(5)测试程序时设置的中断源 硬件断点:硬件调试器 软件断点:INT 03H 调试程序应支持单步运行和断点运行
例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的中断过程
每个中断源需要有中断类型号来标识自己 中断类型号和中断服务程序一一对应 8086由中断类型号*4得到中断向量表中的
地址,该地址存储有中断服务程序的入口 地址
中断向量表
中断向量表是系统RAM或者系统ROM的 一个区域 ,向量表的大小取决于CPU支 持的中断类型和数量。 类型:
指令型的中断向量表 ,一般位于系统的 ROM区域(修改比较困难),存放的是一 条转移指令 。
例如:8086CPU硬中断的非屏蔽中断是无条件中 断,硬中断的可屏蔽中断是条件中断。
有时CPU根据自己的工作状态会切换系统的开关 中断状态
中断优先级
中断优先级 (原因)
可以有序处理多个中断源对CPU的同时申请, CPU优先处理优先级高的中断;
可以允许中断嵌套。
中断嵌套的规则:
对于大多数系统,只有高优先级的中断源可以打 断低优先级中断的服务;低级中断,或者同级中 断原则上是不能要求中断嵌套的。
8.3 可编程中断控制器8259A及其应用
8259A是可编程中断控制器,用于多个INTR中断源的 中断接口电路,但不适合NMI中断源。
其中的 n 可以是 0 ~ 255。如DOS中断调用就是 INT 21H。 对于 n 为0 ~ 4的5种软中断是属于8086的专用中断,它们
的功能是固定的。 其余的中断类型号既可以分配给软中断使用,也可以分配
给可屏蔽中断使用。
中断类型号0~4
中断类型号 0
用途 除法溢出
对应的指令
说明
无
使用DIV或者IDIV指令时,如果除
CS和IP 开始执行中断服务程序
8086的中断过程
8086响应中断的过程
TF=0
8086的中断过程
8086中断过程的特点:
(3)中断服务 ,服务子程序和一般的子程序基本相同, 不同点:
中断服务程序都是远过程,要用“PROC FAR” 标志寄存器入堆栈保护,一般的子程序要用PUSHF 中断接口电路可能要求在中断服务程序结束时向接口电路发送
CPU负责从中断向量表读出中断矢量。而用户需要将中 断服务程序的入口地址写入中断向量表。
8086的中断向量表
写入中断向量表的方法 (1)直接写入法:使用指令将中断服务程序入口地址的IP写入n×4
的RAM位置,中断服务程序入口的CS写入n×4+2的位置。
例8-2 若中断类型号n=70H,中断服务程序的过程名是INTSUB。借助 伪指令和传送指令,将中断服务程序入口地址写入中断向量表。
第八章 中断系统
《微机原理与接口技术》 杜秀川
8.1 中断的基本概念
中断是CPU和外部设备交换数据的一种方式。 当CPU正常运行程序时,用户通过某种方式向
CPU请求为自己服务,CPU接收请求暂时中断 正在运行的程序,转去执行直接为用户服务 的服务程序,执行完毕后再返回被中断的程 序。这一过程被称为中断。 中断的作用
数为0,或者商的值超过了寄存器可以
存放的范围就自动启动
1
单步中断
无
通过TF=1来启动,用于调试程序
2
非屏蔽中断
无
保留给外部的非屏蔽中断请求。所有
非屏蔽中断源都触发一个中断服务程序,
需要通过查询方式来分别处理
3
断点中断
INT 3
单字节指令,程序执行到断点处会
停下,显示所有寄存器的值。也可进行
其他调试。
写入中断向百度文库表的方法 (2)利用DOS功能调用写、读中断向量表
DOS功能调用25H用来写中断向量表(AH=25H)。入口参数:
AL:中断类型号; DS:中断服务程序入口的段地址; DX:中断服务程序入口的偏移地址。
DOS功能调用35H用来读中断向量表(AH=35H),入口出口参数:
AL:中断类型号; ES:读出的中断服务程序入口的段地址; BX:读出的中断服务程序入口的偏移地址。
外中断源的优先级。
中断优先级排队
软件查询实现
优点是接口简单、编程简单、应用面广 缺点是不够灵活
中断优先级排队
中断服务程序首先读入锁存器的内容,然后对于读入的内容从D7(对 应高优先级)到D0(对应低优先级)进行查询。如果查到某一位是高 电平(有申请)就跳转到相应的服务程序进行处理。处理完毕后返回 来继续查询,直到查询完毕,退出服务程序。相应的程序段如下:
向量中断 ,一般位于系统的RAM区域(使 用比较灵活),存放的是中断向量。中断 向量是中断服务程序的入口地址。
中断向量表
指令型中断向量表
矢量中断的中断向量表
中断类型号
中断过程
中断申请
除软中断外,外部设备向CPU发送的中断 请求信号(电平信号或脉冲信号)
需要注意外部设备发出的请求信号和CPU 的要求是否一致。如果不一致,就要通过 接口电路来解决。
试问中断类型号n=4的中断服务程序入口地址是什么?
答案 解:先计算查找中断向量表的位置: 4×4 = 16 = 10H 读出中断入口的偏移地址是0465H; 4×4+2 = 18 =12H 读出中断入口的段地址是0070H; 所以,从这个向量表查到的4号中断服务程序的入口地址是: 0070H×10H+0465H = 00B65H
中断服务
执行中断服务程序
中断返回
返回到正常程序的断点
8.2 8086中断系统
8086的中断源
256个不同的中断,中断类型号的取值是00H~FFH 中断分为软中断和硬中断,硬中断又分为非屏蔽中
断和可屏蔽中断 非屏蔽中断的请求从NMI引脚输入。可屏蔽中断的
请求从INTR引脚输入 软中断是通过指令 INT n
一条“结束中断”的命令 中断返回指令是IRET,一般的子程序用RET。
中断服务程序时CPU是关中断状态,若允许中断嵌套, 则在中断服务程序的开始写一条开中断指令:STI。
(4)中断返回,使用IRET指令 IRET指令的具体操作是:
IP←(SP), SP←SP+2 CS←(SP),SP ←SP+2 F←(SP),SP←SP+2
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是锁存器地址
; 转向故障处理 ; 转向告警处理
中断优先级排队
硬件优先权排队电路 步骤 :
中断服务程序都是远调用,所以要存储入口 的偏移地址和段地址。
低2个字节(n×4)是中断入口的IP ,高2个 字节(n×4+2)是中断入口的CS。
8086的中断向量表
例8-1 如果在DEBUG环境中观察到8086中断向量表 (部分)的内容如下:
0000:0000 9E 0F C9 00 FF 13 F4 0C-16 00 44 09 F5 13 F4 0C 0000:0010 65 04 70 00 54 FF 00 F0-40 E1 00 F0 6F EF 00 F0 0000:0020 00 00 00 CC 28 00 44 09-3A 00 44 09 52 00 44 09 0000:0030 6A 00 44 09 82 00 44 09-9A 00 44 09 65 04 70 00
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的中断向量表
开中断和关中断
不同的中断源又可以分为条件中断和无条件中断。
无条件中断源的申请,CPU一定要响应 (软中断 都属于无条件中断)
条件中断要求CPU处于开中断状态才响应中断, 在关中断状态则不响应
IF=1
开中断状态
IF=0
关中断状态
通过中断标志IF的置位/复位来控制CPU的开/关中 断状态。
并行操作,提高工作效率 实现实时处理 及时处理紧急情况(如故障等)
中断源
能够导致CPU产生中断的来源
硬中断源 (外中断) ——由外部请求引起的中断 软中断源 ——由指令执行引起的中断
中断源
(1)一般的输入输出设备 (INTR) 键盘,打印机,鼠标等。
(2)数据通道中断源 (INTR) 软盘,硬盘等。
8086的中断向量表
写入中断向量表的方法 (1)直接写入法
例8-3 不借助伪指令,直接用指令将中断服务程序INTSUB的入口地址 写入中断向量表,中断类型号仍然是70H。
答案 解:为不影响DS,在程序段中使用了ES寄存器。先将ES的值置为0; 在使用MOV指令时通过段超越,指定使用ES的值为段地址。
答案 ; 数据段确定中断向量表写入的位置:
VECDATA SEGMENT AT 0
ORG 70H*4
LOCA_70 DW 2 DUP (?)
VECDATA ENDS
; 代码段写入中断向量表:
ININT
SEGMENT
……
MOV LOCA_70, OFFSET INTSUB
MOV LOCA_70+2, SEG INTSUB
外部中断向CPU申请中断 CPU给出中断应答信号 排队电路选择最高级别的中断,产生相应的三态锁存器的
选通信号,将存放在锁存器中的中断源标识传送到CPU的数 据总线 CPU读入中断源的标识,调用相应的中断服务程序
中断优先级排队
硬件优先权排队电路
优点是中断响应快,使用灵活;缺点是接 口电路比较复杂
8086CPU按默认的中断优先级查询,但多个INTR中断同时 申请的排队问题由中断接口电路来解决。
8086获取了中断类型号以后,进行 :
标志寄存器的值入堆栈 标志IF和TF清零,即中断服务程序CPU处于关中断状态 断点的CS和IP入堆栈 根据中断类型号查中断向量表,将中断服务程序入口地址写入
可屏蔽中断的中断周期
8086收到INTR引脚上的申请后,如果CPU处于开中 断状态,则响应可屏蔽中断,要进入中断响应周期。
中断响应周期需要两个总线周期,共8个T状态 其他类型的中断,不进入中断响应周期,也不需要外
设传送中断类型号
8086的中断向量表
8086的中断向量表存储向量中断,即中断服 务程序的入口地址,位于存储器的0~3FFH地 址,共1024字节。为256个中断类型号每个 分配4字节。
4
溢出中断
INTO
单字节指令,更好的处理运算溢出的
问题。运算后如果有溢出,不会自行启
动溢出中断,必须通过INTO指令。
8086的中断源
只有可屏蔽中断是条件中断,必须CPU在开中断状态下才可以响应 存在多个中断源,先响应高优先级的中断源。 中断源的优先级固定:
除法溢出中断→INT n →INTO →NMI→INTR →单步中断(最低) 外中断源的优先级问题由中断接口电路来处理。
中断判优 (判别中断源的优先级)
若符合中断条件和优先权,CPU接受中断 请求,进入中断响应阶段
中断过程
中断响应
① 保存断点地址(一般采用堆栈,有的采用寄存器) ② 利用中断向量表将指令指针指向中断服务程序入口 在中断响应里,要完成断点保存、标志寄存器保存、
关中断等,部分操作由CPU自动完成,用户也需要 完成一些操作。
8086中断过程的特点:
(1)中断申请(包括NMI、INTR)都是高电平有效,高电平延 续的时间不能小于2个CPU的时钟周期。且中断返回前必须 结束。
(2)中断响应,是8086在执行完当前指令后才开始,软中断 和NMI中断,直接提取中断类型号。而对于INTR中断,要 进入中断响应周期,读取外设发送过来的中断类型号。
(3)实时时钟 (INTR) 用外部时钟定时发出中断信号,由CPU进行处理。
(4)故障源 (NMI) (a)外设故障 电源掉电,运行超限等。 (b)计算机故障 内存出错,输入输出出错等。
(5)测试程序时设置的中断源 硬件断点:硬件调试器 软件断点:INT 03H 调试程序应支持单步运行和断点运行
例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的中断过程
每个中断源需要有中断类型号来标识自己 中断类型号和中断服务程序一一对应 8086由中断类型号*4得到中断向量表中的
地址,该地址存储有中断服务程序的入口 地址
中断向量表
中断向量表是系统RAM或者系统ROM的 一个区域 ,向量表的大小取决于CPU支 持的中断类型和数量。 类型:
指令型的中断向量表 ,一般位于系统的 ROM区域(修改比较困难),存放的是一 条转移指令 。
例如:8086CPU硬中断的非屏蔽中断是无条件中 断,硬中断的可屏蔽中断是条件中断。
有时CPU根据自己的工作状态会切换系统的开关 中断状态
中断优先级
中断优先级 (原因)
可以有序处理多个中断源对CPU的同时申请, CPU优先处理优先级高的中断;
可以允许中断嵌套。
中断嵌套的规则:
对于大多数系统,只有高优先级的中断源可以打 断低优先级中断的服务;低级中断,或者同级中 断原则上是不能要求中断嵌套的。
8.3 可编程中断控制器8259A及其应用
8259A是可编程中断控制器,用于多个INTR中断源的 中断接口电路,但不适合NMI中断源。
其中的 n 可以是 0 ~ 255。如DOS中断调用就是 INT 21H。 对于 n 为0 ~ 4的5种软中断是属于8086的专用中断,它们
的功能是固定的。 其余的中断类型号既可以分配给软中断使用,也可以分配
给可屏蔽中断使用。
中断类型号0~4
中断类型号 0
用途 除法溢出
对应的指令
说明
无
使用DIV或者IDIV指令时,如果除
CS和IP 开始执行中断服务程序
8086的中断过程
8086响应中断的过程
TF=0
8086的中断过程
8086中断过程的特点:
(3)中断服务 ,服务子程序和一般的子程序基本相同, 不同点:
中断服务程序都是远过程,要用“PROC FAR” 标志寄存器入堆栈保护,一般的子程序要用PUSHF 中断接口电路可能要求在中断服务程序结束时向接口电路发送
CPU负责从中断向量表读出中断矢量。而用户需要将中 断服务程序的入口地址写入中断向量表。
8086的中断向量表
写入中断向量表的方法 (1)直接写入法:使用指令将中断服务程序入口地址的IP写入n×4
的RAM位置,中断服务程序入口的CS写入n×4+2的位置。
例8-2 若中断类型号n=70H,中断服务程序的过程名是INTSUB。借助 伪指令和传送指令,将中断服务程序入口地址写入中断向量表。
第八章 中断系统
《微机原理与接口技术》 杜秀川
8.1 中断的基本概念
中断是CPU和外部设备交换数据的一种方式。 当CPU正常运行程序时,用户通过某种方式向
CPU请求为自己服务,CPU接收请求暂时中断 正在运行的程序,转去执行直接为用户服务 的服务程序,执行完毕后再返回被中断的程 序。这一过程被称为中断。 中断的作用
数为0,或者商的值超过了寄存器可以
存放的范围就自动启动
1
单步中断
无
通过TF=1来启动,用于调试程序
2
非屏蔽中断
无
保留给外部的非屏蔽中断请求。所有
非屏蔽中断源都触发一个中断服务程序,
需要通过查询方式来分别处理
3
断点中断
INT 3
单字节指令,程序执行到断点处会
停下,显示所有寄存器的值。也可进行
其他调试。
写入中断向百度文库表的方法 (2)利用DOS功能调用写、读中断向量表
DOS功能调用25H用来写中断向量表(AH=25H)。入口参数:
AL:中断类型号; DS:中断服务程序入口的段地址; DX:中断服务程序入口的偏移地址。
DOS功能调用35H用来读中断向量表(AH=35H),入口出口参数:
AL:中断类型号; ES:读出的中断服务程序入口的段地址; BX:读出的中断服务程序入口的偏移地址。