1.1k likes | 1.34k Views
第 9 章. 中断技术. 呱,打扰一下!. 主要内容 中断的概念 8088 CPU 的中断系统 中断控制器 8259A. §8.1 中断概念 什么是中断 所谓中断,就是指当 CPU 正在执行程序时,外设 ( 或其它中断源 ) 向 CPU 发出请求, CPU 暂停当前程序的执行,转向该外设服务 ( 或称中断服务 ) 程序,当中断服务程序运行结束后,返回原程序继续执行的过程。 处理 :外部紧急事件、异常情况.
E N D
第 9 章 中断技术 呱,打扰一下!
主要内容 • 中断的概念 • 8088 CPU的中断系统 • 中断控制器8259A
§8.1 中断概念 • 什么是中断 所谓中断,就是指当CPU正在执行程序时,外设(或其它中断源)向CPU发出请求,CPU暂停当前程序的执行,转向该外设服务(或称中断服务)程序,当中断服务程序运行结束后,返回原程序继续执行的过程。 处理:外部紧急事件、异常情况
中断服务程序(Interrupt-service routing ),处理随机事件的特殊程序,又被称为中断处理程序(interrupt handler)。 • 中断源,引起CPU中断的随机事件,或能发出中断请求的其它来源。
中断技术是现代计算机系统中很重要的一项功能,可以应用于以下几个方面的处理。中断技术是现代计算机系统中很重要的一项功能,可以应用于以下几个方面的处理。 1 )故障检测和自动处理 2 )实时信息处理 3 )并行操作,控制和管理多台外设记终端 4 )分时操作
一 什么是中断 主程序 中断服务程序 中断请求 对外设 进行处理 断点 继续执行 返回断点 • ??? • 中断源有哪些 • 怎样识别中断源 • 怎样进入中断服务 • 怎样返回断点 • 怎样管理中断源
中断的过程 • 向CPU发出中断 • CPU允许响应此中断 • 压栈保护现场及断点 • 找到中断服务程序的入口地址 • 执行中断服务程序 • 恢复现场及断点 即 包括:中断请求,中断判优,中断响应,中断处理,中断返回。
中断系统应具有的功能 • (1)实现中断及返回 • (2)能实现优先权排队 • (3)高级中断源能中断低级的中断处理
中断响应与调用子程序的区别 中断响应 随机的、被动行为 保护断点及现场 为外设服务 为处理各种事件服务 软件中断和调用子程序很相似,调用方便 调用子程序 事先安排好的主动行为 保护断点 为主程序服务 一般与外设无关
§8.2 8086的中断技术 • 8088的中断系统采用向量中断机制 • 能够处理256个中断 • 用中断向量号0 - 255区别 • 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理
8086提供两条外部中断请求线,和一条与中断有关的控制线:NMI,INTR, INTA(中断响应)。 • 8086中断有两大类 • (1)软件中断(内部中断),由指令的执行所引起的中断; • (2)硬件中断(外部中断),由外部主要是外设的请求引起的中断。
一、中断类型和中断向量表 1、中断类型号 8086用0-255来区分256个不同中断源,并对应给出中断向量。 0~4: 5个内部中断,有固定的定义和处理功能; 5~31:系统保留,用户一般不应使用 32~255:用户使用作为硬件或软件中断,也可不用,作为数据存储区。
2、中断向量表 • 8086/8088系统支持最多256个中断,对应每一个中断,都有一个中断服务程序,该中断服务程序的入口地址称为中断向量。 • 每个中断向量占用4个字节,前两个字节为服务程序的IP(偏移量),后两个字节为服务程序的CS(段地址)。
每个中断类型对应一个中断向量。 • 256个中断类型,其中断向量构成一个中断向量表,放在0段的0~3FFH区域内,每个占4个字节。 • 存放中断向量的位置=中断类型号×4(0段)开始的4个内存单元。 向量号为N的中断向量的物理地址=N×4
8086的中断向量表 返回
0080H 10H IP 0081H 20H 30H 0082H CS 40H 0083H 例:20H号中断的中断服务程序的入口地址(中断向量)4030H:2010H,则此中断向量占用的内存单元为: 0000H:0080H开始的4个单元
二、中断指令和中断屏蔽 1、中断指令 CLI:清中断标志,IF=0,禁止可屏蔽中断; STI:中断标志置位, IF=1,开放可屏蔽中断; INT n:软件中断 CPU工作:(Flags) ((SP)-2) 先复制TF状态,然后TF,IF=0 (CS) ((SP)-4) (4*n+2) (CS) (IP) ((SP)-6) (4*n) (IP)
IRET: 中断返回 • CPU的工作: • ((SP)) IP • ((SP)+2) CS • ((SP)+4) flag • (SP)+6 SP • INTO 溢出中断(INT 4) • HLT 暂停等待外部中断或复位
2、 中断的屏蔽 • 中断允许标志位(IF),只能影响可屏蔽外部中断,不影响软件中断、内部中断以及非屏蔽的外部中断。 • 系统响应中断时,使IF=0,保证响应过程不被打断。 • 若有优先级高的中断, 在服务子程序中使IF=1。
3、IF 中断标志 • IF=0,关中断、禁止中断、中断屏蔽,因此可屏蔽的中断不会被响应。 • 系统复位 • 任何一个中断响应 • 执行CLI 将使IF=0 • IF=1,开中断、允许中断、中断开放,可屏蔽的中断会被响应。 • 执行STI 将使IF=1 • 执行IRET,恢复原IF
INTA 三、中断的功能 • 内部中断 • 除法错中断 • 指令中断 • 溢出中断 • 单步中断 • 外部中断 • 非屏蔽中断 • 可屏蔽中断 非屏蔽中断源 可屏蔽中断源 NMI(2) 8259A 中断 控制器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 CPU INTR 中断逻辑 外 设 中 断 源 INT 3 指令 INT N 指令 除法 错误(0) 单步 中断(1) INTO 指令(4)
1. 内部中断 • 内部中断是由于8088内部执行程序出现异常引起的程序中断 • 利用内部中断,微处理器为用户提供了发现、调试并解决程序执行时异常情况的有效途径 • 例如,ROM-BIOS和DOS系统利用内部中断为程序员提供了各种功能调用
除法错中断,类型0中断 • 在执行除法指令时,若除数为0或商超过了寄存器所能表达的范围,则产生一个向量号为0的内部中断,称为除法错中断。自动转到0000H~0003H存放的地址执行。 例如: mov bl,0 idiv bl ;除数BL=0,产生除法错中断 mov ax,200h mov bl,1 div bl ;商=200H,不能用AL表达 ;产生除法错中断
溢出中断, 类型4中断 • 在执行溢出中断指令INTO时,若溢出标志OF为1,则产生一个向量号为4的内部中断,被称为溢出中断 • 有必要时用INTO引入,用于测试溢出标志。跟在有符号数的计算后面,程序员知道是否为有符号数,对于无符号数则无所谓。 例如: mov ax,2000h add ax, 7000h ;2000H+7000H=9000H,溢出:OF=1 into ;因为OF=1,所以产生溢出中断
单步中断,类型1中断 • 若单步中断TF为1,则在每条指令执行结束后产生一个向量号为1的内部中断,称为单步中断 例如:DEBUG.EXE调试程序的单步命令T就利用单步中断实现对程序的单步调试
断点中断,类型3中断 • 在调试程序时使用,将某处的一条指令替换为 INT3指令。需要保存原内容,调试完后回复原指令。 • 比较特别(生成一个字节的指令代码:11001100),常用于程序调试,被称为断点中断 例如:DEBUG.EXE调试程序的运行命令G设置的断点,就是利用INT 3指令实现的
2、软件(指令)中断 • 在执行中断调用指令INT n时产生的一个向量号为n(0 ~ 255)的内部中断,称为指令中断。 • 被成为向量化的子程序调用,一般会是功能比较复杂的仿真子程序。 • 所有的外部中断也可以用指令调用。
3、外部中断 • 外部中断是由于8088外部提出中断请求引起的程序中断 • 利用外部中断,微机系统可以实时响应外部设备的数据传送请求,能够及时处理外部意外或紧急事件 • 外部中断的原因是处理器外部随机产生的,所以是真正的中断(Interrupt) • 内部中断的原因是处理器执行程序出现异常,所以经常被称为异常(Exception)
⑴ 非屏蔽中断 • 通过非屏蔽中断请求信号向微处理器提出的中断请求,微处理器无法禁止,将在当前指令执行结束予以响应,这个中断被称为非屏蔽中断 • 8088的非屏蔽中断的向量号为2,非屏蔽中断请求信号为NMI • 非屏蔽中断主要用于处理系统的意外或故障。例如: • 电源调电前的数据保护 • 存储器读写错误的处理
⑵ 可屏蔽中断 • 外部通过可屏蔽中断请求信号向微处理器提出的中断,微处理器在允许可屏蔽中断的条件下,在当前指令执行结束予以响应,同时输出可屏蔽中断响应信号,这个中断就是可屏蔽中断 • 8088的可屏蔽中断请求和响应信号分别是INTR和INTA*;由IF标志控制可屏蔽中断是否允许响应;向量号来自外部中断控制器。
申请在INTR线上发出信号,可以被CPU查到,有要在服务完成前及时撤销,以防重复触发。申请在INTR线上发出信号,可以被CPU查到,有要在服务完成前及时撤销,以防重复触发。 • INTA*作为中断应答信号,送出两个负脉冲,第一个通知外设得到响应,第二个将中断类型号送上数据线。 • 8088通常需要配合中断控制器8259A共同处理可屏蔽中断 • 可屏蔽中断主要用于主机与外设交换数据 明 确 IF 标 志 的 状 态 是 关 键
8086/8088的中断响应过程 • 查询中断的顺序, • 决定了各种中断源的优先权 • 软件中断 • 除法错中断 • 指令中断 • 溢出中断 • 非屏蔽中断 • 可屏蔽中断 • 单步中断 高 低 现行指令 Y 软件中断 N Y NMI N 中断响应周期 读中断向量号 Y Y INTR IF=1 N N Y TF=1 N 下条指令
8086/8088的中断响应过程(续) 标志寄存器入栈 (1) TEMP=TF,IF=TF=0 (2) CS:IP入栈 (3) 获取中断向量 (4) Y 还有NMI N Y TEMP=1 N 执行服务程序 (5) 弹出CS:IP 弹出标志寄存器 (6) 返回被中断程序
内部中断服务程序 • 编写内部中断服务程序与编写子程序类似 • 利用过程定义伪指令PROC/ENDP • 第1条指令通常为开中断指令STI • 最后用中断返回指令IRET • 通常采用寄存器传递参数 • 主程序需要调用中断服务程序 • 调用前,需要设置中断向量 • 设置必要的入口参数 • 利用INT n指令调用中断服务程序 • 处理出口参数
8.3 中断控制器8259A 呱。。。 呱,打扰一下 呱,还有我 呱呱
中断申请管理接口的主要功能: 1.向CPU的引脚INTR发中断申请信号 • 当有多个外设同时发出中断请求时, • 能按照一定的优先级顺序,向CPU发出中断申请, • 使CPU能优先响应优先级最高的外部设备的中断申请。 2.送中断类型号 • 在CPU中断响应周期,针对不同外设的中断请求, • 向CPU传送不同的中断类型号, • 使CPU执行相应的中断子程。
Intel 8259A是可编程中断控制器 • 用于管理Intel 8080/8085、8086/8088、80286/80386的可屏蔽中断 • 8259A的基本功能 • 一片8259A可以管理8级中断,可扩展至64级 • 每一级中断都可单独被屏蔽或允许 • 在中断响应周期,可提供相应的中断向量号 • 8259A设计有多种工作方式,可通过编程选择
8259A的引脚双列直插式芯片,28个引脚 8259A Vcc + 5V 总线 18.2Hz IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 方 波 数 据 线 D0 ~ D7 D0 ~ D7 键 盘 保 留 串 口2 IOR RD 串 口1 IOW WR 硬 盘 A0 A0 软 盘 打印机 片 选 译 码 CS A5 ~ A9 20~3FH SP/EN CA0 CA1 CA2 GND 用于多片 8259A 级连情况 INTA INTA INT INTR
一、8259A的引脚、结构和工作原理 • 引脚 • 1、D0~D7: 8条数据线,与CPU数据总线相连,进行数据交换,写入控制字或送出类型号。 • 2、INT:中断请求,与CPU INTR相连发出中断申请。 • INTA*: 接收来自CPU的响应信号,一般两个负脉冲。 • RD*: 读信号,读CPU某个内部寄存器的内容 • WR*:写信号,通知CPU接收命令字。
CS*:片选信号 • A0:1片8259A占用两个端口地址,一个偶地址(A0=0)较低,一个奇地址(A0=1)较高。 • IR0~IR7: 分别接8个外设中断请求或从片中断请求。 • CAS0~CAS2:主从结构时,区分不同的从片。 • SP*/EN*: 双向线,(由初始化命令字设置) • 非缓冲方式:输入 SP*=1本片主片, SP*=0本片主片 • 缓冲方式:输出EN*=0有效,数据从8259传向8086,一般用于驱动一个总线驱动器
关于数据线和地址线的连接 • 8259A只有8根数据线,一般与8086的低8根数据线相连,因此必须把8086地址线的A1与8259A的A0相连。 • 其中A0=0为偶地址 • A0=1为奇地址。
8259A的内部结构 • 8259的内部控制器。 • 1 根据中断请求寄存器IRR、中断屏蔽寄存器IMR的设置情况,通过优先级比较器判定优先级; • 2 向其他部件发出控制信号; • 3 并发出中断请求信号INT; • 4 接受中断响应信号INTA,使中断服务寄存器ISR的相应位置1,IRR的相应位清0; • 5 在INTA第二个负脉冲到来的时候送出中断类型号; • 6 根据中断结束类型对ISR的相应位清0。 RD WR A0 CS INTA 控制逻辑 INT D7~D0 数据 总线 缓冲器 中断服务寄存器 优先权判别电路 中断请求寄存器 IR0 读/写 控制 逻辑 IR7 CAS0 级联 缓冲器 比较器 • *用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套. • *保存对中断请求信号IR的屏蔽状态 • *Di位为1表示IRi中断被屏蔽(禁止),为0表示允许; • *各自独立. • *保存正在被8259A服务着的中断状态; • *Di位为1表示IRi中断正在服务中,为0表示没有被服务. CSA1 • * 保存8条外界中断请求信号IR0~IR7的请求状态; • * Di位为1表示IRi引脚有中断请求;为0表示无请求. CAS2 中断屏蔽寄存器 SP/EN
8259A的内部寄存器 • 中断请求寄存器IRR • 保存8条外界中断请求信号IR0~IR7的请求状态 • Di位为1表示IRi引脚有中断请求;为0表示无请求 • 中断服务寄存器ISR • 保存正在被8259A服务着的中断状态 • Di位为1表示IRi中断正在服务中;为0表示没有被服务 • 中断屏蔽寄存器IMR • 保存对中断请求信号IR的屏蔽状态 • Di位为1表示IRi中断被屏蔽(禁止);为0表示允许
优先级比较器(裁决器) • 用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套。 • 数据总线缓冲器 • 它是8259A与系统数据总线的接口,是8位双向三态缓冲器。CPU与8259A之间的控制命令信息、状态信息以及中断类型信息,都是通过该缓冲器传送的。 • 读/写控制逻辑 • CPU通过它实现对8259A的读/写操作。
级连缓冲器: • 用以实现8259A芯片之间的级连,使得中断源可以由8级扩展至64级。 • 控制逻辑电路 • 对整个芯片内部各部件的工作进行协调和控制。8259的中断控制部分有7各寄存器,根据初始化命令字和操作命令字工作。
中断响应过程CPU在INTA*上给出两个负脉冲 • 第一个负脉冲使8259A作如下的工作: • 使IRR寄存器暂时失效,不再接收新的申请,第二个负脉冲恢复 • 使当前的ISR中的相应位置1 • 使IRR中的相应位清0 • 第二个负脉冲 • 使中断类型寄存器的ICW2的内容送D0~D7(中断类型码) • 如果ICW4中的自动结束位为1,则使ISR的相应位清0。
三、8259A的工作方式 • 8259A有多种工作方式,这些工作方式,可以通过编程设置或改变。 • 1.优先级的管理方式
(1).全嵌套方式 • 这是8259A默认的优先权设置方式,在全嵌套方式下,8259A所管理的8级中断优先权是固定不变的,其中IR0的中断优先级最高,IR7的中断优先级最低。 • CPU响应中断后,请求中断的中断源中,优先级最高的中断源,在中断服务寄存器ISR中的相应位置位,而且把它的中断矢量送至系统数据总线,在此中断源的中断服务完成之前,与它同级或优先级低的中断源的中断请求被屏蔽,只有优先级比它高的中断源的中断请求才是运算的,从而出现中断嵌套。
(2).特殊全嵌套方式 • 特殊全嵌套方式与全嵌套方式基本相同,所不同的是,当CPU处理某一级中断时,如果有同级中断请求,那么CPU也会作出响应,从而形成了对同一级中断的特殊嵌套。 • 特殊全嵌套方式通常应用在有8259A级连的系统中,在这种情况下,对主8259A编程时,通常使它工作在特殊全嵌套方式下。这样,一方面,CPU对于优先级别较高的主片的中断输入是允许的,另一方面,CPU对于来自同一从片的优先级别较高(但对于主片来讲,优先级别是相同的)的中断也是允许、能够响应的。
(3).优先级自动循环方式 • 在实际应用中,中断源优先级的情况是比较复杂的,要求8级中断的优先级在系统工作过程中,可以动态改变。即一个中断源的中断请求被响应之后,其优先级自动降为最低。系统启动时,8级中断优先级默认为IR0—IR7,这时,刚好IR4发出了中断请求,CPU响应之后,若8259A工作在优先级自动循环方式下,则中断优先级自动变为IR5、IR6、IR7、IR0、IR1、IR2、IR3、IR4。