您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 第9章 微机中断系统(施庆平)A
第9章微机中断系统中断系统是冯·诺依曼结构计算机的一项重要技术,尤其为解决当前高速运算CPU与低速外部设备信息交换之间的矛盾提供了手段。它也是提高计算机工作效率的一种重要手段。对于那些信号变化是随机的、而且要求快速响应和处理的、实时要求高的应用场合,中断更是一种不可缺少的功能。8086/8088系列有功能很强的中断系统,它可通过8259A可编程中断控制器来实现。本章首先介绍了中断系统的基本概念:中断、中断系统、中断向量、中断向量表、中断处理过程、中断优先权与中断嵌套,然后对8086CPU的中断系统进行了介绍,最后对8259A可编程中断控制器的原理及其应用作了重点讨论。9.1中断系统的基本概念9.1.1中断与中断系统功能1.中断基本概念“中断”是一种信号,它告诉微处理机已发生了某种需要特别注意的事件,需要去处理或为其服务。中断是这样一个过程:当CPU内部或外部出现某种事件(中断源)需要处理时,中止正在执行的程序(断点),转去执行请求中断的那个事件的处理程序(中断服务程序),执行完后,再返回被暂时中止执行的程序(中断返回),从断点处继续执行。2.中断系统及其作用、功能中断系统是实现中断功能的软、硬件的集合。整个中断过程由计算机的中断系统配合用户设计的中断服务程序来实现。中断系统在微机中可以有以下作用:(1)实现并行处理;(2)实现实时处理;(3)实现故障处理。微机的中断系统应具有以下功能:(1)中断响应:当中断源有中断请求时,CPU能决定是否响应该请求。(2)断点保护和中断处理:在中断响应后,CPU能保护断点,并转去执行相应的中断服务程序。(3)中断优先权排队:当有两个或两个以上中断源同时申请中断时,应能给出处理的优先顺序,保证先执行优先级高的中断。(4)中断嵌套:在中断处理过程中,发生新的中断请求,CPU应能识别中断源的优先级别,在高级的中断源申请中断时,能中止低级中断源的服务程序,而转去响应和处理优187第9章微机中断系统先级较高的中断请求,处理结束后再返回较低级的中断服务程序,这一过程称中断嵌套或多重中断。3.中断源及其分类在中断系统中能引起中断的事件称为中断源。中断源可以是外部事件(由CPU的中断请求信号引脚输入),也可以是CPU内部事件(由软件引起)。根据其用途分,一般有:(1)外部设备中断源,如中断传送接口外设,实时时钟等;(2)硬件故障中断源,如电源掉电;(3)软件中断源,如运算错、程序错、中断指令等。根据是否可屏蔽分为:(1)可屏蔽中断源:可通过指令确定CPU当前是否响应的(外部)中断源;(2)非屏蔽中断源:一旦发生,CPU必须响应的(外部)中断源。9.1.2中断向量与中断向量表1.中断向量中断处理过程是中断系统按一定的步骤在硬件和软件的结合下完成的。当外部中断源共用一个中断请求引脚向CPU提出中断请求时,首先是中断源的识别问题。中断源的识别可通过向量中断或中断查询来完成。中断查询方式是CPU在接到中断请求信号后响应中断,立即执行中断服务程序,在服务程序中首先查明哪个中断源在申请中断,再执行相应的中断服务程序段。该方法能同时实现中断优先权排队(先查询的优先),接口电路简单,但需要查询端口且处理滞后一步,影响了实时性。向量中断也叫矢量中断,是CPU响应中断时通过中断响应信号选通中断接口,中断接口将中断向量号送至数据总线,CPU通过它获知中断程序入口地址,转去执行该中断服务程序。在向量中断中,每个中断服务程序都有一个确定的入口地址,该地址称为中断向量。2.中断向量表把系统中所有的中断向量集中起来放到存储器的某一个区域内,这个存放中断向量的存储区就叫中断向量表或中断服务程序入口地址表,换言之,每个中断服务程序与该表内的一个中断向量建立一一对应关系,由于中断向量表的每一个向量的序号就是中断号,因此,中断向量表是中断号与该中断号相应的中断服务程序入口地址之间的连接表。PC系列微机的存储器的0000H~03FFH共1024个地址单元作为中断向量存储区,每个中断向量需占用4个字节的地址空间,所以,可容纳256个中断向量,即可处理256个中断服务程序。(中断向量的具体应用见后面的介绍)9.2中断处理过程9.2.1中断处理过程微型机原理及应用188中断处理过程,也叫中断过程,一般包含以下五个步骤:中断请求、中断判优、中断响应、中断处理以及中断返回。1.中断请求由中断源发出中断请求信号,外部由硬件产生,内部由指令产生。2.中断判优如果有两个或两个以上中断源同时发出中断请求,要根据中断优先权,找出最高级别的中断源,首先响应其中断请求,处理完后再响应较低一级的中断源。如果中断源发出中断请求时,CPU正在执行中断服务程序,则应允许优先权高的中断源中断低一级的中断服务程序,实现中断嵌套。3.中断响应CPU接到外部可屏蔽中断请求信号后,在满足一定条件下,就进入中断响应周期。CPU响应外部可屏蔽中断的条件是:(1)接收到有效的中断请求信号;(2)CPU开放中断(对8086CPU来讲,中断标志IF是“1”);(3)CPU执行完当前指令。CPU响应中断后,将自动完成以下处理:(1)关中断(8086CPU清IF)。因为CPU响应中断后,要进行必要的中断处理,在此期间不允许其它中断源来打扰。(2)断点保护。对于8086CPU来讲,是把断点地址CS和IP及标志寄存器FR自动压入堆栈。(3)形成中断入口地址。CPU响应中断后,根据判优逻辑提供的中断源标识,获得中断服务程序的入口地址,转向对应的中断服务程序。8086的中断响应周期占用2个总线周期,操作时序已在7.3.5详细讨论。4.中断处理中断处理也叫中断服务,是由中断服务程序完成的。中断服务程序一般应由以下几部分按顺序组成:(1)保护现场:用入栈指令把中断服务程序中要用到的寄存器内容压入堆栈,以便返回后CPU能正确运行原程序,断点地址是由硬件自动保护的,不用在中断服务程序中保护。(2)CPU开放中断:以便执行中断服务时能响应高一级的中断请求,实现中断嵌套。需要注意的是:用STI指令开放中断时,是在STI指令的后一条指令执行完后,才真正开放中断。中断过程中,可以多次开放和关闭中断,但一般只在程序的关键部分才关闭中断,其它部分则要开放中断以允许中断嵌套。(3)中断服务程序:执行输入/输出或事件处理程序。(4)CPU关中断:为恢复现场做准备;(5)恢复现场:用出栈指令把保护现场时进栈寄存器内容恢复,注意应按先进后出的189第9章微机中断系统原则与进栈指令一一对应。出栈后,堆栈指针也应恢复到进入中断处理时的位置。(6)CPU开放中断:保证返回后仍可响应中断。(7)中断返回:8086CPU必须根据中断结束方式,发中断结束指令,并在最后用一条中断返回指令IRET。5.中断返回自动返回到断点地址,继续执行被中断的程序。对8086CPU也就是断点地址CS和IP自动出栈。值得注意的是,有些微处理器,如MC6800保护现场是由硬件自动完成的,而恢复现场,开中断、中断返回用一条返回指令IRET完成。9.2.28086/8088中断系统1.8088/8086中断类型8086/8088有一个简单而灵活的中断系统,采用向量型中断结构,可以处理多达256个不同类型的中断请求。CPU的中断源有两类,内部中断和外部中断,外部中断又分为非屏蔽中断NMI和可屏蔽中断INTR。(1)内部中断内部中断是由CPU内部事件引起的中断。如执行一条软件中断指令或单步中断标志TF为1时,执行任意一条指令,都可引起中断。因此内部中断也称软件中断,包括溢出中断、除法出错中断、单步中断、断点中断4个由内部硬件设置或自动引发的中断和指令设置的中断(内部软件中断)。①溢出中断溢出中断是在执行溢出中断指令INTO时,若溢出标志OF为1,产生一个向量号为4的内部中断。溢出中断为程序员提供一种处理算术运算出现溢出的方法,通常和带符号数的加、减法指令一起使用。②除法出错中断除法出错中断是在执行除法指令(无符号数除法指令DIV或带符号数除法指令IDIV指令)时,若除数为0或商大于目的寄存器所能表达的范围(对带符号数,单字节数为-128~+127,双字节数为-32768~+32767,对无符号数,单字节数为0~255,双字节数为0~65535,),产生一个向量号为0的内部中断。0型中断没有相应的中断指令,也不由外部硬件电路引起,故也称“自陷”中断。③单步中断单步中断是当单步中断标志TF为1时,在每条指令执行结束后,产生一个向量号为1的内部中断。在中断过程中,CPU自动把标志寄存器FR压入堆栈,然后把TF和IF清零,以正常方式工作,中断过程结束时,从堆栈中自动弹出标志寄存器FR的内容,TF恢复为1,又恢复单步中断工作方式。单步中断是为调试程序而设置的。如DEBUG中的跟踪命令,就是将TF置1。微型机原理及应用1908086/8088没有直接对TF置1或清0的命令,可修改存放在堆栈中标志内容,再通过POPF指令改变TF的值。④断点中断断点中断是指令中断中的一个特殊的单字节INT3指令中断,执行一个INT3指令,产生一个向量号为3的内部中断。断点中断常用于设置断点,停止正常程序的执行,转去执行某种类型的特殊处理,用于调试程序。⑤指令中断指令中断是执行INTn时,产生一个向量号为n的内部中断,为两字节指令,INT3除外。INTn主要用于系统定义或用户自定义的软件中断,如BIOS功能调用和DOS功能调用。内部中断向量号除指令中断由指令指定外,其余都是预定好的,因此都不需要传送中断向量号,也不需要中断响应周期。(2)外部中断外部中断也叫硬件中断,是CPU外部中断请求信号引脚上输入有效的中断请求信号引起的,分为非屏蔽中断NMI和可屏蔽中断INTR二种。①非屏蔽中断NMI非屏蔽中断NMI是由NMI引脚上输入有效的中断请求信号引起的一个向量号为2的中断。NMI用来通知CPU发生了致命性事件,如电源掉电、存储器读写错、总线奇偶位错等。NMI是不可用软件屏蔽的,而且是上升沿触发的,中断类型号预定为2,不需要中断响应周期。在IBMPC系列机中,NMI用于处理存储器奇偶校验错、I/O通道奇偶校验错以及8087协处理器异常中断等。②可屏蔽中断INTRCPU的INTR引脚通常由8259APIC的INT输出信号驱动,8259A又与需要请求中断的外设相连。在外设发出中断请求信号时8259A根据优先权和屏蔽状态,决定是否发出INT信号。外设的中断请求信号必须在中断请求信号被接受前保持有效。而CPU对INTR信号是在每条指令的最后一个时钟周期采样的。接到有效的INTR信号后,CPU是否响应该中断请求,取决于中断允许标志位IF的状态。若IF=1,CPU开放中断,则响应,否则不响应。因此,要响应INTR的中断请求,CPU必须开放中断。8086/8088设有对中断标志位IF置1或清0的指令,STI指令给IF置1,CPU开中断;CLI指令给IF清0,CPU关中断。除了CPU开、关中断之外,外设的中断请求是否被传送到CPU还受到中断控制器的控制,如8259A设有中断屏蔽寄存器,可对接于其上的每一个外设的中断请求屏蔽或开放,有选择地允许中断响应。中断屏蔽寄存器的内容可以由CPU通过命令写入。如果出现中断嵌套的情况,只有满足中断嵌套条件才能发出中断请求信号。2.中断向量表8086/8088系统中,在内存的最低1KB(00000H-003FFH)地址范围建立了一个中断向191第9章微机中断系统量表,如图9.1所示,每个中断向量占用4个存储单元,4个单元中的前2个单元存放的是中断服务程序所在段内的偏移量(IP的内容,16位地址),低位字节存放在低地址,高位字节存放在高地址;后2个单元存放的是中断服务程序所在段的段基地址(CS的内容,16位地址),存放方法与前2个单元相同。CPU响应中断时,从中断向量表中查出中断向量地址,再从该地址中取出内容分别装入IP和CS,从而转去执行相应的中断服务程序。中断向量在表中的位置称为中断向量地址,中断向量地址与中断类型号的关系为:中断向量地址(首地址)=中断类型号*4如类型号为20H,
本文标题:第9章 微机中断系统(施庆平)A
链接地址:https://www.777doc.com/doc-3972393 .html