930 likes | 1.13k Views
第 8 章 中断系统 . 中断最初是作为处理器与外部设备交换信息的一种控制方式提出的。由此,最初的中断全部是对外部设备而言的,称为 外部中断 或 硬件中断 。 随着计算机技术的发展,中断的范围也随之扩大,出现了内部 软件中断 的概念,它是为解决机器内部运行时出现的异常以及为编程方便而提出的。 外部中断或硬件中断通常称为 中断 (Interrupt) ,软件中断或异常中断通常称为 异常 (Exception). 中断与异常的区别 : 中断是异步事件,可能随时发生,与处理器正在执行的内容无关。中断主要由 I/O 设备产生,可以被启用或禁止。
E N D
第8章 中断系统 中断最初是作为处理器与外部设备交换信息的一种控制方式提出的。由此,最初的中断全部是对外部设备而言的,称为外部中断或硬件中断。 随着计算机技术的发展,中断的范围也随之扩大,出现了内部软件中断的概念,它是为解决机器内部运行时出现的异常以及为编程方便而提出的。 外部中断或硬件中断通常称为中断(Interrupt),软件中断或异常中断通常称为异常(Exception)
中断与异常的区别: • 中断是异步事件,可能随时发生,与处理器正在执行的内容无关。中断主要由I/O设备产生,可以被启用或禁止。 • 异常是同步事件,它是某一特定指令执行的结果。在相同条件下,异常可以重现。例如,内存访问错误、被零除等是典型的异常。 • 系统服务调用通常视作异常。
8.1 中断的基本概念 不论哪种中断都遵循同样的中断处理过程 当 前 程 序 中断响应 中断 服务 程序 中断 请求 中断源 程序断点 中断返回 处理器暂停执行当前程序,转而执行中断服务程序,处理完毕后再返回到断点处继续执行原来的程序
中断的类型 • PC系列微机最多可以支持256种中断,它们被分为四种类型: • 异常 • 软件中断 • 外部可屏蔽中断 • 外部非屏蔽中断 • 每个中断和异常都指定了一个类型号,也称为中断号。对应每一种中断应当有一个中断服务程序(Interrupt Service Program——ISP) 中断类型号通过一个地址指针表与中断服务程序的入口地址相联,在实模式下,该表称为中断向量表,在保护模式下,该表称为中断描述符表。
中断的类型 1. 异常 为处理器执行某些操作而引起的中断,包括除法错误异常、调试异常、断点中断等 • 异常的例子: • 0型——除法错误异常 • 1型——调试异常 • …...
中断的类型 2.软件中断 执行有定义的INT n指令而引发的中断,称为软件中断 有定义的 并非所有的中断号都有对应的中断服务程序 软件中断使用05H、10H~0FFH中的若干个中断号 软件中断进一步分为BIOS中断和DOS中断
中断的类型 3.外部可屏蔽中断 外部可屏蔽中断是处理器响应各种外部硬件中断的最常用的方法,通过处理器的INTR引脚产生 外部可屏蔽中断受处理器内部的中断允许标志位IF的控制 处理器以电平触发方式接受INTR请求,当每条指令结束时,若INTR为高电平且IF=1,则CPU响应相应I/O接口的中断请求。 处理器只有一个INTR引脚可以接受外部可屏蔽中断请求,为了管理众多的外部中断源,微机系统中采用可编程中断控制器8259。PC系列机通过两片8259级连可以响应15个外部中断源
中断的类型 4.外部非屏蔽中断 为外部紧急请求提供服务的中断,通过处理器的NMI引脚产生 NMI输入是上升沿触发的,只要NMI输入端上出现由0到1的跳变,一个中断服务请求就被锁存在Pentium中,与IF标志的状态无关 NMI有一个专用的类型号02H 使用非屏蔽中断的典型例子是电源故障中断
中断的优先级与中断嵌套 通常一个系统有多个中断源,而CPU同一时刻只能响应一个中断源的请求,那么当多个中断源同时请求中断服务时,应该先响应哪一个,有一个次序安排的问题。按中断源的轻重缓急程度确定的优先级别,称为优先级。 内部中断和异常 软件中断 外部非屏蔽中断 外部可屏蔽中断 优先级递增
中断的优先级与中断嵌套 当CPU正在响应某一中断源的请求,执行为其服务的中断服务程序时,如果有优先级更高的中断源发出请求,CPU将中止正在执行的中断服务程序而转入为新的中断源服务,等新的中断服务程序执行完后,再返回到被中止的中断服务程序,这一过程称为中断嵌套。 中断嵌套可以有多级,具体级数原则上不限,只取决于堆栈深度
中断的优先级与中断嵌套 1#中断 服务程序 2#中断 服务程序 3#中断 服务程序 原主程序 响应 响应 响应 1#中断请求 2#中断请求 3#中断请求 返回 返回 返回 中断优先级3#>2#>1#
中断向量表 中断向量表包含256个中断向量。每个中断向量占用两个字(4个字节),高地址字为中断服务程序所在代码段的段基址,低地址字为代码段中中断服务程序第一条指令的偏移量。 中断向量表存放在内存最低端的1K单元之中,物理地址00000H~003FFH 0型中断向量 1型中断向量 255型中断向量 00000H 00004H 003FCH … 4n 4n+2 n型ISP首指令的有效地址 n型ISP代码段的段基址 n型中断向量 4*n …
中断指令 • STI——开中断指令 • 将标志寄存器中的中断标志位IF置1,允许CPU响应来自INTR引脚的中断请求 • CLI——关中断指令 • 将标志寄存器中的中断标志位IF清0,使CPU不响应来自INTR引脚的中断请求
中断指令 • INT n——软件中断指令 • n为中断号。调用n号中断服务程序 • ①将标志寄存器压栈 • ②将TF置0,禁止单步操作,将IF置0,使CPU处于关中断状态 • ③断点的CS、IP压栈 • ④从中断向量表取n号中断向量 IP、CS • ⑤转向n号中断服务程序
中断指令 • IRET——中断返回指令 • 中断服务程序的出口指令,从栈顶弹出6个字节依次写入IP、CS和标志寄存器 • 在执行IRET之前必须保证栈顶是断点地址,否则执行IRET指令将导致系统瘫痪
8.3 中断向量表 中断向量表由三部分组成,如图3.7所示。地址如表3.2所示。 (1)中断类型号0~4为专用中断指针,占用0000H~0013H的20个字节,并且用户不能对其修改。 (2)中断类型号5~13为保留中断指针,占用0013H~007FH的108个字节,这是Intel公司保留的中断指针,用户不应使用。 (3)中断类型号32~255为用户使用的中断指针,占用0080H~03FFH的896个字节,它可由用户指定。
表3.2 中断向量地址一览表续表 返回本节
8.3.1 微机系统的中断过程 • 1 中断请求 • 2 中断响应 • 3 现场保护 • 4 执行中断服务程序 • 5 恢复现场 • 6 中断返回 返回本章首页
微型计算机系统的中断过程大致分为: 中断请求:由需要提供中断服务程序的设备提出;中断响应:CPU给设备发出一个中断应答信号;现场保护:保护执行中断服务程序前的各种信息;执行中断服务程序:完成特定的操作;退出中断服务程序:恢复现场。微机中断过程如图3.8所示。
1 中断请求 此过程由欲提出中断的外部设备或内部系统提出。当外部设备需要完成某种特定的操作或者处理器系统内部出错时,需要CPU进行处理,外部设备可以向CPU提出中断申请,请求CPU进行处理。 返回本节
2 中断响应 CPU给设备发出一个中断应答信号;当外设提出的中断申请被CPU接收并认可后,首先解决的是必须关中断,其次是微处理器在处理中断、实现控制权的转移前必须把当前程序状态保存起来,最后是查找中断源,即查找提出中断请求的是外围设备还是内部系统。 返回本节
3 现场保护 为了确保在中断完成之后,程序能正确地返回到原来的断点处,继续执行原程序的下一条指令,必须对断点处的各种数据进行现场保护,主要是标志寄存器和CS、IP的值,我们可以将其压入堆栈中,利用堆栈来进行保护。同时还要清除中断标志IF和TF,关闭中断。 返回本节
4 执行中断服务程序 根据中断类型号N,可以在中断向量表中查出要执行中断服务程序的入口地址,从而执行相应的中断处理程序,该程序可以是用户自己编写的程序,也可以是系统提供的程序。 返回本节
5 恢复现场 在中断处理程序完成后,应当对现场进行恢复。此时可以将保存在堆栈中的内容弹出,即按照“后进先出”的原则将相应的值弹出到原来的寄存器中,从而恢复中断前的状态。 返回本节
6 中断返回 任何一个中断都必须在中断服务程序的末尾并在中断服务程序指令返回之前重新开中断。 返回本节
中断向量表的操作 • 读写中断向量表不能使用MOV指令,而应调用相应的DOS功能 • 取中断向量 • 预置AH=35H, AL=中断类型号 • 执行INT 21H • ——把类型号为AL的中断向量取出到ES:BX中 • 设置中断向量 • 预置AH=25H, AL=中断类型号,DS:DX=中断向量 • 执行INT 21H • ——把DS:DX指向的中断向量放置到中断向量表中类型号为AL的中断向量处
中断向量表的操作 例:填写中断向量表,实现用户所定义的60H中断 …... CLI PUSH DS MOV AX, SEG INT60 MOV DS, AX MOV DX, OFFSET INT60 MOV AH, 25H MOV AL, 60H INT 21H POP DS STI …... • INT60 PROC FAR • …… • IRET • INT60 ENDP 中断服务 程序
中断向量表的操作 • 例:用用户定义的中断服务程序置换系统原有的中断服务程序 • DATA SEGMENT • OLD_INT_SEG DW ? • OLD_INT_OFF DW ? • … • DATA ENDS • …. • MOV AL, XX • MOV AH, 35H • INT 21H • MOV OLD_INT_SEG, ES • MOV OLD_INT_OFF, BX • CLI • PUSH DS • MOV AX, SEG NEW_INT • MOV DS, AX • MOV DX, OFFSET NEW_INT • MOV AH, 25H MOV AL, XX INT 21H POP DS STI …… CLI PUSH DS MOV AX, SEG OLD_INT_SEG MOV DS, AX MOV DX, OFFSET OLD_INT_OFF MOV AH, 25H MOV AL, XX INT 21H …...
中断服务程序的编程 中断入口 保护现场 为中断源服务部分 发中断结束命令 恢复现场 中断返回
8.4 保护模式的中断处理 • 保护模式下采用中断描述符表IDT管理各级中断 • IDT中最多可以有256个描述符,对应于256个中断/异常源 • IDT表中的描述符包括了中断服务程序的入口地址信息 • IDT可置于内存的任意区域,其起始地址由中断描述符表寄存器(IDTR)设置
8.4 保护模式的中断处理 • IDT表中的描述符一般是中断门和陷阱门,中断门对应外部硬件中断,陷阱门对应内部软件中断或异常 门描述符的格式
8.4 保护模式的中断处理 访问权限字节 7 6 5 4 3 2 1 0 P DPL 0 TYPE 中断门TYPE=1110 陷阱门TYPE=1111
8.4 保护模式的中断处理 SIDT指令——存储中断描述符表寄存器 IDTREG DB 6 DUP(?) …... SGDT IDTREG 将IDTR的内容复制到由IDTREG指定的内存中的6个字节中 LIDT指令——装入中断描述符表寄存器 IDTREG DW 01FFH,0000H,0001H …... LIDT IDTREG 将由IDTREG指定的内存中的6字节操作数装入IDTR中
8.5 微机系统的中断分类 在实模式下,按中断源划分,系统中断可分为CPU中断、硬件中断和软件中断3类,本节先介绍CPU中断和软件中断。 8.5.1 CPU中断:是指CPU执行某些操作而引发的中断,这类中断使用了0、1、3、4、6、7中断号。
1 除法错中断--0型中断 2 单步中断--1型中断 3 断点中断--3型中断 4 溢出中断--4型中断 8.5.2 软件中断 执行INT n指令而引发的中断,称为软件中断。 1 BIOS中断 2 DOS中断
8.5 中断优先级管理器8259A PI • 8.5.1 8259A芯片的功能 • 8.5.2 8259A芯片的外部特性 • 8.5.3 8259A的内部结构及其功能 • 8.5.4 8259A的中断处理过程 • 8.5.5 8259A的工作方式 • 8.5.6 8259A的编程 返回本章首页
8.5.1 8259A芯片的功能 8259A作为一种可编程中断控制器,是一种集成芯片。它用来管理输入到CPU的各种中断申请,主要外围设备,能提供中断向量、屏蔽各种中断输入等功能。每一个8259A芯片都能直接管理8级中断,最多可以用9片8259A芯片级连,由其构成级连机构可以管理64级中断。 返回本节
8.5.2 8259A芯片的外部特 1.8259A芯片的外部引脚说明(结构图如图3.9所示) 每个引脚的功能如下所述: (1)片选取信号( ) (2)写信号( ) (3)读信号( ) (4)D0~D7:8条数据总线
(5)GND:地信号 (6)Vcc:+5V电源 (7)INT:中断请求信号 (8) : 中断响应信号 (9)IR0~IR7:8个中断请求输入信号 (10)A0:地址选择信号 (11) :从片编程/允许缓冲器信号 (12)CAS0~CAS2:这三条信号是8259A级连时构成8259A的主从式级连结构
2.8259A的外部特性 (1)编程方面:由于8259A是一种可编程的中断控制芯片。当有中断请求时,总线控制器发出IOR或IOW信号,而信息的传递则是通过数据总线D7~D0来完成的。 (2)操作方面:当CPU完成对8259A的初始化操作后,8259A即进入操作状态,通过INT端口向CPU提出中断申请,8259A从数据总线D7~D0输出当前服务对象的中断类型号N,CPU截获该中断向量并响应该中断,完成一次中断操作。 返回本节
7.4.3 8259A的内部结构及其功能 8259A芯片的内部逻辑结构如图3.10所示。 8259A内部结构逻辑主要由以下三部分组成: (1)控制逻辑 (2)中断优先权判优及其屏蔽 (3)辅助电路
8.5.4 8259A的中断处理过程 1.设置中断请求 2.中断判优和中断屏蔽 3.中断应答 4.中断响应 5、执行中断服务程序 返回本节
8.5.5 8259A的中断方式 1.完全嵌套方式 2.自动循环方式 3.指定最低级的循环排序方式 4.特殊屏蔽方式 5.查询法排序方式 中断结束(EOI:End of Interrupt):自动EOI和EOI命令方式 返回本节
8.5.6 8259A的编程 对8259A的各种操作者是由CPU来控制的。 CPU的命令分为两大类:一类是初始化命令字ICW,另一类是操作命令字OCW。 CPU对8259A的ICW操作,是由A0、RD、WR、CS等信号来共同控制的,其I/O端口地址分配如表3.3所示。