您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 微机原理与接口技术 第02章 中断
第2章中断2.1中断系统概述2.28086/8088的中断系统2.3IBMPC的BIOS调用及DOS功能调用2.1中断系统概述2.1.1中断系统相关概念1,CPU与外设间的数据传送方式(1)无条件I/O方式;(2)查询I/O方式;(3)中断I/O方式;(4)DMA(直接存储器存取)方式。(1)无条件传送当外设的数据传送是定时的,且时间已知的情况下,CPU定时取入数据,而当CPU去取数据时,数据肯定已准备好;或CPU定时发送数据,外设肯定已准备好接收数据,这时采用无条件传送。无条件传送是最简单的数据传送方式。(2)查询传送方式在外设比CPU工作速度低得多的情况下,在输入时,CPU要查询外设是否就绪(准备好输入数据),若就绪,才能读入数据;在输出时,则不断查询外设是否空闲(准备好接收数据),若空闲,则CPU输出一个数据。例如,从外部设备端口输入并存入内存一组数据,设SR为状态寄存器,其第7位为就绪位,DR为数据寄存器,则程序段如下:MOVCX,0050HMOVBX,0200HWAIT:INAL,SRTESTAL,80HJZWAITINAL,DRMOV[BX],ALINCBXLOOPWAIT(3)中断传送所谓中断传送方式就是,当CPU与外设交换数据时,无须连续不断地查询外设的状态,而是在需要时,由外设主动地向CPU提出请求,让CPU为其服务。在输入时,当外设数据就绪时,外设向CPU提出中断请求,CPU接到该请求后,暂停当前程序的执行,转去执行相应的中断服务程序,完成所需的数据输入,然后再返回去执行原来中断了的程序;在输出时,当外设空闲时,外设向CPU提出中断请求,CPU接到该请求后,暂停当前程序的执行,转去执行相应的中断服务程序,完成所需的数据输出,然后再返回去执行原来中断了的程序。采用中断传送方式,可以大大提高系统的输入输出效率,节省大量的CPU时间。2,中断:当CPU正在执行某程序时,由于外界事件的需要向CPU发出申请,CPU暂停现行程序的执行而转去处理临时发生的事件,处理完后再返回到被中断程序的断点处,继续向下执行,这个过程称为中断。在中断过程中执行的事件处理程序称为中断服务程序。(1)一般的输入输出设备。如键盘、打印机、通信接口等。(2)数据通道中断源。如磁盘。(3)实时时钟。(4)故障源。(5)为调试程序而设置的中断源。3,中断源I/O设备或者事件需要CPU中断处理时,必须向CPU发出中断请求信号。该信号作为CPU的输入,当CPU收到该信号时,可引起中断。引起中断的原因,或者说发出中断请求信号的源称为中断源。通常,中断源有以下几种:2.1.2中断系统的功能(1)实现中断与返回(2)能实现优先级排队(3)能实现中断嵌套2.1.3中断响应1.CPU响应中断的条件(1)有中断请求信号。(2)中断请求没有被屏蔽。(3)CPU的中断是开放的。(4)CPU在现行指令执行完毕时,响应中断。(1)关中断。(2)保存断点。(3)保护现场。(4)给出中断服务程序入口,并转入该服务程序。(5)恢复现场。(6)从中断返回。2.中断响应时及中断响应期间CPU应做的工作2.1.4中断向量表以8086中断向量表为例,后续2.28086/8088的中断系统256项中断中–前5项为系统所用类型0:除法错误中断类型1:单步中断(TF=1)类型2:NMI类型3:INT3指令类型4:溢出中断–保留27项以备将来扩充(类型5~~类型31)–余下的224项用户可以使用2.2.18086/8088的中断系统分类非屏蔽中断请求中断逻辑INTn(指令)INTO(指令)除法错误单步中断(TF=1)8259APIC可屛蔽中断请求NMIINTR1.内部中断(1)方式0——除法错中断(2)方式1——单步中断(3)方式3——断点中断(4)方式4——溢出中断(5)用户定义的软件中断:利用INT指令产生的。所有的内部中断都具有下述特点:1)中断向量码或者包含在指令中,或者是预定的;2)除单步中断外,内部中断都无法禁止;3)除单步中断外,任何内部中断的优先级都比任何外部中断的高。2.外部中断8086/8088CPU有两种外部中断请求输入,即非屏蔽中断请求输入和可屏蔽中断请求输入。用户不能禁止的中断称为非屏蔽中断,这种中断一旦出现,CPU必须立即响应,所以非屏蔽中断总是用于处理紧急事件。用户能控制的中断称为可屏蔽中断,用户可通过软件禁止可屏蔽中断的中断源发中断请求信号,或者关闭中断而对发出的请求不作响应。可屏蔽中断受8259A中断控制器控制可屏蔽中断受IF控制位的控制IF=1时,外部中断请求可被CPU接受;IF=0时,外部中断请求被阻止可屏蔽中断具体内容见下章表8.1中断优先级中断优先级除法错、INTnn、INTO最高NMIINTR单步中断最低2.2.2中断指令1.INT中断指令指令汇编格式:INTn操作SP←SP-2,(SP,SP+1)←FIF←0,TF←0SP←SP-2,(SP,SP+1)←CS;保存被中断程序的段地址部分SP←SP-2,(SP,SP+1)←IP;保存被中断程序的偏移地址部分CS←(n*4+2,n*4+3);中断向量的段地址部分IP←(n*4,n*4+1);中断向量的偏移地址部分受影响的标志位:IF,TF说明:n称为中断类型号,必须是0~255之间的立即数。2.INTO溢出中断指令(略)指令汇编格式:INTO操作:如果OF=1,则产生一个中断类型为4的软件中断;否则,不产生任何操作。即:如果OF=1,则SP←SP-2,(SP,SP+1)←FIF←0,TF←0SP←SP-2,(SP,SP+1)←CSSP←SP-2,(SP,SP+1)←IPCS←(4*4+2,4*4+3)IP←(4*4,4*4+1)受影响的标志位:IF,TF说明:INTO指令一般用在算术运算指令后面,在有溢出的情况下,启动一个溢出中断服务程序。3.IRET中断返回指令指令汇编格式:IRET操作:IP←(SP,SP+1),SP←SP+2CS←(SP,SP+1),SP←SP+2F←(SP,SP+1),SP←SP+2受影响的标志位:所有状态标志位。说明:IRET指令是任何中断服务程序的最后一条要执行的指令,它使CPU从中断服务程序返回被中断程序的断点处继续执行。2.2.3中断向量设计8086/8088能处理256种不同方式的中断,每种中断都要求一个方式码,供cpu识别,然后转至相应的中断服务程序??8086通过何种方式获得各个中断的中断号系统所用的5钟中断(方式0~方式4),其中断号固定。软件中断(INTn),其中断号包含在该指令编码中硬件中断,其中断号由中断控制器8259A向CPU提供2.2.3中断向量设计??如何根据中断方式码转至相应的中断服务程序中断向量:中断处理程序的入口地址中断向量表:8086/8088中断系统把所有(256种)中断处理程序的入口地址集中存放在存储器的起始区域,这个区域就形成了中断处理程序入口地址表,该表称为中断向量表8086/8088在其内存的前1K字节(地址为00000H~003FFH)建立了一个中断向量表。表中内容分为256项,对应于类型号0~255,其结构如下:类型0的中断服务程序入口地址类型1的中断服务程序入口地址类型2的中断服务程序入口地址::类型255的中断服务程序入口地址00000H00003H003FCH003FFH00008H0000BH00004H00007H0000CH003FBH每一个中断向量占用4个字节单元,用来存放相应类型的中断服务程序的入口地址–高两个字节存放服务程序的入口地址的段地址部分–低两个字节存放入口地址的偏移地址部分。Cpu将中断向量码乘以4就可以得到存放相应中断向量的地址–将该地址中的内容(即中断向量)读出就可转到相应的中断服务程序–将低2字节的内容读出送到IP中–将高2字节的内容读出送到CS中24中断向量:中断服务程序的入口地址。每个入口地址由4B组成,高地址存放段基址,低地址存放偏移量。中断向量表:存放256种中断的中断向量(256×4=1KB)。在内存的0~3FFH单元。中断类型码n与中断向量:中断类型码n×4的连续4B为中断类型n的中断服务程序入口地址。25例1:若中断类型号为3,则由中断类型号取得中断服务入口地址的过程如下图所示:00000H00001H0000CH(0000:000CH)1EA00H(1E00:0A00H)FFFFFH低地址内存高地址1E000H+0A00H1EA00H中断类型号3×4=000CH00000H00001H0000CH(0000:000CH)1EA00H(1E00:0A00H)FFFFFH低地址内存高地址中断服务程序…....1E(CSH)00(CSL)0A(IPH)00(IPL)…….中断操作步骤(教材P143)–获取中断号–计算中断向量地址–取中断向量,并把中断服务程序的入口的偏移地址送入IP,段地址送入CS–转入中断服务程序并执行–中断返回,返回到断点处以上五步骤是8086处理中断的流程,为使用户自己编写的中断服务程序能够正确执行,必须把路径(主要是中断向量表)铺垫完毕中断向量设计中断向量的置换:用户可以利用保留的中断类型号扩充自己需要的中断功能,对新增加的中断功能要在中断向量表中建立相应的中断向量。中断向量的置换通常有两种方法使用传送指令编写程序段利用DOS功能调用存取中断向量使用传送指令编写程序段设置中断向量例:中断类型码=4AH,中断程序名为INTHAND,设置中断向量MOVAX,0MOVES,AX;设置附加段地址,让附加段从0地址处开始MOVBX,4AH*4;取得中断向量的存放地址MOVAX,ES:WORDPTR[BX]PUSHAX;保存原中断向量的偏移地址MOVAX,ES:WORDPTR[BX+2]PUSHAX;保存原中断向量的段地址MOVAX,OFFSETINTHANDMOVES:WORDPTR[BX],AXMOVAX,SEGINTHANDMOVES:WORDPTR[BX+2],AX…INTHAND:…IRETINTHANDPROC利用DOS功能调用存取中断向量–设置中断向量利用DOS提供的25H系统功能调用来设置中断向量。入口参数:AL=中断向量号AH=25HDS=中断处理程序入口地址的段基值DX=中断处理程序入口地址的偏移量执行INT21H–获取中断向量利用DOS提供的35H系统功能调用来获取中断向量。入口参数:AL=中断向量号AH=35H执行INT21H出口参数:ES=中断处理程序入口地址的段基值BX=中断处理程序入口地址的偏移量利用DOS功能调用存取中断向量(续)……MOVAL,N;N为中断类型号MOVAH,35H;35H为子功能号INT21H;取出中断类型N的老PUSHES;保护原中断处理程序的段基值PUSHBX;保护原中断处理程序的偏移量PUSHDSMOVAX,SEGINTHAND;段基值送DSMOVDS,AX;MOVDX,OFFSETINTHAND;偏移量送DXMOVAL,N;中断类型号N送ALMOVAH,25H;子功能号25H送AHINT21H;入口地址INTHAND写入中断向量表中……2.2.4软件中断服务程序设计软件中断服务程序设计两部分–主程序设计–中断处理程序设计例:用软件中断的方式完成字符串显示,要求中断号为40HDSEGSEGMENTMSGDB'Thebellisring!',0DH,0AH,'$'DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:DSEGSTART:MOVAX,DSEGMOVDS,AXPUSHDS;调用dos功能设置中断向量时,会改变DS的值,所以先保存起来MOVDX,OFFSETRINGMOVAX,SEGRINGMOVDS,AXMOVAL,40H;中断号为40HMOVAH,25HINT21H;设置中断向量POPDSINT040H;调用中断服务程序MOVAH,4CHINT21H;...............RINGPROCNEA
本文标题:微机原理与接口技术 第02章 中断
链接地址:https://www.777doc.com/doc-3164746 .html