您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第8章 输入输出与中断
第八章输入输出与中断8.1CPU与外设间的数据传送8.2中断系统概述8.3输入输出指令8.4中断指令8.58086/8088的中断系统8.68259A中断控制器及其程序设计8.7中断程序设计方法8.8IBMPC的BIOS调用及DOS功能调用8.1CPU与外设间的数据传送8.1.1输入输出接口CPU外部设备数据寄存器状态寄存器控制寄存器端口地址数据控制信号数据状态信号控制信号I/O接口8.1.2CPU与外设之间的接口信号2.状态信息它用来反映外设接口电路或外设的状态,CPU可根据这些状态信息决定对外设的操作或控制。3.控制信息用于控制输入输出设备装置的启动或停止,设备的工作方式等。以上三种不同性质的信息通过不同的端口传送,每个端口都有自己的地址,CPU寻址的是端口地址,而不是笼统的外设。1.数据信息这是CPU和外设之间真正要交换的信息。8.1.3CPU与外设间的数据传送方式(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时间。8.2中断系统概述中断:当CPU正在执行某程序时,由于外界事件的需要向CPU发出申请,CPU暂停现行程序的执行而转去处理临时发生的事件,处理完后再返回到被中断程序的断点处,继续向下执行,这个过程称为中断。在中断过程中执行的事件处理程序称为中断服务程序。(1)一般的输入输出设备。如键盘、打印机、通信接口等。(2)数据通道中断源。如磁盘。(3)实时时钟。(4)故障源。(5)为调试程序而设置的中断源。8.2.1中断请求与中断源I/O设备或者事件需要CPU中断处理时,必须向CPU发出中断请求信号。该信号作为CPU的输入,当CPU收到该信号时,可引起中断。引起中断的原因,或者说发出中断请求信号的源称为中断源。通常,中断源有以下几种:8.2.2中断系统的功能(1)实现中断与返回(2)能实现优先级排队(3)能实现中断嵌套8.2.3中断响应1.CPU响应中断的条件(1)有中断请求信号。(2)中断请求没有被屏蔽。(3)CPU的中断是开放的。(4)CPU在现行指令执行完毕时,响应中断。(1)关中断。(2)保存断点。(3)保护现场。(4)给出中断服务程序入口,并转入该服务程序。(5)恢复现场。(6)从中断返回。2.中断响应时及中断响应期间CPU应做的工作8.2.4中断向量与中断向量表8086/8088能处理256种不同方式的中断,每种中断都要求一个方式码,供cpu识别,然后转至相应的中断服务程序??如何根据中断方式码转至相应的中断服务程序中断向量:中断处理程序的入口地址中断向量表:8086/8088中断系统把所有(256种)中断处理程序的入口地址集中存放在存储器的起始区域,这个区域就形成了中断处理程序入口地址表,该表称为中断向量表8086/8088在其内存的前1K字节(地址为00000H~003FFH)建立了一个中断向量表。表中内容分为256项,对应于类型号0~255,其结构如下:类型0的中断服务程序入口地址类型1的中断服务程序入口地址类型2的中断服务程序入口地址::类型255的中断服务程序入口地址00000H00003H003FCH003FFH00008H0000BH00004H00007H0000CH003FBH256项中断中–前5项为系统所用类型0:除法错误中断类型1:单步中断(TF=1)类型2:NMI类型3:INT3指令类型4:溢出中断–保留27项以备将来扩充(类型5~~类型31)–余下的224项用户可以使用每一个中断向量占用4个字节单元,用来存放相应类型的中断服务程序的入口地址–高两个字节存放服务程序的入口地址的段地址部分–低两个字节存放入口地址的偏移量部分。Cpu将中断向量码乘以4就可以得到存放相应中断向量的地址–将该地址中的内容(即中断向量)读出就可转到相应的中断服务程序–将低2字节的内容读出送到IP中–将高2字节的内容读出送到CS中16中断向量:中断服务程序的入口地址。每个入口地址由4B组成,高地址存放段基址,低地址存放偏移量。中断向量表:存放256种中断的中断向量(256×4=1KB)。在内存的0~3FFH单元。中断类型码n与中断向量:中断类型码n×4的连续4B为中断类型n的中断服务程序入口地址。175.3.1中断的基本概念例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)…….8.3输入输出指令1.IN输入指令指令汇编格式:INacc,port操作:acc←(port)将指定端口的内容(字或字节)传送到累加器AX或AL中。受影响的标志位:无说明:当端口地址port=0FFH时,指令中可以直接使用;否则必须把端口地址先保存到DX中,然后指令中使用DX举例:1)INAL,61H;将端口地址为61H的8位内容传送到AL中2)INAX,61H;将端口地址为61H的16位内容传送到AX中3)MOVDX,257HINAX,DX8.3输入输出指令2.OUT输出指令指令汇编格式:OUTport,acc操作:port←acc将累加器AX或AL的内容传送到指定端口。受影响的标志位:无说明:当端口地址port=0FFH时,指令中可以直接使用;否则必须把端口地址先保存到DX中,然后指令中使用DX举例1)OUT61H,AL;将AL中的内容传送到地址为61H的端口中2)OUT61H,AX;将AX中的内容传送到地址为61H的端口中3)MOVDX,257HOUTDX,AX8.4中断指令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从中断服务程序返回被中断程序的断点处继续执行。INTO举例:MOVAH,10HMOVAL,81HSUBAH,ALINFO;由于溢出,启动溢出中断服务程序ADDAL,AH8.58086/8088的中断系统非屏蔽中断请求中断逻辑INTn(指令)INTO(指令)除法错误单步中断(TF=1)8259APIC可屛蔽中断请求NMIINTR8.5.1外部中断8086/8088CPU有两种中断请求输入,即非屏蔽中断请求输入和可屏蔽中断请求输入。用户不能禁止的中断称为非屏蔽中断,这种中断一旦出现,CPU必须立即响应,所以非屏蔽中断总是用于处理紧急事件。用户能控制的中断称为可屏蔽中断,用户可通过软件禁止可屏蔽中断的中断源发中断请求信号,或者关闭中断而对发出的请求不作响应。1.可屏蔽中断(1)为可屏蔽中断设置的指令。(2)8259A中断控制器。用来对可屏蔽中断源进行管理,其主要任务是接收外部设备的中断请求,然后根据优先级的高低和预先规定的排优规则决定哪个设备能够申请中断,由8259A向CPU发中断请求信号。当CPU响应此请求并给出中断应答之后,8259A还要把一个中断方式码通过数据总线交给CPU,供CPU识别是谁发出的中断请求。每个8259A有8个中断请求输入端,因此单个8259A可以处理8级中断。在不增加任何硬件线路的情况下,通过级连8259A最多可以管理64级中断。8259AINTAINTIR0IR1IR2IR3IR4IR5IR6IR7SP/EN到8086INTACAS0CAS1INTCAS2IR0IR1IR2IR3IR4IR5IR6IR7SP/EN到8086IR0INTAIR1IR2INTIR3IR4CAS0IR5CAS1IR6CAS2IR7SP/ENIR0INTAIR1IR2INTIR3IR4CAS0IR5CAS1IR6CAS2IR7SP/EN8259A:::中断请求输入(最多64条)8259A8259A(3)CPU对可屏蔽中断的响应。当外设通过8259A向CPU提出申请,且CPU的IF=1时,CPU就挂起正在处理的任务,进行中断响应和处理。整个过程如下:①响应中断;②读取8259A送来的方式码;③将标志寄存器F的内容压栈;④清除中断允许标志位IF和陷阱标志位TF;⑤将代码段寄存器CS和指令指针IP的内容压栈;⑥根据方式码找到服务程序入口,且调用服务程序;⑦执行用户中断服务程序;⑧将保存在栈中的IP和CS的内容从栈中弹回到IP和CS;⑨将保存在栈中的标志寄存器F的内容从栈中弹回到标志寄存器F;⑩从中断返回。以上过程的①~⑦由硬件自动完成,⑧~⑩执行IRET指令实现。2.非屏蔽中断这类中断不能被屏蔽,即使在关中断的情况下(IF=0),在执行完当前指令后,CPU也会立即响应。非屏蔽中断的方式码规定为2。响应非屏蔽中断的过程如下:①将标志寄存器F的内容压栈;②清除中断允许标志位IF和陷阱标志位TF;③将代码段寄存器CS和指令指针IP的内容压栈;④根据方式码(=2)找到服务程序入口,且调用服务程序;⑤执行非屏蔽中断服务程序;⑥将保存在栈中的IP和CS的内容从栈中弹回到IP和CS;⑦将保
本文标题:第8章 输入输出与中断
链接地址:https://www.777doc.com/doc-3218441 .html