第八章微机的中断系统教学目标:1.掌握中断的基本概念2.掌握中断的作用及分类3.掌握中断响应的一般过程4.了解中断向量表及使用5.了解8088系统中中断的控制系统教学重点:1.中断的基本概念、作用及分类2.中断响应的一般过程3.中断向量表及使用4.8088系统中中断的控制系统教学难点:1.中断响应的一般过程2.中断向量表及使用3.8088系统中中断的控制系统第一节中断系统的概述一、中断的基本概念1.中断在CPU执行程序中,由于某种事件的发生,强迫CPU暂时停止正在执行的程序而转向对该发生的事件进行处理,当对事件的处理结束后又能回到原中止的程序,接着中止前的状态继续执行原来的程序,这一过程称为中断。2.中断源能够向CPU发出中断请求的中断来源或者是引起中断的事件。3.常见的中断源常见的中断源主要就是内部中断源和外部中断源两类。中断事件事件是由处理器内部产生的,这类中断源称其为内部中断源。例如,当CPU进行运算时,除数太小,商无法表示或运算发生溢出或执行软件中断指令等情况都认为是内部中断。当中断事件是由处理机外部设备产生,这类中断源称为外部中断源。例如,某些外设请求输入输出数据,硬件时钟定时到;某些设备出现故障等等均属于这种情况。外部中断源产生引起中断的事件,事件发生后,如何告诉CPU以便让它做出处理呢?在CPU上有两条输入信号线:INTR和NMI。外部中断源就是利用INTR和NMI加到CPU上的。INTR通常称为可屏蔽中断输入信号,高电平有效—表示外部中断源提出的中断请求。CPU能否响应该信号,还要受到标志位寄存器IF的控制。当IF=1时,CPU在一条指令执行完成后对它做出响应。当IF=0时,CPU不予响应,该中断请求被屏蔽。因此,INTR称为可屏蔽中断请求。通常又称IF=0时,CPU处于关中断状态,IF=1时,CPU处于开中断状态。NMI称为非屏蔽中断请求信号,上升沿有效。它不受标志位IF的约束。只要CPU在正常地执行程序,它就一定会响应NMI的请求。二、中断系统的功能1.中断响应中断系统的第一个功能是在微机工作期间,随时响应在各种情况下引起的中断请求。2.中断处理中断系统的第二个功能是微机响应了微机的中断请求,就中断当前的任务去执行中断服务程序,进行中断处理。三、中断的作用与用途在微机中的中断现象是非常普遍的,除了非屏蔽中断,是不可抗拒的外,更多的可屏蔽中断的设置是为了将微机进行有条不乱的工作。在许多时候为了工作的需要,要暂时中断当前的工作,去执行其他的任务,之后再去执行前面中断的工作。这就是微机中的中断的作用和用途。四、中断源的分类内部中断源(溢出中断、除法出错中断、INTn)中断源外部中断源五、中断响应的一般过程1.中断请求当外部设备要求CPU对它的服务时,产生一个有效的中断请求信号,注意是一个电平信号加到CPU的的中断请求输入端,即可对CPU提出中断请求。INTRNMI2.中断承认CPU在每条指令的最后一个时钟周期检测中断请求输入端有无请求发生,然后决定是否对它做出响应.CPU承认一个中断请求,必须满足以下四个条件:(1)一条指令执行结束。(2)CPU处于开中断状态。只有CPU的IF=1开中断时CPU才有可能响应可屏蔽中断请求.(3)没有发生复位(RESET),保持(HOLD)和非屏蔽中断请求(NMI)。(4)开中断指令(STI)、中断返回指令(IRET)执行完,还需在执行一条指令才能响应INTR请求。3.断点保护在响应中断的过程中,CPU硬件对断点进行保护。只是不同的CPU断点保护的内容略有不同。8088CPU在中断响应时硬件自动关中断、将标志寄存器压入堆栈进行保护、将CS和IP的内容压入堆栈加以保护。一般说,在断点处,在许多应用中,要保证中断后返回被中断的程序,并能正常运行,仅靠CPU硬件自动保护的寄存器内容是不够的。所以,在中断服务程序开始时,应由用户通过软件去保护那些中断响应中CPU硬件没有保护,而对被中断的程序来说,又需要保护的那些寄存器内容。4.中断源识别当只有一个中断源时,只要中断发生,则一定是该中断源提出的中断请求。CPU即可对它进行服务。当多个中断发生时,一旦中断请求发生,CPU必须判断是哪一个中断源提出的请求,只有将中断源找到,才能针对提出的请求的中断源对其进行服务。确定中断源的方法:软件查询和中断矢量法。5.中断服务在确定了中断源后,就进入了中断的响应时期,就是去执行响应的中断服务程序。我们将用户进行中断处理所编写的程序统统称为中断服务程序。这些程序包括断点保护—是指在中断响应过程中CPU硬件未能保护的那些寄存器的内容进行保护。对中断源进行针对其要求的服务。中断服务程序分为两种情况:第一种是不允许被中断的的中断服务程序。这种中断服务程序进入过程是中断请求,CPU响应---承认、断点保护后进入该程序的入口。在入口时刻,CPU内部硬件已经关中断并进行了部分断点保护工作。从流程图中可以看到,服务程序直到中断返回IRET前才开中断,保证在整个中断服务子程序中不会被INTR所中断。值得注意的是流程图是一般而论,对于某些CPU,图中开中断指令可以不加。因为不加开中断指令,整个中断服务程序执行过程均处于关中断状态。当执行中断返回时,原来标志位寄存器的内容得以恢复。因此,返回被中断的程序后CPU仍处于开中断状态。但一般CPU,这条指令则必须加上才行。第二种是可以被中断服务子程序。6.断点恢复断点恢复是保护断点信息的逆过程,就是在结束了中断服务程序,在中断返回之前将中断前保存断点信息进行一一的恢复,即将各信息从堆栈中返回到各个寄存器中。7.中断返回中断返回是一条指令,执行这条指令,其操作刚好是CPU硬件在中断响应时自动保护断点前的状态继续向下执行。第二节8088的中断系统一、8088的中断概述8088有很强的中断系统,整个系统可以处理256个不同的中断方式。每一个中断赋予一个中断向量码,CPU根据向量码的不同来识别不同的中断源。1.8088的中断源有两种即内部中断源和外部中断源。2.内部中断源(1)除法错中断在8088执行除法指令时,如果所得的商超过了CPU所能表示的最大值,则CPU会立即产生一个向量码为0的中,因此,除法错中断又称为方式0中断。(2)单步中断8088CPU的标志位寄存器中有一位TF标志—陷阱状态标志位。CPU每执行完一条指令都要检测TF的状态。如果发现TF=1,CPU产生中断向量码为1的中断。使CPU转向单步中断的程序。单步中断广泛用于程序的调试,使CPU一次执行一条指令。(3)断点中断8086(88)的指令系统中有—条专门用做设置断点的命令,其操作码为单字节CCH,CPU执行该命令产生向量码为3的中断(即方式3中断)。断点中断亦用于程序的调试,在调试过程中利用该中断设置断点。(4)溢出中断当CPU进行算术运算时,如果发生溢出,则会使标志寄存器的OF标志置1。如果在算术运算后加一条溢出中断指令INTO,则溢出中断指令测试OF位,发现OF=1,则发生向量码为4的中断(即方式4中断)。(5)用户自定义的软件中断用户可以用INTn这样的指令形式来产生软件中断。其中INT为助记符,形成一个字节的操作码;n为由用户来确定的,一个字节的中断向量码。从而构成由用户自己确定的两个字节的软件中断指令。3.外部中断8088有两个信号输入端供外部中断源提出中断请求的。(1)非屏蔽中断NMI8088的NMI不受IF标志的限制,只要是CPU在正常执行程序,一旦NMI请求发生,CPU在一条指令执行结束后将对它作出响应。NMI输入为上升沿有效。8088CPU响应NMI中断请求,由其内部产生中断向量码2,由中断向量码决定非屏蔽中断服务程序的入口地址,即可转向服务程序。(2)可屏蔽中断请求INTR这种中断方式,是要受中断允许标志位IF的约束。只有当IF=1,CPU才有可能响应INTR请求。INTR是高电平有效。8088CPU响应INTR中断请求与NMI有所不同,在CPU响应内部中断和NMI中断时,CPU硬件进行断点保护,包括将标志位寄存器及CS和IP的内容压入堆栈,关中断而后由CPU硬件自动形成或由软件指令提供中断向量码,即可根据中断向量码来决定中断服务程序的入口地址,转向相应的中断源服务。可以认为它们在得到CPU响应时与外部没有关系。但是,INTR中断响应则不一样,CPU的响应过程要做两方面的工作:其一,CPU首先产生两个连续的中断响应总线周期。第一个中断响应总线周期,CPU将地址总线几数据总线置高阻,送出第一个中断响应信号INTR,第二个中断响应总线周期,CPU送出第二个INTR信号。该信号启动外部中断系统,通知它将相应中断请求的一个字节的中断向量码放到数据总线上,CPU由数据总线即可读到中断向量码。因此,CPU获得不同的中断向量码也就可以区分不同的中断源。其二是,当CPU获得中断源的中断向量码后,在由CPU硬件进行断点保护,并关中断。然后,根据中断向量码,获得中断源服务程序的入口地址,转向对它的服务可见,INTR的响应过程中,在获得中断向量码与内部中断和NMI中断不同。4.8088的中断处理过程如图所示,是8088CPU响应中断处理的过程。在8088CPU中,8088执行程序时,一条条的执行指令,在每执行完一条指令后,CPU都会检测,看是否有中断请求发生,如有要判断中断的优先级,并且确定中断向量码,来确定中断服务程序的入口地址。在8088CPU中,内部中断的除法错、溢出、断点及用户自定义软件中断的优先级最高,其次是NMI,比NMI优先级低的是INTR,优先级最低的是单步中断。在8088处理中断的过程中,它处理不同类型的中断的过程大致是相同的。即CPU将标志位压栈保护,暂存寄存器TEPM存放中断前的TF状态,清除IF和TF,而后将CS和IP压入堆栈保护起来,再根据向量码转向响应的服务程序。二、8088的中断优先及中断嵌套1.中断的优先级在8088的微机系统中存在多个中断源时,各个中断源在提出中断请求后,8088CPU对各个中断源的响应速度是不一样的。也就是说在多种中断同时发生时,它们各自的优先级别是不一样的,他们有高低之分。所以,在微机系统中,就要要求CPU能识别不同中断源的优先级别。在微机中就提出了中断优先级的控制问题。2.中断优先级的控制中断优先级控制有两种情况:一种是:当不同优先级的多个中断源同时提出请求时,CPU首先响应最高优先级的中断源。另外一种是:当CPU正在对某一中断源服务时,比它优先级更高的中断源提出中断请求,CPU能够中断正在执行的中断服务程序转向响应并对优先级别更高的中断源服务。服务结束再返回原来优先级别较低的中断服务程序继续执行。为了实现中断优先级的控制,满足上面提到的两种情形人们采用了种种的方法。一般我们软件查询方法。先被查询的优先级最高/。后被查询的优先级依次降低。在中断优先级控制中,我们提到优先级高的中断源可以中断优先级低的中断服务程序,出现了中断服务程序套中中断服务程序的现象,就是中断的嵌套。3.中断的嵌套在中断优先级控制中,我们提到优先级高的中断源可以中断优先级低的中断服务程序,出现了中断服务程序套中中断服务程序的现象。中断的嵌套,要在实际执行时依据各自的中断优先级别。如果同时发生的中断多,所以,中断的嵌套层次就更多。当微机系统需要中断嵌套工作时,需要编写前面提到的允许中断的中断服务程序。要注意的是,每一次嵌套都要利用堆栈来保护断点,则堆栈内容会不断的增加,因次,要充分估计堆栈的大小,不要使堆栈发生溢出。三、中断向量表在8088CPU的微机系统中,共有256种中断方式,不管是什么中断源每一个中断方式就对应着一个中断向量码。每个中断源的的向量码或由CPU内部硬件决定或由用户来指定。不同的向量码,代表着不同的中断源。在8088系统中,在内存中的开始的1K字节建立了一个中断向量表。从中断向量表中,我们可以看到,利用该表,将不同的中断源与起对应的中断服务程序入口联系在一起,知道了中断源,利用中断向量表可以自动转向响应的中断服务程序。不同的中断源有自己特定的中断向量码,将中断向量码乘4,