1、第七章 中断技术,1. 中断的定义 2. 采用中断技术的原因 3. 中断管理 4. 8088中断响应过程 5. 中断控制器8259,1 中断的定义,应 用:计算机在程序执行过程中,当出现硬件或软件请求时,处理器暂时停止正在执行的程序,转去对请求进行处理,处理完后,回到程序断点位置继续执行。8088支持来自外设的硬件中断请求和来自系统软件指令产生的软件中断请求。,历 史:1956年,美国,IBM公司,IBM 7049机上首先使用了中断处理技术,并开始使用“中断”(interrupt)这一术语。,2 采用中断技术的原因,当CPU和外设进行数据传送时,必须测试并确认外设处于准备好的状态才能够进行数据
2、传送。 在早期的计算机中,CPU和外设处于串行工作状态,CPU将处于时间不等的等待之中。快速的CPU和慢速的外设在传递数据的速度上存在很大矛盾,大大降低了CPU的工作效率。 引入中断技术以后,可以使CPU和外设在大部分时间里并行工作。外设接收到CPU的命令后,按自己的控制规律执行相应操作,完成后向CPU发出中断请求,CPU暂停正在执行的程序,转为对外设进行处理,处理完后返回断点处继续执行。,中断最初是为了提高处理器的使用效率和提高计算机的工作速度而引进的。中断技术可用于:保证外设和CPU同步、实时处理、故障处理等目的。,中断请求取决于事件的发生时间,而这个时间是随机的,因此在执行程序的过程中中
3、断程序的插入也是随机的。这是子程序和中断处理程序的重要区别。,3 中断管理,任何能够引发中断的事件都称为中断源。 硬件中断源:输入/输出设备,系统时钟,故障源等。 软件中断源:程序中断指令,指令运行出错等。,3.1 中断源,3.2 中断管理中的一些其它概念,中断请求:中断源向CPU发出中断信号的过程称为中断请求。对于硬件中断源必须通过专门的电路传送给CPU;CPU也有专门的引脚接收中断请求信号。8086/8088CPU用INTR引脚和NMI引脚接收硬件中断请求信号。 对于软件中断源,在CPU内部由中断指令或程序出错直接引发中断。,中断标志1、中断允许标志在CPU的标志寄存器中的IF标志。表示是
4、否可以响应外设的中断请求。“1”来表示允许。在8086/8088系统中可以用CLI和STI指令来设置IF,禁止或允许来自INTR可屏蔽中断请求引脚的中断申请。2、中断请求标志对应每个外设有一位,用来纪录外设的中断请求状态。有请求时置1,中断处理完后清0。在PC机中,用8259A来管理外设的中断请求,而在8051系列的单片机中,该标志在CPU内部。,3.2 中断管理中的一些其它概念,中断屏蔽选择性的将某些中断源的请求忽略称为中断屏蔽。即不响应该中断请求。有些硬件中断源的请求可以根据IF标志决定是否响应,而有些硬件中断源的请求需要一定被响应。在8086/8088系统中,INTR是可屏蔽中断请求引脚
5、;NMI是不可屏蔽的中断请求引脚。在PC机系统中,通过8259A管理的外设中断源连在CPU的INTR引脚上。在8259A内部有8位的中断申请寄存器和8位的中断屏蔽寄存器,可以对应于8个外设的中断申请和中断屏蔽。,3.2 中断管理中的一些其它概念,中断优先级当系统具有多个中断源时,有可能同时发出请求,由CPU按照重要性和急迫性(中断优先级别)择优响应。一般的处理原则是: 1、不同优先级同时请求,按优先级别处理。 2、低优先级中断正在处理,出现高优先级请求,转去处理高优先级请求。 3、高优先级中断正在处理,出现低优先级请求,暂不响应。 4、中断处理时,出现同级别请求,当前中断处理完以后再处理新的请
6、求。,3.2 中断管理中的一些其它概念,3.2 中断管理中的一些其它概念,中断嵌套在CPU的处理外部中断的时候,如果有更高优先级的中断请求,再转去处理高优先级的中断。这种低级中断中套着高级中断称为中断嵌套。在PC机中,可以中断嵌套。 断点与返回地址CPU在每条指令执行的最后一个时钟周期检测中断请求,如果响应中断的话,转去执行中断处理程序,程序被中断的地方称为“断点”。断点处的指令是中断处理结束后,返回时恢复执行的第一条指令。它的地址称为“返回地址”。 返回地址在中断前要入栈保护。,1、CPU在每条指令执行的最后一个时钟周期检测中断请求,如果以下之一,CPU自动进入中断响应周期。(1) 有软件中
7、断;(INT N,被0除或商溢出)(2) 有NMI中断信号;(3) 有INTR中断信号且IF=1(CPU允许响应中断) 2、进入中断响应周期以后,如果是INTR,则产生INTA信号给中断源,让中断源通过数据总线的低8位送出中断类型码给CPU;如果是NMI,类型码是2;中断指令中有类型码;程序出错有默认类型码。 3、标志寄存器进栈,清除TF和IF标志,返回地址的CS和IP进栈。,4. 8088中断响应过程,4、形成中断服务程序入口地址,转入中断服务程序执行。8088中断服务程序入口地址的获得方法中断服务程序的入口地址也称为中断向量。将中断向量送入CS:IP即可转入中断处理程序。在内存的000H3
8、FFH的1KB空间中存有256个中断向量对应于256种中断类型码,称为中断向量表。在表中按:类型码即可得到中断向量的位置,取出个字节的中断向量。,中断向量表举例,1号中断入口地址在中断向量表中的存放位置,1号中断服务程序的入口地址为: 467BH:2E34H,5、进入中断服务程序。通常由以下步骤组成:(1) 保护现场,(2) 中断处理;(3) 恢复现场,开中断STI;(4) 用中断返回指令(IRET)返回。6、中断返回从堆栈中恢复断点(返回地址的CS和IP、标志寄存器)返回到主程序继续执行。,8088只有两个用于接受外部中断请求的引脚:INTR和NMI。为了可以接收更多的外设中断请求信号,实现
9、和多个外设中断方式的IO操作,需要使用专用的中断控制器来扩展更多的中断外设。Intel 8259A就是用来管理若干个硬件中断源,将中断请求信号送给微处理器的管理芯片 例:在PC/XT机中使用8259A管理硬件中断源,将中断请求送到8088的INTR引脚,将中断类型码送到数据总线D7D0上。,5、中断控制器 8259A,CPU总 线 接 口,中断服务寄存器 ISR,优先权分析电路,中断请求寄存器 IRR,中断屏蔽寄存器IMR,控制逻辑,IR7 IR6 . . IR1 IR0,INTA INTR,5、中断控制器 8259A,8259功能综述,每片8259能接收8路中断输入。 每路中断请求都可使用I
10、MR进行屏蔽。 能为8路中断源分配8个连续的中断号。 内部有中断优先权分析电路,能实现优先权的 管理。 通过软件编程实现多种工作方式 可以级连,最多实现64路外部中断源的管理。,8259与8088和外设的连接方式,8259,8088,外设0,AD7| AD0 /WR /RD INTR /INTA,/CSA0 IR0 D7 IR1 | IR2 D0 IR3 /WR IR4 /RD IR5 INT IR6 INTA IR7,译码,INTR,I/O接口芯片,数据接口,CPU总线,8259A的工作状态和操作方式,由CPU的命令而定。命令有两种 由于8259只有一根地址线A0,所以每片8259有2个片内
11、地址A0=0和A0=1,所有的命令都是通过访问这两个端口来实现的。,配置8259的方法,ICW1 设置工作方式,对A0=0的端口写入一个D4=1的数据,表示初始化编程开始。D3:LTIM 中断信号的触发方式0:边沿 1:高电平D1:SGNL 是否单片方式0:多片级联 1:单片D0:IC4 是否有ICW40:无 1:有,注:在8086/8088系统中D7D5和D2不用,通常置0;而D0必须为1。,ICW2 设置中断类型码(中断号的分配),在写ICW1之后,对A0=1的端口第一次写入的数据是ICW2 。 在8086/8088系统中,设置D7D3,D2D0无效(由8259A根据IR0IR7自动填充为
12、000111)。 例如在PC/XT中ICW2为00001000B,则中断号:类型号 中断号:类型号IR0:08H 时钟中断 IR4:0CH COM1IR1:09H 键盘中断 IR5:0DH 硬盘 IR2:0AH 保留 IR6:0EH 软盘IR3:0BH COM2 IR7:0FH LPT1,ICW3 设置级联,系统中有级联(ICW1.SNGL=0),在ICW2之后写ICW3。对于主片:置1的位表示对应的引脚有从片级联。对于从片:用D2D0表示和主片的对应引脚级联。,ICW4 设置模式,ICW1.IC4=1时,有ICW4。 D4:SFNM 中断的嵌套方式0:一般嵌套 1:特殊的全嵌套(只用于级连)
13、 在一般嵌套方式下,优先级IR0IR7从高到底。D1:AEOI 自动结束中断方式0:不自动清除ISR 1:CPU响应中断后,自动清除ISRD0:PM 微处理器类型0:8080/8085/Z80 1:8086/8088,D3:BUF 缓冲(用于级连) 1:8259通过数据缓冲器和总线相连,SP/EN引脚输出,缓冲器选通端。 0:无缓冲,SP/EN引脚输入,用作主片、从片选择端。D2:M/S 主片/从片选择(BUF=1时,有效) 0:从片 1:主片 初始化编程一般在系统启动时进行,初始化以后系统才可以接收中断请求信号。,ICW4 设置模式,8259A芯片的初始化流程,写ICW1 A0=0,D4=1
14、,写ICW2 A0=1,SNGL=1,IC4=1,写ICW3 A0=1,写ICW4 A0=1,是,否,是,否,(一)初始化命令字,例1:PC/XT机中8259A的端口地址是20H、21H,初始化序列如下: , , , , , ,,ICW1:单片、上升沿触发、使用ICW4,ICW2:中断类型码是08H0FH,ICW4:有缓冲、非AEOI方式,例2:PC/AT机中8259A主片的端口地址是20H、21H, 从片的端口地址是A0H、A1H。初始化序列如下:,初始化主片MOV AL, 11HOUT 20H, ALMOV AL, 08HOUT 21H, ALMOV AL, 04HOUT 21H, ALM
15、OV AL, 01HOUT 21H, AL,初始化从片MOV AL, 11HOUT 0A0H, ALMOV AL, 70HOUT 0A1H, ALMOV AL, 02HOUT 0A1H, ALMOV AL, 01HOUT 0A1H, AL,ICW1,ICW2,ICW3,ICW4,PC/AT中8259A的定义主片定义为:上升沿触发、在IR2级联从片、有ICW4、非AEOI方式中断类型码为08H0FH、一般的中断嵌套方式从片定义为:上升沿触发、级联到主片的IR2、有ICW4、非AEOI方式中断类型码为70H78H、一般的中断嵌套方式,(二)操作命令字,系统初始化完成以后,可以在应用程序中进行操作编
16、程。1、OCW1 设置和清除中断屏蔽寄存器 (即如何通过软件实现对8259的8路中断源的屏蔽管理)MX=1表示屏蔽中断源IRX 例如要屏蔽IR3: IN AL , 21HOR AL , 08HOUT 21H , AL,2、OCW2 设置优先级循环方式和中断结束方式对A0=0端口写入D4D3=0 0的数据,表示是OCW2R:表示是否循环;SL:表示L2L1是否有效;EOI:中断结束命令位。在PC机中常用的是:EOI命令:MOV AL, 20HOUT 20H, AL,EOI是指End Of Interupt,其作用是清除ISR中保存的当前正在进行服务的中断号,以表示该号中断服务已经完成。这种用IS
17、R来保存当前服务的中断号,当服务完成后又用EOI来清除ISR的机制保证了中断服务的正常嵌套。,把初始化命令字和操作命令字结合进行设置, 可以有三种优先级管理方式:1、全嵌套方式(优先级固定 IR0最高IR7最低)2、自动循环方式(优先级自动循环,被响应的中断号的优先级自动变为最低)3、特殊循环方式(软件设置最低优先级),单片8259A的中断优先级管理方式:,3、OCW3 的功能有三个方面设置和撤销特殊屏蔽方式设置中断查询方式设置对8259A内部寄存器的读出。对A0=0端口写入D4D3=01的数据,表示是OCW3在PC机中常用的是: 读出 IRR:先向20H端口写0AH, 再读20H端口 读出
18、ISR:先向20H端口写0BH, 再读20H端口 读出 最高级别的中断请求 IR:先向20H端口写0CH, 再读20H端口,在8080/8085或Z80系统中1、用ICW2的D7D0和ICW1的D7D5设置中断服务程序的入口地址的A15A5,A4A0由8259A自动填充。2、用ICW1的D2设置入口地址的间隔:D2=0 间隔为8, D2=1间隔为43、在产生中断时CPU产生连续的三个INTA周期,8259A向CPU送3个字节的指令码:CALL ,入口地址低8位,入口地址高8位。,(三)8259A在其它系统中的应用,中断机制的使用要求程序的编写必须要有主程序和中断程序两部分组成: 软件主程序中断
19、服务程序 (一)在主程序中的设计保存中断向量、安装中断向量、恢复中断向量。一般有三种方法:1、用传送指令直接存取向量表。例:设置类型码是0F0H的中断向量MOV AX , 0000HMOV DS , AXMOV 0F0H 4 ,入口地址的偏移量MOV 0F0H4 + 2 ,入口地址的段地址,6、中断服务程序的设计,2、用串指令存取向量表。例:设置类型码是0F0H的中断向量MOV AX,0MOV ES,AXMOV DI,0F0H4MOV AX,入口地址的偏移量STOSWMOV AX,入口地址的段地址STOSW,3、用DOS调用存取向量表。(1) AH=35H 读取中断向量入口参数: AL=类型码
20、出口参数: ES:BX 入口地址的段地址和偏移量(2) AH=25H 设置中断向量入口参数: AL=类型码DS:DX 入口地址的段地址和偏移量,例:设置类型码是0F0H的中断向量MOV AX,SEG SVR_PROCMOV DS,AXMOV DX,OFFSET SVR_PROCMOV AH,25HMOV AL,0F0HINT 21H,(二)编写硬件中断服务程序的要点:1、主程序和中断服务程序之间最好使用内存单元传递参数; 2、在主程序中一定要将中断服务程序的地址根据其中断号填入中断向量表中; 3、若使用了8259来管理外部向8088INTR脚的中断请求,则一定要对8259进行配置。4、在服务程
21、序中用到的寄存器要保护,以避免主程序的运行受中断的影响; 5、因中断过程中系统要自动使用堆栈操作,要保证堆栈的容量足够; 6、如果8259A是使用非AEOI方式,要在程序中发EOI命令,一般是在中断服务程序的最后发EOI命令,然后用IRET返回; 7、在服务程序中一般不要调用INT 21H(DOS调用不可重入)。,(三)设计实例八8255实验3 1 方式1的应用。2 8255 PA0PA7接L1L8发光二极管;8255 PB0PB7接开关K1K8 。(接线时请先关掉电源!) 3 PC2接 (负脉冲的产生见P27图2-3),PC0接8259的IR3。 4 8259的INT连X15(8088的IN
22、TR),8259的INTA连X12(8088的INTA),8259的CS端接X22。 5 8255实验3程序代码:,CODE SEGMENTASSUME CS:CODECON8255 EQU 0FF2BHPB8255 EQU 0FF29HPA8255 EQU 0FF28HP8259COM0 EQU 0060HP8259COM1 EQU 0061HINTQ3 EQU INTREEUP3ORG 4700HSTART: MOV AL, 86H ;8255初始化MOV DX, CON8255OUT DX, ALMOV AL,05HOUT DX,AL ;中断入口地址填入中断向量表16 ;MOV AX,
23、OFFSET INTERRUPT MOV DS:002CH, AX MOV AX, 0000HMOV DS:002EH, AXMOV AL, 13H ; 8259初始化ICW1MOV DX, P8259COM0OUT DX, ALMOV AL, 08H ;ICW2MOV DX, P8259COM1OUT DX, ALMOV AL, 09H ;ICW4OUT DX, ALMOV AL, 11110111B ;OCW1OUT DX, ALL0: STIHLTJMP L0,INTERRUPT: MOV DX,PB8255IN AL,DXDEC DXOUT DX,ALMOV DX,P8259COM0 ;OCW2MOV AL,20HOUT DX,ALIRETCODE ENDS 51 END START,