微机原理与接口技术学习笔记 8086/8088的中断系
8086/8088有一个简单而灵活的中断系统,每个中断都有一个中断类型码(Type Code),以供CPU进行识别,8086/8088最多能处理256种不同的中断类型。中断可以由CPU外的硬设备驱动,也可由软件中断指令启动,在某些情况下,也可由CPU自身启动,8086/8088的中断源如图4-10所示。从图可见8086/8088的中断源可分为两类,即外部中断和内部中断。
图4-10 8086/8088中断源
4.3.1 外部中断
8086/8088有两条中断信号线——INTR和NMI,可供外设向CPU发中断请求信号。
1.可屏蔽中断INTR
可屏蔽中断请求线INTR通常由Intel 8259APIC驱动,该控制器又同需要中断服务的设备相连,可由软件命令来控制8259A的工作,8259A的主要任务是接收从与其相连的设备来的中断请求,并判断哪个提出请求的设备的优先级最高,如果被选中设备的优先级比现行正接受服务的设备(如果有的话)的优先级高.就启动8086/8088的INTR线。
当INTR信号有效(为“H”)时,CPU将根据中断允许标志IF的状态而采取不同的措施。如果IF=“L”(置0),表示INTR线上的中断屏蔽(masked)或禁止(disabled),CPU将不理会该中断请求而处理下一条指令,由于CPU井不锁存INTR信号,因此INTR信号必需保持有效状态,直到接收到响应信号或撤消请求为止。如果IF=“H”(置1)表示INTR线上的中断开放,CPU在完成现行正在执行的指令后,识别该中断请求,并进行中断处理。中断允许标志IF可以用STI(中断允许位置位)指令或CLI(中断允许位清零)指令来设定。也可以将命令写入8259A,从而有选择地屏蔽INTR线上的中断。
CPU对INTR中断请求的响应过程是执行两个INTA(中断响应)总线周期,如图4-11所示。如果在INTA周期内出现一个总线保持请求(HOLD——最小方式,或RQ/GT最大方式),那么在两个INTA周期结束以前不会接受这个请求。在8086/8088的最大方式下,在这两个INTA周期内输出LOCK信号,以通知其它处理机不能再试图控制总线。在第一个INTA周期内INTA信号通知8259A,中断请求已被接受;在第二个INTA周期内INTA信号有效时,8259A必须把请求服务的那个设备的中断类型码(0~255)送上数据总线,该中断类型码是8259A的初始化过程中由8086/8088写入的。CPU读入该中断类型码后,由此调用相应的中断服务程序。
图4-11 中断应答时序
2.不可屏蔽中断NMI
不可屏蔽中断请求信号NMI用来通知CPU,发生了“灾难性”的事件,如电源掉电。存储器读写出错、总线奇偶位出错等。NMI线上中断请求是不可屏蔽的(即无法禁止的),而且立即被CPU锁存,因此NMI是边沿触发的,不需要电平触发。NMI的优先级也比INTR高。不可屏蔽中断的类型号预定为2,在CPU响应NMI时,不必由中断源提供中断类型码,因此NMI响应也不需要执行总线周期INTA。
CPU识别一个外部中断请求所需的时间称为“中断等待时间”(Interrut Latency),这取决于执行完现行的指令还需多少个时钟周期,一般而言,在执行乘法、除法、移位或循环指令时到达的中断请求,其等待时间最长。
4.3.2 内部中断
内部中断是通过软件调用的不可屏蔽中断,包括溢出中断、除法出错中断、单步中断、INTn指令中断以及单字节INT3指令中断。
(1)溢出中断。如果上一条指令使溢出标志OF置“1”,那么在执行溢出中断指令
(INTO)时,立即产生一个4型中断(中断类型码为4)。
(2)除法出错中断。在执行除法指令span或Ispan后,如果商大于规定的目标操作数(即目标寄存器所能表达的范围),则CPU立即产生一个0型中断。
(3)INTn指令中断。8086/8088的指令系统中有一条INT指令,当执行完这条指令就立即产生中断。编在该指令中的中断类型码告诉CPU调用哪个服务程序来处理这个中断。
(4)断点中断(Breakpoint Interrupt)。断点中断即单字节INT3指令中断,中断类型码为3。3型中断是专供断点用的,断点一般可以处于程序中任何位置,在断点处,停止正常执行过程,以使执行某种类型的特殊处理。通常,在调试时把断点插入程序中的关键之处,以便显示寄存器、存储单元的内容。
(5)单步(陷附)中断。当陷阱标志TF置“1”时,8086/8088处于单步工作方式。在
单步工作时,每执行完一条指令,CPU就自动产生一个1型中断,作为中断处理过程的一部分,CPU将自动地把标志压入堆栈,然后清除TF和IF。 因此,当CPU进入单步中断过程时,它就不处于单步工作方式,而以正常的方式工作。当单步中断过程结束时,从堆栈中弹出原来的标志内容,使CPU返回单步方式。
单步方式是一种有用的调试工具,它使单步过程成为能逐条指令地观察系统操作的一个“窗口”。例如单步中断过程可以在每执行一条指令后打印或显示寄存器内容、指令指针的值,以及关键的存储器变量等,这样就能详细地跟踪一个程序的具体执行过程。确定问题的所在。
8086/8088没有直接对TF标志置“l”或置“0”的指令,可以通过修改存放在堆栈中标志内容而改变TF之值。可用PUM和MF指令直接压入和弹出标志,标志与0100H相“或”就能将TF置“1”,标志与FEFFH相“与”就能将TF清“0”。用这种方法把TF置“1”后,第一个单步中断将发生在执行单步处理程序中的IRET指令后的第一条指令之后。
如果CPU正处于单步工作方式,则它对中断(内部中断或外部中断)的处理过程如下:控制传递给为处理所出现的那种类型的中断而指定的程序(标志、CS和IP被压入堆栈)。但是,在执行该程序的第一条指令之前,将“识别”(recognized)单步中断,并且控制又传递给1型中断处理程序(标志、CS和IP被压入堆栈)。当单步中断处理程序结束时,控制又返回原先的中断处做接序,
上述所有内部中断的特点是:
(1)中断类型码或者包含在指令中,或者是预先规定的;
(2)不执行INTA总线周期;
(3)除单步中断外,任何内部中断都无法禁止;
(4)除单步中断外,任何内部中断的优先级都比任何外部中断的高。8086/8088的中断优先级见表4-1。
中 断 |
优先级 |
除法出错,INTn,INTO |
最高 |
表4-1 中断优先级
4.3.3 中断向量表(又称中断指针表)
中断向量表是存放中断服务程序入口地址(即“中断向量”)的表格。它存放在存储器
的最低端,共1024个字节,每4个字节存放一个中断服务程序的入口地址(一共可存放256个中断服务程序的入口地址)。较高地址的两个字节存放中断程序入口的段基值;较低的地址的两个字节存放入口地址的段内偏移量,这4个单元的最低地址称为向量表地址指针,其值为对应的中断类型码乘4。8086/8088的中断向量表结构如图4-12所示。
由图可见,8086/8088的中断向量表由三部分组成:专用的5个(0#~4#),保留的27个(5#~31#),可供用户定义的224个(32#~255#)。“专用的”是指凡是8086/8088系统中统一规定的中断类型;“保留的’”是指为系统开发所保留的中断类型。
8086/8088在响应中断以后,先将标志寄存器压入堆栈,然后将执行一个与段间间接调用(CALL)指令相当的过程来启动一个中断过程,该过程中,CPU将CS和IP压入堆栈,以保存断点的地址,然后将中断向量表中相应的4个字节内容放入IP和CS,使控制转入中断过程。
如果n个中断请求同时到达,则CPU将按优先级顺序来调用中断过程。
图4-12 中断向量表
4.3.4 中断过程
8086/8088对一个中断过程的基本响应过程见图4-13。当进入中断过程时,CPU把标志寄存器,CS和IP压入堆栈,并清除TF和IF。在中断过程中,可以用STI指令重新开放外部中断,使INTR线上的中断请求能中断这个中断过程。注意,在STI之后的那条指令执行完以后才会真正开放中断。NMI线上的中断请求则始终能够中断任何外部中断处理过程。中断处理过程中出现的软件中断或处理机启动的中断也能中断饬过程。必须注意的是,一个中断处理过程中不能再发生读过程在为之服务的,中断。例如,试图在除法出错(0型)中断处理过程中除以零,可能会陷入无穷尽的再入该过程的循环。必须有足够大的堆栈空间,以便与该系统中可能出现的中断嵌套的最大深度相适应。
同其它过程一样,中断过程也应该把它要使用的任何寄存器的内容在修改前保存起来,并在处理结束前再恢复其内容、中断过程最好对程序中“关键部分”(这部分被中断会造成出错)以外的所有部分都开放外部中断。若在一个过程中禁止外部中断的时间过长,就可能丢失INTR线上的中断请求。
所有的中断过程都应该以IRET指令结尾,IRET指令总是认为堆栈仍处于进入该过程时的状态。该指令将栈顶的三个字分别弹出到IP、CS和标志寄存器中,这样就回到了中断过程开始前将要执行的那条指令上去。
中断过程所做的实际处理视应用场合而定,如果中断过程正为一个外设服务,则它应该向该外设输出一个命令,命令它撤消中断请求。然后它可读出该外设的状态信息,确定中断
图4-13 中断处理顺序
的原因,并采取相应的措施。
由软件启动的中断程序可作系统中其它程序的服务程序(称“管理调用”——Supervisorcalls)。在这种情况下,当一个程序而不是一个外设需要服务时,才启动中断过程。例如,要在一个文件中查找一个记录,向另一个程序发送一个信息、请求分配存储器空间等等。采用软件中断过程对于实现系统程序的再定位是十分有利的。这些中断服务程序都有自己的中断向量,中断向量表是预先安排好的,通过这张表,用软件中断命令来调用各个程序,这些程序也可以互相调用,也就是根据表中的地址,它们之间可以进行互相通信、互相调用。
安徽自考网声明:
1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。
2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:952056566@qq.com