530 likes | 614 Views
第七章 中 断. 6 学时 7.1 中断概述 7.2 8086 的中断系统 X7.3 80X86 系列高档微处理器的中断系统 7.4 80X86 系列微机的硬中断控制逻辑. 7.1 中断概述. 中断 ,是指 CPU 在执行正常程序时,为 处理一些紧急发生的情况 , 暂时中止当前程序 , 转而对该紧急事件进行处理,并在 处理完后返回正常程序 的过程. CPU 执行流程. 非预料事件 1. 中断服务程序 1. 非预料事件 2. 中断服务程序 2. 非预料事件. 非预料事件 是指事件发生的时间无法预知, 即中断源何时产生中断不确定,是随机的。.
E N D
第七章 中 断 6学时 7.1 中断概述 7.2 8086的中断系统 X7.3 80X86系列高档微处理器的中断系统 7.4 80X86系列微机的硬中断控制逻辑
7.1中断概述 • 中断,是指CPU在执行正常程序时,为处理一些紧急发生的情况,暂时中止当前程序,转而对该紧急事件进行处理,并在处理完后返回正常程序的过程
CPU执行流程 非预料事件1 中断服务程序1 非预料事件2 中断服务程序2
非预料事件 • 非预料事件是指事件发生的时间无法预知,即中断源何时产生中断不确定,是随机的。 • 中断源产生中断的随机性,使中断服务程序的执行也具有随机性,即何时执行中断服务程序不是在程序中安排好的。
中断系统 • 中断系统是微机中实现中断功能的各种软、硬件的总称 • 中断系统一般包括CPU内部相应的中断逻辑、接口中的中断控制电路及各类中断服务子程序
中断系统相关概念 • 中断源:引起中断的原因,或能够发出中断请求信号的外设 • 中断类型号:处理器对各类中断的中断源进行的统一编号N,N的取值范围是0~255 外部中断 (硬件中断) 内部中断 (软件中断) 可屏蔽中断 (INTR) 不可屏蔽中断 (NMI) (执行指令所引起的)
中断系统相关概念 • 中断向量:中断向量即中断服务子程序的入口地址,也就是中断服务子程序的第一条指令的地址在存储器中的存放位置 • 中断向量表:中断向量构成的表格,位于存储器的最低地址单元 • 中断优先级:在系统中多个中断源可能同时提出中断请求时,需要按中断的轻重缓急给每个中断源指定一个优先级别
中断系统相关概念 • 断点:是指CPU执行的现行程序被中断时的下一条指令的地址,又称断点地址
断点概念 CPU在执行此指令时, 某中断源发申请中断; CPU在执行完该指令后, 转去执行中断子程 1000:150H 、、 、、 、、 、、 、、 MOV AX, 0 ADD AX, DX MOV [ DI ], AX 、、 、、 、、 、、 、、 PUSH AX 、、 、、 IRET 地址1000:150H为断点
中断系统相关概念 • 中断现场:是指CPU转去执行中断服务程序前的运行状态,包括CPU内部各寄存器、断点地址等。 • 中断嵌套:当CPU正在进行某一级别中断源的中断处理时,若有更高级别的新中断源发出请求,且新中断源满足响应条件,则CPU应中止当前的中断服务程序,保护此程序的断点和现场,转而响应高级中断。这种多级(重)中断的处理方式称为“嵌套”。
中断嵌套过程示意图 CPU执行流程 非预料事件1 中断服务程序1 中断服务程序2 非预料事件2
中断嵌套必须具备的几个条件 • 正处于响应状态的中断服务程序中,应开放总中断(IF位置1) • 新中断应具有比原中断有高的优先级;同级或低级均不能嵌套 • 为保护各级中断服务程序的数据不被破坏,所有服务程序中均应有保护现场、恢复现场的指令 • 每个中断服务程序末尾必须有IRET指令以示结束,从而返回被中断的程序地址处
中断系统相关概念 • 中断屏蔽:在某些情况下,CPU可能不对中断请求信号作出响应或处理,这就是中断屏蔽。 • 屏蔽情况 • 中断屏蔽标志IF • 接口电路中的中断屏蔽寄存器 • 系统在处理优先级别较高的中断请求时,不会理睬后来的级别较低的中断请求 。
中断处理过程 • 中断检测 • CPU内部硬件自动完成 • 中断响应 • CPU内部硬件自动完成 • 中断服务 • 中断服务是根据用户自行编制的指令顺序完成各项操作的。
程序中断与子程序调用的区别 • 子程序的执行是程序员事先安排好的(由调用子程序的指令转入);中断服务子程序的执行一般由随机的中断事件引发。 • 子程序的执行受到主程序或上层子程序的控制;中断服务子程序一般与被中断的现行程序无关。 • 不存在同时调用多个子程序的情况,因此子程序不需要进行优先级排队;而不同中断源则可能同时向CPU提出服务请求,因此需要中断仲裁及优先级排队。
CPU执行流程 非预料事件1 中断服务程序1 中断系统的功能 一、实现中断及返回 • 中断源发出中断请求,CPU决定是否响应,若响应,则保护断点和现场,转入相应中断服务程序,中断服务结束后,恢复现场和断点,继续执行原程序。
中断系统的功能 二、能实现优先权排队 • 按各中断请求的重要程度排列CPU响应的次序称为中断优先级。 • 即同时有多个中断请求到来时,CPU会首先响应和处理优先级别最高的中断请求。 • 中断优先级的实现可以用软件或硬件设置
7.2 8086的中断系统 8086的中断源(8086微型机有两类中断): 1、可屏蔽硬件中断INTR、不可屏蔽硬件中断NMI、 2、软件中断(包括自动产生中断)
NMI 系统定时器 8259A IRQ0 键盘 IRQ1 INTR CPU内部 IRQ2 彩色/图形接口 IRQ3 保留(串口) IRQ4 串口 软件中断 INT n INTO 自动产生的中断 除法错 单步(TF=1) IRQ5 保留(LPT) IRQ6 软盘 IRQ7 LPT CPU内的中断逻辑 • 中断源的优先级顺序为:被0除中断→软件中断→INTO → NMI → INTR →单步中断。
中断类型码 一、中断类型码:8086可以处理256个中断请求。每个中断请求均对应于唯一固定的类型码。被0除类型码是0,单步为1; NMI为2;断点中断为3,溢出中断为4
中断向量和中断向量表 二、中断向量:中断服务程序的入口地址,包括段地址(存放于高字单元)和偏移地址(存放于低字单元)。 三、中断向量表:存放中断向量的表格。位于内存空间的最低地址(000H-3FFH),长度1KB,可容纳256类中断向量(2564=1024)。
中断响应与处理 • 中断类型码的获取 • NMI、断点中断、溢出中断、被0除、单步中断等类型码固定。 • INT N软中断类型码由立即数N给出。 • 外部中断由接口电路提供中断类型码。 • 获得中断类型码后,如何进入中断服务程序 • 中断类型码乘以4,得中断向量表的向量首址指针 • 取中断向量:把向量表指针所指的4个连续字节的内容作为中断服务程序的入口地址,分别送给IP和CS • 按新的CS:IP指针执行中断服务程序
0:0 、、、 、、、 0200h 3000h 、、、 、、、 、、、 MOV AX, 0 ADD AX, DX MOV [DI], AX 、、、 、、、 、、、 、、、 MOV BX,CX 、、、 、、、 IRET 、、、 0: 0000 0: N×4 中断向量表0:0 ~ 3FFH 0: N×4+2 0:3FFH 某中断源发申请中断, 申请执行类型号为N的中断子程序 堆栈 1000:150h (IP)=0200h (CS)=3000h 执行 IRET后 响应中断后 (IP) (CS) (PSW) SS:SP 3000:200h 类型N 中断子程 响应中断前 SS:SP SS:SP 内 存 中断响应过程 0150 1000 (FLAG)
第 一 个中断响应周期 第 二 个中断响应周期 T1 T4 T1 T4 T2 T3 T2 T3 CLK INTA 向量类型 AD7~AD0 中断响应周期时序 • CPU从引脚/INTA 发中断响应信号,接口芯片接收此信号,把中断类型号准备好;同时ISRi=1,IRRi=0 • CPU再从引脚/INTA 发中断响应信号,接口芯片接此信号后,将中断类型号送至数据总线上; • CPU从数据总线获取中断类型号。
8086的中断过程 结束当前指令 Y 内部中断? N NMI中断? Y INTR中断? 从总线上取中断类型号 IF=1? N N Y TF=1? N FLAG压栈 IF=0,TF=0 保护断点:CS、IP压栈 中断响应过程 根据中断类型号获取中断 向量,进入中断处理过程 恢复断点:CS、IP出栈 FLAG出栈 执行下一条指令 中断返回过程
AB 端口译码 DB DB CPU 端口译码 数据缓冲 外 设 WR 中断屏蔽触发器 控制端口 Q D READY 中断请求触发器 INTR Q D R +5V INTA 外部中断源的管理 • INTR中断接口电路
外部中断源的管理 • 多个外部硬件中断源共用一条INTR线时,要在程序中采取一定措施或用外部硬件解决中断源的优先权排列和多级中断的嵌套等。 • 中断优先权(优先级):中断优先权就是为每个中断源所确定的响应级别。 • 软件排序:CPU响应中断后,在程序中用查询的方法判定外设的中断请求。
外部中断源的管理 • 软件查询排序的特点是:查询次序即优先权排序 • 节省硬件 • 修改方便,只要改变程序中的查询次序即可 • 由询问转至真正的服务程序入口时间长 • 硬件排序:采用优先权的编码电路,对各种外部硬中断进行排队。 • 简单 排队编码电路 • 菊花链式硬件排序电路 • 中断控制集成芯片8259A
软件法排序程序 IN AL,20H;读中断触发器的状态 TEST AL,80H;有电源故障请求? JZ B1 ;没有,继续查询 JMP PWF;转至电源故障程序入口 B1:TEST AL,40H;有磁盘请求吗? JZ B2 ;无,继续查询 JMP DISS;转至磁盘服务程序 B2:TEST AL,20H;有磁带请求吗? JZ B3 ;无,继续查询 JMP MT;转至磁带服务程序 B3:TEST AL,10H;有CRT请求? JZ B4 ;无,继续查询
软件法排序程序 JMP CRT;转至CRT显示服务程序 B4:TEST AL,08H;有纸带请求? JZ B5 ;无,继续查询 JMP PIN;转至纸带输入服务程序 B5:TEST AL,04H;有纸带穿孔请求吗? JZ B6 ;无,继续查询 JMP PH;转至纸带穿孔服务程序 B6:TEST AL,02H;是键盘输入中断请求吗? JZ POUT;否,转打印中断服务程序 JMP KEYIN;转至键盘输入中断服务程序 POUT: …
专用中断控制芯片8259 • 单片8259能管理8级中断,并且可级联管理64级 • 有中断判优逻辑功能,可对任一级中断单独屏蔽 • 中断被响应后,可直接提供中断类型号 • 可通过编程选择其工作方式 • 中断触发方式的设置 • 中断响应方式的设置 • 中断嵌套方式的设置 • 中断结束方式的设置 • 总线连接方式的设置及优先权的设置
用户中断服务子程序的装载 • 将用户中断服务子程序的入口地址放入中断向量表的相应位置的过程称为用户中断服务子程序的装载 。 • 常用的装载方法有三种
用户中断服务子程序的装载 • 1、定义数据段与向量表重合 DATA SEGMENT AT 0000H ; 定义数据段(DS) = 0000H ORG n * 4 ; n为中断类型号 SUP DW noffset ; 中断服务程序的入口IP DW nseg ; 中断服务程序的入口CS DATA ENDS
用户中断服务子程序的装载 • 2、程序初始化部分用数据传送指令 DATA SEGMENT AT 0000H ORG n * 4 SUP DW 2DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, ES:DATA MOV AX, DATA MOV ES, AX MOV ES:[SUP], OFFSET INISUP ; 中断服务程序的入口IP MOV ES:[SUP+2], SEG INISUP ; 中断服务程序的入口CS
用户中断服务子程序的装载 3、DOS中断功能调用 INT 21H置中断向量功能 • 功能号 25H → AH • 中断号 n → AL • 入口参数 中断服务程的入口地址CS:IP → DS:DX • INT 21H 注: 中断服务程的入口地址CS:IP值将放入 中断向量表的n*4处连续4个存储单元中
用户中断服务子程序的装载 • INT 21H读中断向量功能 • 功能号 35H → AH • 中断号 n → AL • INT 21H • 出口参数 ES:BX 注: ES:BX中为中断号n的中断服务程 的入口地址CS:IP值
用户中断服务子程序的装载 • 3、DOS中断功能调用 …… ;--保存原向量---------------------------------- MOV AL, N ; AL中预置中断类型号 MOV AH, 35H ; AH中预置功能号35H INT 21H ; 调用DOS中断将取中 断向量到ES:BX中 PUSH ES ; 保存原中断向量的段 基址部分 PUSH BX ; 保存原中断向量的段 内偏移量部分
用户中断服务子程序的装载 ;---设置新向量---------------------------------- PUSH DS MOV AX, SEG INTSUB MOV DS, AX ; DS中预置段基址 MOV DX, OFFSET INTSUB ; DX中预置偏移量 MOV AL, N ; AL中预置中断类型号 MOV AH, 25H ; AH中预置功能号25H INT 21H ; 调用DOS中断将用户 中断向量置入中断向量 表 POP DS ……
置中断向量例 某中断服务程序的 中断号为40H,中断 务程序的入口地址 CS:IP =3500H:4830H 用INT 21H功能置 中断向量到中断向 量表中 MOV AH, 25H MOV AL, 40H PUSH DS 40H*4 MOV BX, 3500H MOV DS, BX MOV DX, 4830H INT 21H POP DS
中断服务程序 • 保护现场:保存CPU内部各寄存器的内容,以便在服务程序中可以使用这些寄存器而不致破坏原信息。 • 开总中断:将IF置1,使得在该中断服务期间CPU仍然能够响应更高级的中断请求。 • 具体处理:进行用户的中断服务。
中断服务程序 • 关总中断:将IF位清0。 • 恢复现场:将入栈保护的各寄存器内容依次弹出,恢复进入中断服务程序前的状态。 • 开总中断:再次将IF位置1,使返回之后能够再响应。 • 中断返回:执行一句IRET指令,CPU将自动将堆栈中的断点弹出给IP和CS,然后弹出标志寄存器FLAGS,完成恢复断点的操作。
系统的中断分配情况 我的电脑/控制面板/系统/计算机管理/计算机/属性/中断请求
7.4 X86系列微机的硬中断控制逻辑 INTR NMI
PC机INTR中断的应用 • PC机中大部分INTR中断已被系统用作自身接口功能的一部分(如键盘中断IRQ1),系统初始化时这些中断对应的服务子程序会被自动装载。 • 扩展外设只能使用系统专门提供的用户中断,如高档PC机中的IRQ10、IRQ11、IRQ12和IRQ15 。 • 用户在实模式下设计开发INTR中断接口时需从硬、软件两个方 面。