第七章中断系统2掌握:中断的基本概念中断响应的一般过程中断向量表及其初始化8088/8086中断系统可编程中断控制器8259A中断调用3一、中断的基本概念中断:CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。4中断源引起CPU中断的事件,发出中断请求的来源。内部中断外部中断异常中断软件中断可屏蔽中断非屏蔽中断异常事件引起中断指令引起INTR中断NMI中断5引入中断的原因提高数据传输率;避免了CPU不断检测外设状态的过程,提高了CPU的利用率。实现对特殊事件的实时响应。6中断系统正确识别中断请求,实现中断响应、中断处理及中断返回;实现中断优先级排队;实现中断嵌套中断系统是指实现中断功能的软硬件的统称。功能有:中断系统的功能实现中断及返回中断源发出中断请求,CPU决定是否响应:若响应,则保护断点和现场,转入相应中断服务程序,中断服务结束后,恢复现场和断点,继续执行原程序。CPU执行中断服务程序1非预料事件17◆非预料事件是指事件发生的时间无法预知,即中断源何时产生中断不确定,是随机的。◆中断源产生中断的随机性,使中断服务程序的执行也具有随机性,即何时执行中断服务程序不是在程序中安排好的。中断系统的功能(续)8实现优先权排队按各中断请求的重要程度排列CPU响应的次序称为中断优先级。即同时有多个中断请求到来时,CPU会首先响应和处理优先级别最高的中断请求。中断优先级的实现可以用软件或硬件的办法。中断系统的功能(续)9实现中断嵌套:当CPU在处理某一级中断时,若有高一级的中断请求,中断系统应能安排CUP暂时停止现行的中断处理,响应高一级的中断中断系统的功能(续)1011二、外部中断响应的一般过程中断请求中断源识别及中断判优中断响应中断处理(服务)中断返回12中断请求中断请求信号应保持到中断被处理为止;CPU响应中断后,中断请求信号应及时撤销。NMI(非屏蔽中断)INTR(可屏蔽中断)13中断源识别软件查询法中断矢量法由中断源提供中断类型号,CPU根据类型确定中断源。中断源识别及判优由硬件系统完成14中断判优当有多个中断源同时提出请求时,需要确定首先响应哪一个中断源。优先级法则低优先级的中断程序允许被高优先级的中断源所中断排队法则先来先响应中断嵌套15中断判优软件判优顺序查询中断请求,先查询的先服务即先查询的优先级别高硬件判优链式判优、并行判优(中断向量法)16中断响应向中断源发出INTA中断响应信号;关中断保护硬件现场将FLAGS压入堆栈保护断点将CS、IP压入堆栈获得中断服务程序入口地址由硬件系统完成17中断处理保护现场执行中断服务程序恢复现场中断服务程序的特点:为“远过程”用IRET指令返回18中断服务子程序完成的工作关中断,保护现场,保护断点,找入口地址保护软件现场(参数)开中断(STI)中断处理关中断(CLI)恢复现场中断返回19中断返回执行IRET指令,使IP、CS和FLAGS从堆栈弹出如要实现中断嵌套,则在保护现场后,要执行开中断指令恢复断点和硬件现场中断处理过程流程20中断请求识别中断源关中断保护硬件现场保护断点确定中断服务程序入口地址保护软件现场开中断执行中断服务程序关中断恢复软件现场恢复断点开中断中断返回恢复硬件现场当前CPU正在进行某一优先权级别的中断源的处理;有更高级别的中断源发出请求,且新中断源满足响应条件;CPU中止当前的中断服务程序,保护断点和现场,转而响应高级中断这种多级中断的处理方式即为“嵌套”。某些中断系统对中断嵌套的层数有一定限制。中断嵌套21高级中断源能中断低级的中断处理当CPU正在处理某个中断时,如果外部又有一个优先级别比本优先级别更高的中断请求,则可以实现中断嵌套。22中断嵌套CPU正常执行中断服务程序1非预料事件1中断服务程序2非预料事件2中断嵌套示意图23中断服务程序(用户自行编制):保护现场:保存CPU内部各寄存器的内容,以便在服务程序中使用;开总中断:将IF置1,使CPU在中断服务期间仍能响应更高级的INTR请求;具体处理:用户的中断服务……关总中断:将IF位清0;恢复现场:将入栈保护的各寄存器内容依次弹出;中断返回:执行IRET指令,CPU将自动弹出给IP、CS、FLAGS,就可以接着执行被中断的原程序;开总中断:再次将IF位置1,使返回后能够重新响应……24257.28086中断系统内部中断外部中断异常中断软件中断非屏蔽中断可屏蔽中断256个中断源除法错中断溢出中断单步中断…根据8086内部的中断逻辑电路,各种中断源的优先权顺序为:被0除中断→软件中断→INTO→NMI→INTR→单步中断。CPU内的中断逻辑NMI自动产生的中断除法错单步(TF=1)软件中断INTnINTOCPU内部8259AINTRIRQ1键盘IRQ2彩色/图形接口IRQ3保留(串口)IRQ4串口IRQ5保留(LPT)IRQ0系统定时器IRQ7LPTIRQ6软盘8086中断系统26中断类型码、中断向量表和中断向量中断类型码:8086可以处理256个中断请求,每个中断请求均对应于惟一固定的类型码。被0除类型码是0,单步为1;NMI为2;断点中断为3,溢出中断为4……等。中断向量:即中断服务程序的入口地址,包括段地址(高字单元)和偏移地址(低字单元)。中断向量表:存放中断向量的表,位于内存空间的最低地址单元,长1KB。共可容纳256个中断向量(256×4=1024)。27中断类型码一、中断类型码:8086可以处理256个中断请求。每个中断请求均对应于唯一固定的类型码。被0除类型码是0,单步为1;NMI为2;断点中断为3,溢出中断为4;等。类型码中断源类型码中断源类型码中断源00H被0除0FH并口1(打印机)中断1EH磁盘参数01H单步中断10H显示器驱动程序1FH图形字符集02HNMI11H设备检测20H程序结束03H断点中断12H存储器检测21HDOS系统调用28IBMPC/XT中断源的功能类型码中断源类型码中断源类型码中断源00H被0除0FH并口1(打印机)中断1EH磁盘参数01H单步中断10H显示器驱动程序1FH图形字符集02HNMI11H设备检测20H程序结束03H断点中断12H存储器检测21HDOS系统调用04H溢出中断13H软盘驱动程序22H结束地址05H打印屏幕14H通信驱动程序23HCtrl-Break夭折键处理06H(保留)15H盒式磁带机驱动程序24H关键性错误处理07H(保留)16H硬盘驱动程序25H磁盘顺序读08H定时中断17H打印机驱动程序26H磁盘顺序写09H键盘中断18HBASIC程序27H程序结束且驻留内存0AH保留的硬件中断19H引导(BOOT)程序28HDOS内部使用0BH异步串口2中断1AH年月日定时中断29~2EHDOS保留使用0CH异步串口1中断1BH用户键盘2FHDOS内部使用0DH并口2(硬磁盘)中断1CH用户定时器时标30~3FHDOS保留使用0EH软盘中断1DHCRT初始化参数40~FFH用户自定义INTRBIOS可调用DOS可调用291、非屏蔽中断(NMI):不受中断标志位的控制,中断类型号为2,所以中断向量放在0000:0008开始的4个单元中。NMI中断一般用于紧急情况的处理,不受中断标志位IF影响。2、可屏蔽中断(INTR):受中断标志位的控制,IF=1,CPU才能响应INTR中断。CPU响应INTR中断时,往INTA引脚上发两个负脉冲,外设接到第二个负脉冲后,立即往数据总线上送出中断类型码,供CPU读取。1、外部中断——硬件中断30外部中断源的管理多个外部硬件中断源共用一条INTR线时,要在程序中采取一定措施或用外部硬件解决中断源的优先权排列和多级中断的嵌套等。中断优先权(优先级):中断优先权就是为每个中断源所确定的响应级别。软件排序:CPU响应中断后,在程序中用查询的方法判定外设的中断请求。32外部中断源的管理软件查询排序的特点是:查询次序即优先权排序,最先被询问的故障具有最高优先级;节省硬件;修改方便,只要改变程序中的查询次序即可;由询问转至真正的服务程序入口时间长,在中断源较多的情况下执行速度较慢。硬件排序:采用优先权的编码电路,对各种外部硬中断进行排队。还有菊花链式硬件排序电路,以及中断控制集成芯片8259A33342、内部中断——软件中断内部中断指由指令的执行或软件对标志寄存器中某个标志的设置产生的中断专用中断指令中断内部中断的种类(1)除法出错中断类型号为00H除法出错中断既不是外部硬件产生,也不是用软件指令产生,而是CPU自身产生的,因此0型中断没有对应的中断指令,即指令系统中没有INT0这条指令。3536对单步中断要注意三点:一、所有类型的中断在其处理过程中,CPU会自动地把标志寄存器FLAGS压入堆栈,然后清除TF和IF。因此当CPU进入单步中断处理程序时,就不再处于单步工作方式,而以正常方式工作。只有在单步处理结束时,从堆栈中弹出原来的标志,才能使CPU又回到单步方式。(IF=1,TF=1)二、通常程序编制好后,在DEBUG调试程序时可使用单步中断检查程序,是通过跟踪命令TF来实现单步运行。(2)单步中断(陷阱中断)类型号为01H37三、8086/8088指令系统中没有设置或清除TF标志的指令,但指令系统中的PUSHF和POPF为程序员提供了置位或复位TF的手段。置位和复位TF的程序段如下所示:(2)单步中断(陷阱中断)类型号为01H内部中断的种类置位TF标志(D8=1)PUSHFPOPAXORAX,0100HPUSHAXPOPF;复位TF标志PUSHFPOPAXANDAX,0FEFFHPUSHAXPOPF(2)单步中断(陷阱中断)类型号为01H38内部中断的种类39(3)断点中断类型号为03H设置断点实际上是把一条断点指令INT3插入程序中,CPU每执行到断点处的INT3指令便产生一个中断。(4)溢出中断类型号为04H在执行溢出中断指令INTO时,若标志寄存器FLAGS中的溢出标志OF=1,则产生一个类型号为4的内部中断,称为溢出中断。内部中断的种类对带符号数来说,溢出就意味着出错(加、减运算),一旦产生应立即发现,而CPU并不知道当前处理的数据是无符号数还是带符号数,只有程序员才明确这一点。因此通常在带符号数的加、减法运算后面总是跟着INTO指令40(4)溢出中断类型号为04H41如下面的指令用来测试加法的溢出:ADDAX,VALUINTO当标志寄存器的OF=0时,则INTO指令不产生中断,CPU继续运行原程序;当OF=1时,进入溢出中断处理程序,打印出一个出错信息,在处理程序结束时,不返回原程序继续运行,而是把控制交给操作系统。(4)溢出中断类型号为04H42(5)指令中断在8086/8088的指令系统中,当CPU执行中断指令INTn时,也能形成内部中断,其中n在理论上可取值0~255。当n=0、1、3、4时,就是上述的四种内部中断。内部中断的种类内部中断的特点(1)除单步中断以外,所有内部中断都不能被屏蔽。(2)所有内部中断不从外部接口中读取中断类型号也不发送中断响应信号,即不执行中断响应的总线周期。(3)指令中断没有随机性,外中断是随机性的。指令中断是由程序中指令引起的,指令位置事先已知。外中断是随机性的,由I/O设备引起,何时引起事先未知。4344(4)除单步中断外,所有内部中断的优先权都比外部中断的优先权高。内部中断的特点8086中断的优先级别:内部中断(单步中断除外)非屏蔽中断可屏蔽中断单步中断IBMPC/XT中断源的功能类型码中断源类型码中断源类型码中断源00H被0除0FH并口1(打印机)中断1EH磁盘参数01H单步中断10H显示器驱动程序1FH图形字符集02HNM