您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第7章输入输出与中断
7.48086/8088中断系统7.4.18086/8088的中断源类型8086/8088CPU可以处理256种不同类型的中断,每一种中断都给定一个编号(0255),称为中断类型号,CPU根据中断类型号来识别不同的中断源。8086/8088的中断源如图7.17所示。从图中可以看出8086/8088的中断源可分为两大类:一类来自CPU的外部,由外设的请求引起,称为硬件中断(又称外部中断);另一类来自CPU的内部,由执行指令时引起,称为软件中断(又称内部中断)。NMI(17号引脚)中断逻辑非屏蔽中断请求INT2硬件(外部)中断软件(内部)中断可屏蔽中断请求中断类型号32~255INTR(18号引脚)中断指令INTnN=32~255溢出中断INTOINT4断点中断INT3单步中断(TF=1)INT1除法错误INT0图7.178086/8088中断源1.软件中断(内部中断)8086/8088的软件中断主要有三类共五种。(1)处理运算过程中某些错误的中断执行程序时,为及时处理运算中的某些错误,CPU以中断方式中止正在运行的程序,提醒程序员改错。①除法错中断(中断类型号为0)。在8086/8088CPU执行除法指令(DIV/IDIV)时,若发现除数为0,或所得的商超过了CPU中有关寄存器所能表示的最大值,则立即产生一个类型号为0的内部中断,CPU转去执行除法错中断处理程序。②溢出中断INTO(中断类型号为4)。CPU进行带符号数的算术运算时,若发生了溢出,则标志位OF=1,若此时执行INTO指令,会产生溢出中断,打印出一个错误信息,结束时不返回,而把控制权交给操作系统。若OF=0,则INTO不产生中断,CPU继续执行下一条指令。INTO指令通常安排在算术指令之后,以便在溢出时能及时处理。例如:ADDAX,BXINTO;测试加法的溢出(2)为调试程序设置的中断①单步中断(中断类型号为1)。当TF=1时,每执行一条指令,CPU会自动产生一个单步中断。单步中断可一条一条指令地跟踪程序流程,观察各个寄存器及存储单元内容的变化,帮助分析错误原因。单步中断又称为陷阱中断,主要用于程序调试。②断点中断(中断类型号为3)。调试程序时可以在一些关键性的地方设置断点,它相当于把一条INT3指令插入到程序中,CPU每执行到断点处,INT3指令便产生一个中断,使CPU转向相应的中断服务程序。(3)中断指令INTn引起的中断(中断类型号为n)程序设计时,可以用INTn指令来产生软件中断,中断指令的操作数n给出了中断类型号,CPU执行INTn指令后,会立即产生一个类型号为n的中断,转入相应的中断处理程序来完成中断功能。2.硬件中断(外部中断)8086/8088CPU有两条外部中断请求线NMI(非屏蔽中断)和INTR(可屏蔽中断)。(1)非屏蔽中断NMI(中断类型号为2)整个系统只有一个非屏蔽中断,它不受IF标志位的屏蔽。出现在NMI上的请求信号是上升沿触发的,一旦出现,CPU将予以响应。非屏蔽中断一般用于紧急故障处理。(2)可屏蔽中断INTR(中断类型32255)可屏蔽中断请求信号从INTR引脚送往CPU,高电平有效,受IF标志位屏蔽,IF=0时,对于所有从INTR引脚进入的中断请求,CPU均不予响应;另外,也可以在CPU外部的中断控制器(8259A)中以及各个I/O接口电路中对某一级中断或某个中断源单独进行屏蔽。当外设的中断请求未被屏蔽,且IF=1,则CPU在当前指令周期的最后一个T状态去采样INTR引脚,若有效,CPU予以响应。CPU将执行两个连续的中断响应周期,送出两个中断响应信号INTA。第一个响应周期,CPU将地址及数据总线置高阻;在第二个响应周期,外设向数据总线输送一个字节的中断类型号,CPU读入后,就可在中断向量表中找到该类型号的中断服务程序的入口地址,转入中断处理。中断响应周期的时序AD7AD0ALEINTACLK中断类型T1T2T3T4TIT1T2T3T4TITI空闲状态TI在8086系统中一般为三个,而在8088系统中则没有。值得注意的是,对于非屏蔽中断和软件中断,其中断类型号由CPU内部自动提供,不需去执行中断响应周期读取中断类型号。3.8086/8088中断源的优先级8086/8088中断源的优先级顺序由高到低依次为:软件中断(除单步中断外)、非屏蔽中断、可屏蔽中断、单步中断。在PC机系统中,外设的中断请求通过中断控制器8259A连接到CPU的INTR引脚,外设中断源的优先级别由8259A进行管理。7.4.2中断向量表中断向量表是存放中断向量的一个特定的内存区域。所谓中断向量,就是中断服务子程序的入口地址。对于8086/8088系统,所有中断服务子程序的入口地址都存放在中断向量表中。8086/8088可以处理256种中断,每种中断对应一个中断类型号,每个中断类型号与一个中断服务程序的入口地址相对应。每个中断服务程序的入口地址占4个存储单元,其中低地址的两个单元存放中断服务程序入口地址的偏移量(IP);高地址的两个单元存放中断服务程序入口地址的段地址(CS)。256个中断向量要占256×4=1024个单元,即中断向量表长度为1K个单元。8086/8088系统的中断向量表位于内存的前1K字节,地址范围为00000H003FFH。8086/8088的中断向量表如图7.18所示。00000H00003H00008H0000BH00004H00007H0000CH0000FH00010H00013H00014H0007FH00080H003FFHIP内容CS内容类型0中断入口地址(除法出错)…专用中断(5个)用户自定义中断(224个)系统保留中断(27个)类型1中断入口地址(单步中断)类型2中断入口地址(NMI)类型3中断入口地址(断点中断)类型4中断入口地址(溢出中断)类型5中断入口地址类型31中断入口地址类型32中断入口地址类型255中断入口地址…0007CH003FCH图7.18所示的中断向量表中有5个专用中断(类型0类型4),它们已经有固定用途;27个系统保留的中断(类型531)供系统使用,不允许用户自行定义;224个用户自定义中断(类型32255),这些中断类型号可供软中断INTn或可屏蔽中断INTR使用,使用时,要由用户自行填入相应的中断服务程序入口地址。(其中有些中断类型已经有了固定用途,例如,类型21H的中断已用做DOS的系统功能调用)。由于中断服务程序入口地址在中断向量表中是按中断类型号顺序存放的,因此每个中断服务程序入口地址在中断向量表中的位置可由“中断类型号×4”计算出来。CPU响应中断时,把中断类型号N乘以4,得到对应地址4N(该中断服务程序入口地址所占4个单元的第一个单元的地址),然后把由此地址开始的两个低字节单元(4N,4N+1)的内容装入IP寄存器,再把两个高字节单元(4N+2,4N+3)的内容装入CS寄存器,于是CPU转入中断类型号为N的中断服务程序。这种采用向量中断的方法,CPU可直接通过向量表转向相应的处理程序,而不需要去逐个检测和确定中断源,因而可以大大加快中断响应的速度。FLAGS入栈NNN完成当前指令有内部中断吗?从指令中或内部获得中断类型号从外部得到中断类型号TEMP=1?令TEMP=TF调中断处理程序YYY有NMI中断吗?有INTR中断吗?TF=1?执行下一条指令NNNNY中断类型号2YIF=1?中断类型号1清IF、TFCS、IP入栈返回断点FLAGS出栈IP、CS出栈中断服务有NMI?(1)(1)(1)(1)(2)(3)(4)(5)YY7.4.38086/8088的中断处理过程在图示流程中,(1)(5)是CPU的内部处理,由硬件自动完成。所有内部中断(除法错、INTn、INTO、单步和断点中断)以及NMI中断不需要从数据总线上读取中断类型码,而INTR中断需由CPU读取中断类型码,其中断类型码由发出INTR信号的接口电路提供。该流程图还反映出了8086/8088系统中各中断源优先级的高低。7.4.4中断服务程序的设计中断服务程序的一般结构如图7.20所示。如前所述,若该中断处理能被更高级别的中断源中断,则需加入开中断指令。在中断服务程序的最后,一定要有中断返回指令,以保证断点的恢复。用户在设计中断服务程序时要预先确定一个中断类型号,不论是采用软件中断还是硬件中断,都只能在系统预留给用户的类型号中选择。关中断保护现场开中断中断服务恢复现场中断返回图7.20中断服务程序的一般结构确定了中断类型号,还要把中断服务入口地址置入中断向量表,以保证在中断响应时CPU能自动转入与该类型号相对应的中断服务程序。将中断服务程序入口地址置入中断向量表的方法有两种:DOS系统功能调用法和直接装入法。1.DOS系统功能调用法(INT21)功能号:(AH)=25H。入口参数:(AL)=中断类型号(DS)=中断服务程序入口地址的段地址(DX)=中断服务程序入口地址的偏移地址下面程序段完成中断类型号为60H的入口地址(DS:INT60)置入中断矢量表。PUSHDS;保护DSLEADX,INT60;取服务程序偏移地址MOVAX,SEGINT60;取服务程序段地址MOVDS,AXMOVAH,25H;送功能号MOVAL,60H;送中断类型号INT21H;DOS功能调用POPDS;恢复DS0000H:0000H0000H:0180H2000H:1200H0000H:03FFH…………2000H1200H中断矢量表中断服务程序INT6060H4=180H2.直接装入法用传送指令直接将中断服务子程序首地址INT60置入矢量表中。设中断类型号为60H(此类型号对应的矢量表地址为从00180H即0000H:0180H开始的四个连续存储单元)。程序段如下:XORAX,AXMOVDS,AXMOVAX,OFFSETINT60MOVDS:[0180H],AX;置服务程序偏移地址MOVAX,SEGINT60MOVDS:[0180H+2],AX;置服务程序所在;代码段的段地址
本文标题:第7章输入输出与中断
链接地址:https://www.777doc.com/doc-3601153 .html