1 / 77

第 7 章 中断与异常

第 7 章 中断与异常. 张明武 scauzhang@hotmail.com. 华南农业大学信息(软件)学院. 7.1 中断基本概念. 中断结束. 中断请求. 中断响应. 中断服务. 中断处理. 7.1.1 中断基本概念. 定义: CPU 暂停现行程序,转而处理随机到来的事件,待处理完后再回到被暂停的程序继续执行,这个过程就是中断。. 中断过程:. 中断处理的隐操作: 程序状态及程序断点地址的进栈及出栈。. 中断系统其他功能:. 支持多中断源和多种中断源。. 支持中断屏蔽处理。. 支持中断嵌套处理。. 支持中断优先级修改。.

byron
Download Presentation

第 7 章 中断与异常

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 中断与异常 张明武 scauzhang@hotmail.com 华南农业大学信息(软件)学院

  2. 7.1 中断基本概念 中断结束 中断请求 中断响应 中断服务 中断处理 7.1.1 中断基本概念 定义:CPU暂停现行程序,转而处理随机到来的事件,待处理完后再回到被暂停的程序继续执行,这个过程就是中断。 中断过程: 中断处理的隐操作:程序状态及程序断点地址的进栈及出栈。

  3. 中断系统其他功能: 支持多中断源和多种中断源。 支持中断屏蔽处理。 支持中断嵌套处理。 支持中断优先级修改。 支持中断结束方式选择。

  4. 7.1.2 中断与异常类型 SIO LPC47B27X SERIRQ 中断类型号 IRQx … 82801HB 82G965 PIRQx INTR Pentium 4/Conroe 1.外部硬件(如键盘、鼠标,串口,并口打印机等)中断 属性:硬件、可屏蔽、向量。 中断请求:多个中断请求的排队和判优由中断控制器完成,产生的有无中断请求的信号送到CPU的INTR引脚。 中断类型号:通过数据总线送到CPU中。 EFLAGS寄存器的IF位影响CPU对中断请求的响应。 处理器在当前指令执行结束的时候启动中断识别INTA总线周期。

  5. 2.不可屏蔽中断 属性:硬件、不可屏蔽、向量。 中断请求:中断请求的信号送到CPU的NMI引脚。 中断类型号:固定为2。 CPU不需要进行中断识别,直接处理中断。 NMI由0跳变到1以后要维持至少4个连续的处理器时钟周期的高电平才被识别。 NMI由1跳变到0以后要维持至少4个连续的处理器时钟周期的低电平,新的NMI中断才能被识别。

  6. 3.软件中断 属性:软件、不可屏蔽、向量。 中断请求:指令执行中或程序调用产生。 中断类型号:CPU规定或指令给出。 CPU专用中断:除0错(0)、单步(1)、断点中断(3)、溢出(O(4))、边界越界中断(5)。 BIOS中断:I/O设备控制、实用服务、特殊中断、专用参数中断。 DOS中断:公开/未公开、可调用、系统功能。 自由中断:未定义(20H~3FH中未使用的中断)。 CPU不需要进行中断识别,直接处理中断。

  7. 4.内部中断和异常 属性:软件、不可屏蔽、向量。 中断请求:指令执行中产生。 中断类型号:CPU规定。 失效(故障):错误在指令完成前,错误指令的CS:EIP压栈。该指令会重做。 陷阱:错误在指令完成后,错误指令下一指令的CS:EIP压栈。 中止:不保存,重启机器。 CPU不需要进行中断识别,直接处理中断。

  8. 7.2 Intel 8259A 7.2.1 8259A主要任务 接受外部的中断请求; 管理所有外部的中断请求(排队、判优、屏蔽、嵌套); 向CPU产生中断请求INTR信号及中断类型号; 进行中断结束处理; 接受CPU命令及返回状态。

  9. 7.2.2 8259A引脚及内部结构 1.8259A引脚 CPU侧: CS#; DB0~DB7; RD#、WR#、A0; INT、INTA#; 外设侧: IR0~IR7; 级联: SP#/EN#、 CAS0~CAS2。

  10. 2.8259A内部结构

  11. 接口电路:CPU接口、I/O接口。 … D0 D7 ISR编码 ≥1 中断屏蔽寄存器IMR 中断请求寄存器IRR IR0 比 较 器 B0 B1 B2 A>B A0 A1 A2 中断请求优先级编码器 & INT … … & & & & & & & & IR7 内部逻辑:IRR、IMR、PR、ISR及控制电路。 中断请求过程:IR->INT。

  12. CPU响应可屏蔽中断条件: 当前指令执行完毕; EFLAGS中IF=1; INTR信号有效。 中断响应过程:8259向CPU送中断类型号。 第一个INTA#,CPU封锁总线(LOCK#有效),8259A最高优先级请求对应ISR位置位,对应IRR复位。 第二个INTA#,总线解锁,ALE无效,8259A将当前中断服务程序对应中断类型号送到数据总线上。 ISR的复位在自动结束/非自动结束时不一致。 DMA传送方式比中断方式速度快(响应与传送)。 回ICW3

  13. 级联方式结构: 级联2 级联1 级联3

  14. 3.8259A工作方式 中断请求方式: 边沿触发方式:正跳变向8259A请求中断。 电平触发方式:高电平向8259A请求中断,响应中断后要及时清除高电平。 查询中断方式:外设向8259A请求中断,但8259A不向CPU发中断请求信号INT。而是将请求状态保存等待CPU来查询。 PC机初始化为边沿触发

  15. 连接总线与级联方式: 非缓冲方式:小系统中,8259A数据线直接连系统数据总线,不需要总线缓冲器,此时SP#/EN#表示级联时主/从关系。 主片:SP#/EN#接高电平; 从片:SP#/EN#接低电平。 缓冲方式:大系统中,数据总线都具有总线缓冲器,此时SP#/EN#表示数据传送方向,级联时主/从关系通过软件设定ICW4来决定。 PC机初始化为非缓冲方式

  16. 屏蔽方式: 缺省特性:自动屏蔽低于自己优先级的IR。 正常屏蔽:IMR中相应位置位; 特定屏蔽:开放比自己优先级低的IR。 优先级管理方式: 缺省特性:IR0~IR7的优先级为一循环队列。 固定优先权:从IR0~IR7降序; 轮转优先权: 自动轮转:刚被服务的IR的优先级降至最低; 指定轮转:指定的IR的优先级降至最低。 PC机初始化为缺省屏蔽特性,固定优先权

  17. 嵌套方式: 全嵌套:禁止同优先级和低优先级请求发生; 特殊全嵌套:禁止低优先级请求发生。 应用:级联时主片特殊全嵌套,从片全嵌套。 结束方式(ISR复位方式): 自动:中断响应后ISR中最高优先级位自动复位; 非自动:中断服务程序返回前,需要处理程序发出对ISR中相应位复位的中断结束命令; 不指定方式:ISR中最高优先级位复位; 指定方式:命令中指定的ISR中相应位复位。 级联结构 PC机初始化为全嵌套,非自动结束方式

  18. 4.8259A的操作功能及命令 I/O端口地址:只提供二个端口(使用A0区别); 命令:初始化--ICW1~ICW4, 操 作--OCW1~OCW3。 状态:IRR、ISR、IMR、查询字。 I/O端口操作冲突时解决方法: 信息字节中有空闲位时:特征位方法; 信息字节中无空闲位时:时序方法、读/写区分法。

  19. 8259A命令关系表(地址以PC机中为例): 注:ICWx只有在初始化过程中才会出现。

  20. (1)初始化命令ICW1 特征位:D4=1; 初始化命令ICW4主要设定嵌套、缓冲、结束方式,缺省值为全嵌套、非缓冲、非自动结束方式。 当SNGL=0,需要初始化命令ICW3来设置级联项。

  21. (2)初始化命令ICW2 时序: ICW1→ICW2→[ICW3]→[ICW4]。 IRi的中断类型号 = ICW2的高5位+i 例:如果ICW2为08H,则 IR3的中断类型号(中断向量)为08H+03H=0BH。 思考题:如果一个中断的类型号是16H,请问该中断接在IR几?该8259初始化的ICW2是多少?

  22. (3)初始化命令ICW3 级联结构 级联方式结构设置: 需要分别对主片和从片进行设置。 主片:S7~S0分别对应相应的IR号的引脚,为1的位对应的引脚接有从片; 从片:ID2~ID1的编号是该从片接到主片的IR引脚的IR号。

  23. 主 片:MOV AL, 14H OUT 21H,AL 从片1:MOV AL, 04H OUT 0A1H,AL 级联结构 从片2:MOV AL, 02H OUT 0C1H,AL 级联方式中断请求及响应过程: 非级联响应 主片请求:与非级联一致。 主片响应:收到第一个INTA#后,对从片的IR请求,在第一个INTA#下降沿从CAS线送出该IR编码;否则,在第二个INTA#返回中断类型号。 从片请求:与非级联一致,但其INT送到主片,服从主片的请求规则。 从片响应:通过CAS线译码,选中时在收到第二个INTA#后,返回中断类型号。

  24. (4)初始化命令ICW4 D0:用于8位(0)/16位(1)微机; D1:非中断自动结束(0)/自动结束(1)方式; 从片非自动结束时,主、从片均需发EOI命令。 D2:缓冲方式(D3=1)时的主从片级联位置设置, 从片(0)/主片(1) ; D3:非缓冲(0)/缓冲(1)方式; D4:全嵌套(0)/特殊全嵌套(1)方式。

  25. (5)操作命令OCW1 特征位:无,时序:无。 功能:写中断屏蔽寄存器IMR 实际上改变了中断优先级(屏蔽掉高优先级的中断请求)。 对IMR的读取在21H(主)、0A1H(从)端口做读操作。

  26. (6)操作命令OCW2 特征位:D4D3=00; 功能:结束方式和优先权轮转管理; 结束方式管理: D6D5=×0,自动结束,硬件自动清除ISR的相应位; D6D5=01,非自动结束[命令不指定清ISR的哪一位]; D6D5=11,非自动结束[命令指定清ISR的哪一位]。 优先权管理: D7=0,优先权固定;D7=1,优先权轮转。 D6的含义仍然有效

  27. 例:MOV AL, 20H OUT 20H,AL的含义?

  28. (7)操作命令OCW3 特征位:D4D3=01;

  29. 查询字格式: I=0,无中断请求; I=1,有中断请求。 W2~W0,正在申请中断的若干中断源中优先级最高的中断源的编码。

  30. 特定屏蔽管理: 设置方法: 用OCW1屏蔽部分IR[含自己], 用OCW3置SMM即可。 取消方法: 用OCW3取消特定屏蔽, 用OCW1取消被屏蔽的IR。

  31. 7.2.3 8259A初始化编程 out 20h(a0h), al 1.初始化编程步骤 out 21h(a1h), al out 21h(a1h), al out 21h(a1h), al

  32. 2.初始化编程 注意点: • 不同8259A的I/O端口地址不同; • 8259A级联时,每个8259A均必须有完整的初始化过程[端口地址和部分参数不同而已]; • 全嵌套方式时,初始IR优先级IR0最高。

  33. 例: INTM00 EQU 020H ;8259A端口0 INTM01 EQU 021H ;8259A端口1 …… MOV AL, 00010011B ;ICW1:边沿触发,要ICW4; ;单片方式,不要ICW3。 OUT INTM00, AL JMP SHORT $+2 ;I/O端口延时 MOV AL, 00001000B ;ICW2:设置中断向量,起始的 ;中断向量为08H。 OUT INTM01, AL JMP SHORT $+2 MOV AL, 00000001B ;ICW4:非缓冲,全嵌套,非自 ;动中断结束(EOI)。 OUT INTM01, AL JMP SHORT $+2 ……

  34. 思考题: MOV AL, 13H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 02H OUT 21H, AL MOV AL, 12H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 02H OUT 21H, AL 问:以上左右两段对8259的访问程序中,最后一句分别是发的什么命令?

  35. 5.2.4 微机中8259A应用(D31:F0) G2B G2A 1.PC机系统板上8259A的连接 IOW# RD# 15 1 Y0# A5 A IOR# WR# 接8288 14 2 A6 B CS# INTA# 3 13 INTA# A7 C INTR 12 INT 74LS138 接CPU 5 11 IR[7..0] A8 8259A 4 10 A9 接中断源 9 6 DB[7..0] G1 AEN# 7 Y7# 接数据线 A0 A0 接地址线 中断控制器8259A的端口地址为20H、21H

  36. 2.现代微机中ICH8中8259A级联 注意: 主、从区分; IRQ优先级; 请求与响应。

  37. ;对主片8259A的初始化 INTM00 EQU 020H ;主8259A端口0 INTM01 EQU 021H ;主8259A端口1 …… MOV AL, 00010001B ;ICW1:边沿触发,要ICW4;级联方式,要ICW3。 OUT INTM00, AL JMP SHORT $+2 ;I/O端口延时 MOV AL, 00001000B ;ICW2:设置主片的中断向量,起始的中断向量为08H OUT INTM01, AL JMP SHORT $+2 MOV AL, 00000100B ;ICW3:表示从8259A的INT输出是连接到主片的IR2。 OUT INTM01, AL JMP SHORT $+2 MOV AL, 00010001B ;ICW4:非总线缓冲,特殊全嵌套,非自动EOI OUT INTM01, AL JMP SHORT $+2 ……

  38. ;对从片8259A的初始化 INTS00 EQU 0A0H ;从8259A端口0 INTS01 EQU 0A1H ;从8259A端口1 …… MOV AL, 00010001B ;ICW1边沿触发,要ICW4;级联方式,要ICW3。 OUT INTS00, AL JMP SHORT $+2 MOV AL, 01110000B ;ICW2:设置从片的中断向量,起始的中断向量为70H OUT INTS01, AL JMP SHORT $+2 MOV AL, 00000010B ;ICW3:设置从片的识别标志,指定对应主片的IR2。 OUT INTS01, AL JMP SHORT $+2 MOV AL, 00000001B ;ICW4:非总线缓冲,全嵌套,非自动中断结束。 OUT INTS01, AL JMP SHORT $+2 ……

  39. 3.现代微机中断请求线连接 返回下页

  40. INTR SERIRQ SIO LPC47B27X IRQx … 82801HB CPU IRQ14,15 转上页 返回第65页

  41. 7.3 现代微机中的中断处理 7.3.1 中断响应过程 在当前指令结束后,可屏蔽中断根据EFLAGS寄存器IF位决定是否响应;其他中断给予响应。 中断响应的步骤如下: 1.保护断点 通过堆栈及相关硬件实现EFLAGS、CS、EIP的保护。并清除IF和TF。 压栈的顺序是EFLAGS、CS、EIP 2.取得中断类型号 对外部硬件中断通过中断响应周期取得中断类型号。 非外部硬件中断直接取得入口地址,无须第2步

  42. 3.取得中断服务程序入口地址 对向量中断,通过中断类型号查中断向量表或中断描述符表取得中断服务程序的入口地址。 4.转入中断处理程序 从中断处理程序入口地址转到中断处理程序。执行对中断的处理。 5.返回断点 恢复断点(EIP、CS、EFLAG顺序出栈)继续执行主程序。

  43. 7.3.2 现代微机中断控制 PCI INTA 两个 INTA# INTA# 中断类型号 主8259A 从8259A INTR IRQ 82801HB 内部逻辑 82G965 CPU总线 P4/Core CPU

  44. 在上面的过程中有几点注意: • 一个或多个IRQ到来的时候,置中断请求寄存器IRR的相应位 。如果中断没有被屏蔽,才可以发INTR。 • 82801BA内部产生两个周期INTA#后,第一个INTA#脉冲,有最高优先级的ISR的相应位被置上,而IRR的相应位被复位。第一个脉冲的下降沿,主中断控制器利用内部3根专用线CAS向从中断控制器发送从识别码。第二个INTA#脉冲后,主或从识别码选中的从可编程中断控制器返回中断向量。 • 结束中断响应周期时,如果在自动中断结束(AEOI)模式下,则中断服务寄存器(ISR)的相应位在第二个INTA#脉冲的末尾被复位,否则ISR相应位保持置位直到中断处理程序末尾发出EOI命令。

  45. 7.3.3 中断识别及其优先级 1.中断识别 只有外部硬件中断需要进行识别,其余不需要识别。 中断识别由中断控制器完成。 2.中断优先级 原则:按机器故障、DMA、外围硬件、软件递减。 结果:CPU专用>DMA>外围硬件>BIOS>DOS>自由。 即基本按中断向量表排序。 外围硬件一般可由用户修改其优先权。

  46. 7.3.4 中断向量表和实地址模式下中断处理程序的编写 一、 PC机中断向量表(IVT,用于实地址模式) 1) 中断向量 对应中断类型号的中断服务程序入口地址。 每个中断向量占4字节。 2) 中断向量表 按中断类型号顺序存放中断向量的存储区域。 位于内存地址0000 : 0000开始的1KB范围内。 3) 中断向量指针 指向存放中断向量地址第一字节的指针。 中断向量指针=中断类型号×4。 软件中断中自由中断的中断向量需用户自己装入。

  47. IA-32的中断向量表在存储区的最低1KB字节中,对应256种中断,每个中断向量占4个字节IA-32的中断向量表在存储区的最低1KB字节中,对应256种中断,每个中断向量占4个字节 00000 类型0的IP 类型0的CS 00004 类型1的IP 类型1的CS 4*N 类型N的IP 类型N的CS 类型0的中断向量 类型1的中断向量 类型N的中断向量

  48. 二、 实模式下中断程序编写 1. 中断编程注意点 中断编程包括主程序部分和中断处理程序部分。 1)使用正确的中断类型号 根据中断处理程序要完成的功能,选择好正确的中断类型号,如:COM1串行通信用0CH号中断,Ctrl+Break键控制中断号是1BH,注意定时器中断一般不使用08H号,而使用更安全的1CH号中断。 如果是自己定义的软中断,注意不要和系统中断类型号相重合。

  49. 2)中断服务程序入口地址的正确设置(主程序中完成)2)中断服务程序入口地址的正确设置(主程序中完成) 有两种设置中断服务程序入口地址(中断向量)的方法: 1)直接写中断向量表(假设中断向量号是0CH) CLI ; 关中断 MOV AX, 0 MOV ES, AX ; ES指向0000H段(中断向量表的段) MOV SI, 0CH*4 ; 一个中断向量4个字节 MOV AX, OFFSET SERVICE ; 中断入口偏移地址 MOV ES:[SI], AX MOV AX, SEG SERVICE ; 中断入口的段地址 MOV ES:[SI+2], AX STI ; 开中断 …… ; 中断处理子程序 SERVICE PROC FAR …… 2)使用DOS功能调用中断 MOV AX, SEG SERVICE MOV DS,AX MOV DX,OFFSET SERVICE MOV AX,250CH INT 21H

More Related