920 likes | 1.16k Views
第 7 章. 微型计算机中断系统. 中国科学技术大学 何克东. 一、中断概念 中断就是 CPU 暂停执行现行的程序,转而处理随机事件,处理完毕后再回到被中断的程序继续执行,这一过程称为中断。. 7.1 概述. 中断系统具有以下基本功能: ① 为了加强中断系统的灵活性,对于各种中断请求,应该具有屏蔽和开放的功能,使得程序员可以灵活控制。 ② 具有“中断级别”的判断和控制功能,即能实现中断源排队。当有多个中断源申请中断时,能根据事先的设定及时响应中断。 ③ 能实现中断嵌套,即高级别的中断能中断较低级别的中断。
E N D
第 7 章 微型计算机中断系统 中国科学技术大学 何克东
一、中断概念 中断就是CPU暂停执行现行的程序,转而处理随机事件,处理完毕后再回到被中断的程序继续执行,这一过程称为中断。 7.1 概述
中断系统具有以下基本功能: • ①为了加强中断系统的灵活性,对于各种中断请求,应该具有屏蔽和开放的功能,使得程序员可以灵活控制。 • ②具有“中断级别”的判断和控制功能,即能实现中断源排队。当有多个中断源申请中断时,能根据事先的设定及时响应中断。 • ③能实现中断嵌套,即高级别的中断能中断较低级别的中断。 • ④系统响应中断后,能自动进行中断处理。当中断处理完后能自动返回。
中断主要解决的问题 • 1.实现分时操作,解决CPU与外部设备速度上的差异,提高计算机系统的工作效率,达到并行处理的目的。 • 2.处理随机的异常事件,如运算结果溢出、机器故障等。 • 3.实现实时操作,在控制系统中许多信号是随机产生的,只有通过中断系统才能实时的对它们进行处理,避免信息的丢失。
8086的中断系统采用向量中断机制 能够处理256个中断 用中断类型号0~255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 8086中断系统
中断源:引发CPU中断的来源称为中断源 中断响应:接受中断请求 中断向量表:存放中断服务子程序入口地址的内存区域(00000H~003FFH) 中断优先权:有多个中断源请求中断时, 系统响应中断申请的级别 中断屏蔽 :由软件设置,使之不能被响应,称为中断屏蔽。
非屏蔽中断源 可屏蔽中断源 NMI 8259A 中断 控制器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 CPU INTR 中断逻辑 外 设 中 断 源 INTA INT n 指令 INTO 指令 除法 错误 单步 中断 二、中断分类 外部中断 内部中断 8086中断源
外部中断是由于CPU外部提出中断请求引起的程序中断,也称为硬件中断。 非屏蔽中断:类型号为2 外部通过非屏蔽中断NMI请求,必须响应 非屏蔽中断主要用于处理系统的意外或故障 可屏蔽中断:类型号来自中断控制器 外部通过可屏蔽中断INTR请求,由IF控制是否响应;响应时产生INTA信号 可屏蔽中断主要用于与外设交换数据 1. 外部中断
IF=0:可屏蔽中断不会被响应 关中断、禁止中断、中断屏蔽 系统复位,使IF=0 任何一个中断被响应,使IF=0 执行指令CLI,使IF=0 IF=1:可屏蔽中断会被响应 开中断、允许中断、中断开放 执行指令STI,使IF=1 执行指令IRET恢复原IF状态 中断标志IF的状态
内部中断是由于CPU内部执行程序出现异常引起的程序中断,所以又称软件中断。内部中断的中断类型号已定(内部中断是不可屏蔽的) 除法错中断:类型号为0 指令中断:类型号为n 断点中断:类型号为3 溢出中断:类型号为4 单步中断:类型号为1 2、内部中断
由中断指令INT引起的中断 由CPU运算错误引起的中断 由Debug设置的中断 软件中断
7.2 中断处理过程 可屏蔽中断处理流程
申请 响应 中断过程 处理
中断申请 当需要CPU中断以处理一些紧急事件,向CPU发出的请求。引发CPU中断的来源称为中断源 。 中断响应 为了及时处理中断,中断系统(或中断装置)定时查询有无中断申请,若有且未屏蔽,则引出处理中断的程序称为该中断被响应。 中断处理 执行相应的中断处理程序(例行中断服务子程序)。
CPU响应I/O中断的三个条件: (1)外设提出中断申请 (2)本中断位未被屏蔽 (3)中断允许 一、CPU响应中断过程
现行指令 Y 内部中断 N Y NMI N 中断响应周期 读中断类型号 Y Y INTR IF=1 N N Y TF=1 N 下条指令 中断响应过程(P268)
标志寄存器入栈 TEMP=TF,IF=TF=0 CS:IP入栈 获取中断向量 Y 还有NMI N Y TEMP=1 N 执行服务程序 弹出CS:IP 弹出标志寄存器 返回被中断程序 中断响应过程
确定中断源: 查询中断 矢量中断 二、 8086的中断向量表 • 要解决的问题 • 确定中断源 • 找到对应中断处理程序的入口地址
中断向量:中断服务程序的入口地址(首地址)中断向量:中断服务程序的入口地址(首地址) 逻辑地址含有段地址CS和偏移地址IP(32位) 每个中断向量的低字是偏移地址、高字是段地址,需占用4个字节 8086微处理器从物理地址00000H开始,依次安排各个中断向量。 256个中断占用1KB区域,就形成中断向量表 1. 8086的中断向量表 类型号为N的中断向量的 物理地址=N×4
2050 IP CS A000 INT 68H MOV AX,0 向量地址 =68H×4 =1A0H 中断处理程序 A000:2050 STI PUSH DS : : IRET 中断操作过程例子
设置中断向量 AL=中断类型号 DS:DX=中断服务程序入口地址 AH=25H INT 21H 取中断向量 AL=中断类型号 AH=35H INT 21H 返回:ES:BX=中断服务程序入口地址 2.中断向量(中断入口地址)的设置 方法一:
: POP DX;恢复中断向量 POP DS MOV AL,N MOV AH,25H INT 21H : INTRAD PROC FAR : IRET INTRAD ENDP MOV AL,N MOV AH,35H INT 21H PUSH ES;保存中断向量 PUSH BX PUSH DS MOV AX,SEG INTRAD ;设置中断向量 MOV DS,AX MOV DX,OFFSET INTRAD MOV AL,N MOV AH,25H INT 21H POP DS
方法二: MOV AX,0 MOV ES,AX MOV DI,N*4 MOV AX,OFFSET INTRAD CLD STOSW MOV AX,SEG INTRAD STOSW STI : INTRAD PROC FAR : IRET INTRAD ENDP
对除法错、单步中断、NMI、断点中断、溢出中断,CPU自动提供中断类型号0~4。对除法错、单步中断、NMI、断点中断、溢出中断,CPU自动提供中断类型号0~4。 对INT n,中断类型号由n确定。 对I/O中断(由INTR引脚引入),通过8259获得中断类型号。 3.中断类型号(确定中断源)的获取
中断主程序的编写方法 1.主程序中的初始化. (1)设置中断向量。 (2)设置8259A的中断屏蔽寄存器的中断屏蔽位。 (3)设置CPU中断允许位标志IF(开中断STl)。
2.硬件(外设接口)和CPU自动完成 (1)外设接口向CPU的INTR端发中断请求。 (2)当前指令执行完后,CPU发两个中断响应信号INTA给外设接口。 (3)CPU取中断类型号n。 (4)CPU自动将当前PSW、CS、IP内容入栈保护。 (5)清除IF、TF,禁止外部中断和单步中断。 (6)从中断向量表中取(4×n)地址中内容→IP,取(4×n+2)地址中内容→CS。 (7)转向中断服务子程序。
注意: (1)对重复前缀的指令(如REP MOVSB)作为一条指令处理。执行一次重复前缀和串指令即可响应中断,而不是把串操作全部执行完。 (2)遇到开中断指令STI和中断返回指令IRET,要在这两条指令执行完后,再执行一条指令才能响应中断。 (3)CPU自动清除IF及TF位,使CPU进入中断服务程序后,不允许再产生新的中断,如果在中断服务程序中还允许外部中断进入,则在中断服务程序中必须再开中断。
中断服务子程序的结构形式: 1.保护现场 2.开中断,IF=1,允许中断嵌套 3.执行中断处理程序 4.关中断,IF=0,禁止其他中断请求进入 5.发中断结束命令EOI 6.恢复现场 7.中断返回IRET 三、中断服务子程序
编写内部中断服务程序与编写子程序类似 利用过程定义伪指令PROC/ENDP 保护完现场后要用开中断指令STI置IF=1 恢复现场前要用关中断指令CLI置IF=0 最后用中断返回指令IRET 通常采用寄存器传递参数 主程序需要调用中断服务程序 调用前,需要设置中断向量 利用INT n指令调用中断服务程序 内部中断服务程序
编写80H号中断服务程序 功能:显示以“0”结尾字符串的功能 利用显示器功能调用INT 21H的2号模块 字符串缓冲区首地址为入口参数 DS:DX(段地址:偏移地址)传递参数 例:内部中断服务程序
intoff dw ? intseg dw ? intmsg db ‘A Instruction Interrupt !’ db 0dh,0ah,0 : : mov al,80h : mov ah,35h;保存中断向量 int 21h mov intoff,bx ;保存偏移地址 mov intseg,es;保存段基地址 push ds mov dx,offset new80h ;设置中断向量 mov ax,seg new80h mov ds,ax mov ax,2580h int 21h pop ds mov dx,offset intmsg int 80h;调用中断服务程序 mov dx,intoff mov ax,intseg mov ds,ax mov ax,2580h int 21h mov ax,4c00h int 21h : :
外部中断服务程序 例: 编写中断处理程序,要求主程序运行时,每10秒响铃一次,同时屏幕上显示信息“The bell is ring! ”(P274) 可以利用中断类型1CH进行处理,因为系统定时器(中断类型8)的中断处理程序中,时钟中断一次(约18.2次/秒)要调用一次INT 1CH。在ROM BIOS中,1CH的处理程序只有一条IRET指令,仅为用户提供一个中断类型号。这样可以利用系统定时器的中断间隔,将用户设计的程序来代替原有的INT 1CH程序。在编写程序时,有两个部分的工作: l. 在主程序初始化部分,先保存当前中断向量表内容,再置新的中断向量。 2.在主程序结束部分恢复保存的1CH向量。
DATA SEGMENT COUNT DW 1 MESS DB ‘The bell is ring!’,0AH,0DH,‘$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AL,1CH MOV AH,35H ;得到原中断向量 INT 21H PUSH ES ;存储原中断向量 PUSH BX PUSH DS
MOV DX,OFFSET RING ;中断子程序RING的偏移地址和段地址 MOV AX,SEG RING MOV DS,AX MOV AL,1CH ;设置中断向量 MOV AH,25H INT 21H POP DS IN AL,21H;设置中断屏蔽位,21H为8259中断屏蔽寄存器端口地址 AND AL,0FEH OUT 21H,AL STI ;开中断 MOV DI,2000; 延迟 DELAY:MOV SI,3000 ;等待中断 DELAY1: DEC SI JNZ DELAY1 DEC DI JNZ DELAY POP DX ; 取原中断向量 POP DS MOV AL,1CH MOV A H,25H INT 21H RET MAIN ENDP CODE ENDS
第一个INTA周期 T1 T2 T3 T4 第二个INTA周期 T1 T2 T3 T4 CLK ALE LOCK INTA D0~D7 n 四、中断响应时序 中断类型号 中断响应总线周期时序图
7.3 中断优先级和中断嵌套 开中断 取下一条指令 执行一条指令 中断服务程序 否 中断? 关中断 是 关中断 恢复现场 保护现场 返回 屏蔽本级和低级中断 多个中断源中断流程图
IBM PC机优先级 内部中断 除法错中断 指令中断 溢出中断 不可屏蔽中断 可屏蔽中断 单步中断 一、中断优先级 高 低
INTR 中断0 中断1 中断2 锁 存 器 三态 缓冲器 D0~D7 … … IOR 8001H A0~A15 译码 1.软件查询中断优先级 中断查询接口
: MOV DX,8001H IN AL,DX TEST AL,80H JNZ SEV0 TEST AL,40H JNZ SEV1 TEST AL,20H JNZ SEV2 TEST AL,10H JNZ SEV3 TEST AL,08H JNZ SEV4 :
2.硬件查询优先方式-菊花链法 菊花链优先查询法
3.矢量中断优先级 IR0 8253定时器 键盘 未用 异步通信卡(辅) 异步通信卡(主) 硬盘 软盘 并行打印机 优先级管理逻辑 中断请求寄存器 中断服务寄存器 IR7 中断屏蔽寄存器 21H
二、中断嵌套 高 低
一、功能 Intel 8259A是可编程中断控制器PIC 8259A的基本功能 一片8259A可以管理8级中断,可扩展至64级 每一级中断都可单独被屏蔽或允许 在中断响应周期,可提供相应的中断类型号 8259A设计有多种工作方式,可通过编程选择 7.4 可编程中断控制器8259A
INTA 控制逻辑 INT D7~D0 数据 总线 缓冲器 IR0 中断服务寄存器 优先权判别电路 中断请求寄存器 RD 读/写 控制 逻辑 WR A0 CS IR7 CAS0 级联 缓冲器 比较器 CSA1 CAS2 中断屏蔽寄存器(IMR) SP/EN 二、 8259A的内部结构 ISR PR IRR
中断请求寄存器IRR 保存8条外界中断请求信号IR0~IR7的请求状态 Di位为1表示IRi引脚有中断请求;为0表示无请求 中断服务寄存器ISR 保存正在被8259A服务着的中断状态 Di位为1表示IRi中断正在服务中;为0表示没有被服务 中断屏蔽寄存器IMR 保存对中断请求信号IR的屏蔽状态 Di位为1表示IRi中断被屏蔽(禁止);为0表示允许 中断控制
一个系统中,8259A可以级联,有一个主8259A,若干个(最多8个)从8259A一个系统中,8259A可以级联,有一个主8259A,若干个(最多8个)从8259A 级联时,主8259A的三条级联线CAS0~CAS2作为输出线,连至每个从8259A的CAS0~CAS2 每个从8259A的中断请求信号INT,连至主8259A的一个中断请求输入端IR 主8259A的INT线连至CPU的中断请求输入端 SP/EN在非缓冲方式下,规定该8259A是主片(SP=1)还是从片(SP=0) 中断级联
完全嵌套方式 特殊全嵌套方式 设置优先权方式 自动中断结束方式 结束中断处理方式 普通中断结束方式 非自动中断结束方式 特殊中断结束方式 普通屏蔽方式 屏蔽中断源方式 特殊屏蔽方式 边沿触发方式 中断请求触发方式 电平触发方式 自动循环方式 缓冲方式 优先权固定方式 特殊循环方式 非缓冲方式 优先权循环方式 数据线连接方式 三、 8259A的中断管理方式 中断查询方式
完全嵌套方式 8259A的中断优先权顺序固定不变,从高到低依次为 IR0、IR1、IR2、……IR7 中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其类型号送上数据总线,对应ISR的Di位置位,至到中断结束(ISR的Di位复位) 在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套 特殊全嵌套方式 用于级联方式,可响应同级中断请求。 优先权自动循环方式 优先权特殊循环方式(程序指定初始的最低优先级) 2. 优先级设置方式