《第十讲80868088CPU中断》由会员分享,可在线阅读,更多相关《第十讲80868088CPU中断(88页珍藏版)》请在金锄头文库上搜索。
1、1,第10讲 中断系统,苏 放北京邮电大学 信息与通信工程学院,2,中断的基本概念,什么是中断?,CPU,3,中断的定义,CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。,4,为何要引入中断?,提高数据传输率;避免了CPU不断检测外设状态的过程,提高了CPU的利用率。实现对特殊事件的实时响应。如多任务系统操作系统中: 缺页中断设备中断各类异常实时钟,。等,5,中断源,引起CPU中断的事件中断源。外设请求输入输出数据,报
2、告故障等事件掉电、硬件故障、软件错误、非法操作、定时时间到等中断源分为:外部中断、内部中断,6,中断源,8086/8088的外部中断信号:INTR、NMIINTR可屏蔽中断请求,高电平有效,受IF标志的控制。NMI非屏蔽中断请求,上升沿有效,任何时候CPU都要响应此中断请求信号。,7,中断过程,五个步骤:中断请求中断判优(有时还要进行中断源识别)中断响应中断服务中断返回,8,1)中断请求,外设接口(中断源)发出中断请求信号,送到CPU的INTR或NMI引脚;中断请求信号:边沿请求,电平请求例如,NMI为边沿请求,INTR为电平请求中断请求信号应保持到中断被处理为止;CPU响应中断后,中断请求信
3、号应及时撤销。在8086/8088系统中,外设的中断要经过8259A可编程中断控制器(PIC)的排队判优后向CPU发出: (I/O接口) PIC CPU,9,2.1)中断源识别,计算机中的中断源有很多,CPU必须识别是哪一个设备产生中断。识别中断源有两个方法:软件查询。将中断信号从数据总线读入,用程序进行判别。中断矢量法。由中断源提供中断类型号,CPU根据类型确定中断源。(8086/8088),10,2.2)中断判优,多个中断源产生中断,CPU首先为谁服务?中断优先级排队问题。中断优先级控制要处理两种情况:对同时产生的中断:应首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理
4、;对非同时产生的中断:低优先级别的中断处理程序允许被高优先级别的中断源所中断即允许中断嵌套。,11,中断判优,中断优先级的控制方法硬件判优链式判优、并行判优(中断向量法)软件判优顺序查询中断请求,先查询的先服务(即先查询的优先级别高)通常将中断判优与中断源识别合并在一起进行处理。x86系统中,这项任务由PIC和CPU共同完成。,12,软件判优,IN AL, PORT_R ; PORT_R是锁存器地址CLCRCR AL, 1JC INTS01 ; 转向故障处理A1:RCRAL, 1JC INTS02 ; 转向告警处理A2:INTS01:JMPA1INTS02:JMPA2,13,硬件优先权排队电路
5、,14,INTAin,CPUINTAINTR,外设1,外设2,外设接口1,菊花链逻辑电路,外设接口2,外设3,外设接口3,1,菊花链逻辑电路,菊花链逻辑电路,IREQ,IREQ,IREQ,中断确认,硬件优先权排队-链式判优电路原理图,INTAin,INTAin,中断确认,中断确认,15,菊花链逻辑电路,INTAin,IREQ,INTR,&,1,INTAout,DB,三态门,中断向量码,E,外设接口,中断确认,菊花链逻辑电路,16,3)中断响应,在每条指令的最后一个时钟周期,CPU检测INTR或NMI信号。若以下条件成立,则CPU响应中断:当前指令执行完。对INTR,还应满足以下条件当前指令是S
6、TI和IRET,则下条指令也要执行完。当前指令带有LOCK、REP等指令前缀时,则把它们看成一个整体,要求完整地执行完;对INTR,CPU应处于开中断状态,即IF=1;当前没有复位(RESET)和保持(HOLD)信号。若NMI和 INTR 同时发生,则首先响应NMI。,17,3)中断响应(续),CPU中断响应时,要做下述三项工作:向中断源发出INTA中断响应信号;断点保护,包括CS、IP和PSW(FLAGS)。这主要是保证中断结束后能返回被中断的程序。获得中断服务程序首地址(入口)。如何得到中断处理程序的首地址?固定入口法中断向量法常用,18,4)中断处理(中断服务),中断服务子程序特点为”远
7、”过程(类型为FAR)要用IRET指令返回中断服务子程序要做的工作保护现场(PUSH regs) 开中断(STI) 进行中断处理 恢复现场(POP regs) 中断返回(IRET),19,5)中断返回,执行中断返回指令IRETIRET指令将使CPU把堆栈内保存的断点信息弹出到IP、CS和FLAG中,保证被中断的程序从断点处能够继续往下执行。,IPL,IPH,CSL,CSH,FLAGL,FLAGH,SP,IPL,IPH,CSL,CSH,FLAGL,FLAGH,SP,IP,CS,FLAG,进入中断服务程序时,中断返回后,20,8086/8088的中断系统,与中断有关的控制线为:NMI、INTR、I
8、NTA8086系统的中断源(256个)内部中断软件中断:即INT n指令,类型号n(0-255)。除法溢出:类型号0,商大于目的操作数所能表达的范围时产生。单步中断:类型号1,TF=1时产生(当前指令需执行完)断点中断:类型号3,这是一个软件中断,即INT 3指令。溢出中断:类型号4,这是一个软件中断,即INTO指令。外部中断非屏蔽中断NMI:类型号2,不可用软件屏蔽,CPU必须响应它。可屏蔽中断INTR:类型号由PIC提供。IF=1时CPU才能响应。,中断优先权从高到低的顺序是:除法溢出中断INT n INTO NMI INTR 单步中断,21,NMI,INTR,中断逻辑,软件中断指令,溢出
9、中断,除法错,单步中断,非屏蔽中断请求,中断控制器8259APIC,8086/8088CPU内部逻辑,断点中断,8086/8088中断源类型,可屏蔽中断请求,n,4,3,0,1,2,22,中断源的识别,8086系统采用中断类型码来识别不同的中断源,每个中断源都有一个与它相对应的中断类型码 。溢出、断点、除法溢出、单步、非屏蔽中断的类型码为固定值软件中断的类型码由指令给出可屏蔽中断的类型码由PIC给出,23,中断源的识别,CPU响应INTR中断时,会产生两个中断响应总线周期,要求PIC在第2个中断响应总线周期把中断类型码放到数据总线上,供CPU读入。,24,中断向量和中断向量表,中断响应后,CP
10、U通过中断类型号找到中断向量表,进而找到中断服务程序。 中断向量 存放各类中断的中断服务程序的入口地址(段和偏移)它提供一个指向中断处理子程序的起始地址。中断向量表 :将所有的中断处理服务程序的入口地址都集中在一起,构成一个中断地址的存放表,即中断向量表。,位于内存的00000H003FFH,大小为1KB,共256个中断向量,每个中断向量占用4 Bytes,低字为段内偏移,高字为段基址。,25,根据中断类型号获得中断服务程序入口,方法: 中断向量在IVT中的存放地址4n,26,中断类型和中断向量表,8086中断处理流程 CPU在获得中断类型号后,先自动将FR入栈,并自动将IF和TF清零。 自动
11、将当前CS和IP内容入栈,根据中断类型号n从中断向量表中取出中断处理程序的段地址送入CS,偏移地址值送入IP,从而实现向中断处理程序转移。 在中断处理程序完成后,用中断返回指令IRET恢复断点,弹回IP和CS,并恢复FR的内容,实现向被中断程序的返回。,27,例,例:设某中断源的类型码为4AH,试画出求中断服务处理程序的示意图。 解: 中断向量表指针为4*n=4*4AH=128H,即:0000:0128H。 通过中断向量表,中断服务程序的入口地址为0F000H:1806H。,28,例,29,初始化将中断服务程序的入口地址放入向量表(1)直接写入法。使用指令将中断服务程序入口地址的IP写入n4的
12、RAM位置,中断服务程序入口的CS写入n4+2的位置。,中断向量表的初始化,30,例,例 若中断类型号n=70H,中断服务程序的过程名是INTSUB。借助伪指令和传送指令,将中断服务程序入口地址写入中断向量表。,VECDATASEGMENTAT 0ORG70H*4 LOCA_70 DW2 DUP (?)VECDATAENDS ININTSEGMENTMOVLOCA_70, OFFSET INTSUBMOVLOCA_70+2, SEG INTSUB,31,中断向量表的初始化,例:中断类型码为48H的中断处理子程序的名字为int 48h,编写程序段将该中断处理子程序的入口地址放入向量表。,32,中
13、断向量表的初始化,CLI MOV AX,0 MOV DS,AX MOV SI,48H*4 MOV AX,OFFSET int48h MOV SI,AX MOV AX,SEG int48h MOV SI+2,AX STI,33,中断向量表的初始化,(2)利用DOS功能调用写、读中断向量表。DOS功能调用25H用来写中断向量表。入口参数是: AL:中断类型号; DS:中断服务程序入口的段地址; DX:中断服务程序入口的偏移地址。DOS功能调用35H用来读中断向量表入口、出口参数: AL:中断类型号; ES:读出的中断服务程序入口的段地址; BX:读出的中断服务程序入口的偏移地址。,34,例,例 设
14、中断类型号为70H,中断服务程序是INTSUB,用DOS功能调用25H将中断服务程序入口地址写入中断向量表。解:相关的程序段如下:PUSHDSMOV AX, SEG INTSUBMOV DS, AXLEA DX, INTSUBMOVAL, 70HMOVAH, 25HINT21HPOPDS,35,8086/8088 CPU的中断响应过程,内部中断响应过程 无INTA周期中断类型码固定或由指令给出响应过程主要步骤: PUSH FLAG IF=0 PUSH CS PUSH IP 取中断向量送入IP和CS,36,中断响应过程(续),外部中断响应过程非屏蔽中断,与内部中断响应过程类似 可屏蔽中断 INTA(1),PIC进行优先级排队判优处理 INTA(2),PIC把中断类型码放到DB上,CPU读入 PUSH FLAG IF=0 PUSH CS PUSH IP 取中断向量送入IP和CS,与内部中断一样,37,N,Y,N,Y,N,N,N,N,N,Y,Y,执行指令,执行完否?,取指令,IF=1?,内部中断?,