1中断技术中断是计算机中一个重要且实用的技术。采用中断技术主要为解决两个问题:1.在输入输出过程中,解决快速的CPU与慢速的外设之间速度不匹配的问题,实现CPU与外设并行工作,提高CPU的利用率。2.确保CPU在运行过程中具有实时响应和处理随机事件的能力。2中断实例每按一下键盘,就产生一个键盘中断,CPU就要停下手边的工作来处理,记录下来哪个键被按下了,如果按下这个键要对应某一个操作,就赶快先做这个操作,做完之后,才恢复刚才的工作。对于接在串口上的MODEM也是一样,从电话线上传来数据了,这个串口就会产生一个中断,CPU就要停下来,先将数据收下来,放到一个安全的地方。我们能够一边写文章,一边从网上下载数据,就全靠中断的正常工作。3第3章中断技术3.1中断及中断处理过程3.2中断优先权3.38086中断系统3.4可编程中断控制器8259A3.5中断程序设计43.1中断及中断处理过程3.1.1中断源及分类3.1.2中断处理过程5CPU在正常执行程序的过程中,由于某些事件(外部或内部)发生,引起CPU暂时中止当前程序的执行,而转去执行一段特殊程序(称中断服务子程序),以处理该事件。该事件处理完后,再返回原被中断的程序继续执行。一、中断CPU执行程序事件发生中断服务子程序继续执行K:DK:︿处理事件﹀断点3.1.1中断源及分类6正在看书电话铃响接电话继续看书执行程序事件发生事件处理继续执行程序生活场景中的中断计算机中的中断对比7中断源:能够向CPU发出中断请求的设备或事件。1.外部中断源一般的I/O设备,如显示器、打印机、键盘等。数据通道中断源,如磁盘直接与内存交换数据所要求的中断。实时时钟,如外部所需的定时电路等计算机内部故障引起的中断,如电源掉电、存储出错等。二、中断源3.1.1中断源及分类82.内部中断源CPU指令执行异常。如运算结果溢出、除法错等。在程序调试过程中由程序员所设置的中断。如单步中断、软中断指令INTn等。微机系统中,中断分为内部中断和外部中断两大类。3.1.1中断源及分类9中断系统应具有以下功能:1.能实现中断响应、中断服务和中断返回2.能实现中断优先级排队3.能实现中断嵌套3.1.1中断源及分类103.1.2中断处理过程一个完整的中断处理过程包括:1.中断请求2.中断优先级的判别(中断判优)3.中断响应4.中断处理5.中断返回11中断请求中断响应中断处理中断返回(断点恢复)注意:中断过程由硬件和软件共同实现的。识别中断源禁止中断保护断点并进入中断子程序保护现场(开启中断以实现中断嵌套STI)中断服务(关中断CLI)恢复现场中断判优3.1.2中断处理过程12确定中断优先级的方法1.软件排优:由硬件电路和软件查询程序配合起来才能实现优先级的排队。各中断源的优先权由软件安排,与硬件关系不大。2.硬件排优:用专门的硬件电路或中断控制器对各中断源的优先权进行安排。如菊花链电路、可编程中断控制器(如8259A)3.2中断优先权133.380X86中断系统硬件中断(外部中断)软件中断(内部中断)除法错中断溢出中断断点中断单步中断软件中断非屏蔽中断可屏蔽中断中断分类中断类型码143.380X86中断系统3.3.180X86中断结构NMIINTR中断逻辑软件中断INTn溢出中断除法错中断单步中断非屏蔽中断中断控制器8259A断点中断n40312定时器键盘保留串行通信接口串行通信接口硬盘打印机软盘可屏蔽中断IR0IR1IR2IR3IR4IR5IR6IR7内部中断外部中断80X86中断结构图外部硬件设备引起的中断,又称硬件中断。又称软件中断——CPU根据软件的某些指令或者软件对标志寄存器某个标志位的设置而产生的,与外部中断电路完全无关。158086的中断源分类一、外部中断8086CPU提供两条引脚INTR、NMI接受中断请求信号从NMI引脚进入的中断——非屏蔽中断从INTR引脚进入的中断——可屏蔽中断8086CPUNMIINTR非屏蔽中断请求输入端可屏蔽中断请求输入端INTA中断响应信号输出端161.非屏蔽中断(NMI中断)中断类型码2上升沿触发申请中断不受中断允许标志IF的控制与影响(即不可屏蔽),一旦NMI引脚出现中断请求,CPU在当前指令执行完后,必须立即响应。由计算机内部硬件出错而引发,一般用于处理紧急事件。如:PC机中内存奇偶校验出错和系统主要故障(如电源断电等)。8086CPUNMI8086的中断源分类172.可屏蔽中断(INTR中断)外设申请的中断电平触发受中断允许标志IF控制8086CPUINTRINTA8086的中断源分类IF=1(STI),开中断,允许响应INTR中断IF=0(CLI),关中断,禁止响应INTR中断——当外设对CPU有服务请求,会向INTR发来一个高电平信号,并且IF=1时,CPU在当前指令执行完后,响应可屏蔽中断。188086CPU只有一个可屏蔽中断请求输入引脚,8086中断系统设计中断控制器(8259A)管理各种外设提出的中断请求。所有外设的中断请求信号都可送至8259A的中断请求输入端IRQ0~IRQ7任何一个,8259A选择其中优先级最高的中断请求,送至CPU的INTR引脚,向CPU申请可屏蔽中断。可屏蔽中断源的中断类型码由8259A提供。INTRINTA8086CPUINTINTA8259AIRQ0IRQ1IRQ2IRQ7……可屏蔽中断请求输入端8259A可对多个可屏蔽中断源进行优先级控制,一片8259A可管理8级可屏蔽中断。19286以上系统使用两片8259A级联管理15级可屏蔽中断。比较常见的分配方式:IRQ0系统定时器IRQ1键盘IRQ2可编程中断控制器8259AIRQ3COM2(串口)IRQ4COM1(串口)IRQ6软盘控制器IRQ7并行口LPT1IRQ8系统CMOS/实时钟IRQ12PS/2鼠标IRQ13数学协处理器IRQ14第一IDE控制器(硬盘)IRQ15第二IDE控制器(CDROM)IRQ5可用(如声卡)IRQ9可用(如网卡)IRQ10可用(如USB)IRQ11可用(如SCSI主适配器)PC机外部中断分配可以给用户的新添设备使用系统隐含要想计算机正常工作,必须把中断合理分配给外设,让它们没有冲突。Win98以上的操作系统已支持PNP“即插即用”技术,它可以将中断进行自动分配,简化用户操作。20二、内部中断不需要外部硬件支持,不受中断标志IF的影响,中断类型码或包含在指令中,或预先规定。8086/8088内部中断有以下5种:除法出错中断断点中断单步中断溢出中断软件中断8086的中断源分类218086的中断源分类1.除法出错中断类型码0,CPU执行除法指令时,除数为0或商溢出(超出规定范围,寄存器不能存放)时产生。2.溢出中断类型码4,执行INTO指令,且OF=1时产生。常放在带符号数加减指令后,可对溢出及时告警。228086的中断源分类3.断点中断类型码3,执行指令INT3时产生。用于程序调试时设置断点。利用断点中断的中断处理程序可进行某些特殊处理,如显示有关寄存器或存储单元内容。断点中断也是一种调试程序的方法。238086的中断源分类4.单步中断类型码1,TF=1时产生(当前指令需执行完)。用于调试程序,跟踪程序执行过程。单步中断的中断处理程序可显示CPU执行完当前指令后,各个寄存器及有关存储单元内容。利用单步中断可一条一条指令地跟踪程序的流程,观察CPU执行指令后,各个寄存器及有关存储单元内容的变化,从而指出和确定程序出错的地方和产生错误的原因。单步中断是一种调试程序的方法,用T命令也可实现。248086的中断源分类说明:1.处理中断时,CPU把标志寄存器压栈,清除TF和IF。当CPU进入单步处理程序时,不再处于单步工作方式,单步工作方式结束时,恢复原标志,CPU返回单步方式。2.80X86中没有设置或清除TF的指令。PUSHFPOPAXORAX,0100HPUSHAXPOPF258086的中断源分类5.软中断由设置在程序中的INTn指令产生(n类型码)PC机中,用不同类型码编成标准中断服务子程序,用户可使用INTn调用。因此软件中断相当于调用子程序。主要用于实现ROMBIOS中断、DOS中断调用、用户自定义中断。26•内部中断(除法错中断、溢出中断、断点中断、软件中断)•NMI中断•INTR中断•单步中断8086中断源优先级顺序优先级由高至低对同时产生的中断:首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理;对非同时产生的中断:允许低优先级别的中断处理程序被高优先级别的中断源所中断——中断嵌套。273.3.2中断向量表中断向量——中断服务程序的入口地址。段地址和偏移地址每个中断处理程序都有一个唯一的中断向量。INT_PROCPROCPUSHDXPUSHAX…IRETINT_PROCENDPINC_PROCPUSHDXPUSHAX┅┅IRET中断服务程序入口地址28在内存的00000H~003FFH地址范围内,大小为1KB。中断向量地址类型0中断向量00000H类型1中断向量…00008H00004H段地址偏移地址003FFH类型2中断向量FFFFFH类型255中断向量003FCH内存3.3.2中断向量表IVT按中断类型码从小到大顺序依次存放各类中断(256种)的中断向量(中断服务程序入口地址)。每个中断向量占用4Bytes,低字为段内偏移地址(IP),高字为段基址(CS)。中断类型码与中断向量地址的关系:设某类中断的中断类型码为n中断向量在IVT中的存放地址(向量地址)=4×n29IP中断类型码与中断向量所在位置(中断向量地址指针)之间的对应关系为:中断向量地址指针=4*中断类型码CS5个27个224个3FC304n向量地址CPU获得中断类型码后,如何转去执行相应的中断服务程序?入口地址的偏移地址入口地址的段基址IPCS假设CPU响应中断类型码为n的中断由于所有中断服务程序的入口地址都放在中断向量表中,首先需将类型码转换为向量地址即可转入相应中断服务程序执行。——查表取得中断向量字单元(4n,4n+1)字单元(4n+2,4n+3)3.3.2中断向量表例、某系统中键盘中断的类型码为09H,试问其对应中断服务程序的入口地址?1)中断向量的存放地址由4n=49=36=24H知中断向量存放在存储器中从0000:0024H开始的4个单元中,即0024H—0027H单元。40H30H20H10H0024H0025H0026H0027H存储器IPCS2)由右图知键盘中断的中断处理程序的入口地址为4030:2010H即可转入键盘中断服务程序执行。32CPU获取中断类型码的方法外部INTR中断8259A提供内部中断(除法出错、单步中断、溢出中断、断点中断)、外部NMI中断其中断类型码是固定值,由系统直接通过内部硬件电路自动提供。软中断INTn中断类型码n在指令INTn的机器码中提供333.3.3中断向量表的建立INT_TBLSEGMENTAT0ORGN*4DDINT_ICEINT_TBLENDS……MCMODESEGMENT;主程序……INT_ICEPROCFAR;中断服务程序……IRETAT表达式——本逻辑段根据表达式求值的结果定位段基址。AT8A00H:表示本段的段基址为8A00HORG指定偏移地址1.绝对地址装入342.使用串指令装入CLI;禁止中断MOVAX,0MOVES,AXMOVDI,4*N;置矢量表段地址MOVAX,OFFSETINT_ICE;置矢量表偏移地址CLDSTOSWMOVAX,SEGINT_ICE;中断服务程序段地址STOSWSTI3.3.3中断向量表的建立353.使用DOS调用利用DOS中21H中断的25H号功能设置中断向量要求:入口参数:AL=中断类型号DS:DX=中断服务程序入口首地址(段地址:偏移地址)AH=25H(功能号)3.3.3中断向量表的建立36PUSHDSMOVDX,SEGINT60HMOVDS,DXMOVDX,OFFSETINT6