您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第八章 输入输出与中断
汇编语言程序设计第8章输入输出程序设计1、I/O设备的数据传送方式2、程序直接控制I/O方式3、中断传送方式汇编语言程序设计直接存储器存取(DMA)方式1、程序直接控制的I/O方式(1)立即传送方式(2)程序查询方式2、中断传送方式3、直接存储器存取方式(DMA方式)汇编语言程序设计程序直接控制的I/O方式(1)立即传送方式立即传送方式又称为无条件传送方式,它是最简单的一种输入/输出传送方式。在该方式中,认为外设总是处于准备就绪状态,程序不必查询外设的状态,当需要与之交换数据时,就直接执行输入、输出指令来完成数据的传送。(2)程序查询方式程序查询方式是指:在数据传送之前,CPU要先查询外设的当前状态,只有当外设处于准备就绪或空闲状态时,才执行输入输出指令进行数据传送。否则,CPU循环查询,直到外设准备就绪为止。所以,程序查询方式比立即传送方式可靠性更高。汇编语言程序设计中断传送方式中断传送方式的特点是:主机CPU正常执行操作,当外设需要进行I/O操作时,会向CPU发出一个“申请”信号,请求CPU处理。这时,CPU暂时中断当前正在执行的程序(即主程序),转去执行为输入/输出设备服务的中断处理程序,服务完毕,再返回到被中断的程序处继续执行。采用中断传送方式,CPU不必花大量的时间查询外设状态,而使CPU和外设并行工作,只有当外设准备好时,用很短的时间去处理一下,处理完毕又回到主程序继续执行,可大大提高CPU的工作效率。汇编语言程序设计直接存储器存取方式(DMA方式)DMA方式的思路是:外设与内存间的数据传送不经过CPU,也不需要CPU的干预,在外设与内存间开设直接通道,由一个专门的硬件控制器来直接控制外设与内存间的数据交换,这种方式就叫做直接存储器存取方式,简称DMA方式。用来控制DMA操作的硬件控制器就是DMA控制器。DMA方式可大大提高批量数据的传送速度,对于硬盘这类设备,采用DMA方式很合适。DMA方式主要是在硬件DMA控制器的控制下实现的。汇编语言程序设计程序直接控制I/O方式I/O端口计算机的外部设备和大容量存储设备都是通过接口连接到系统上,每个接口由一组寄存器组成,这些寄存器都分配有一个称为I/O端口的地址编码。计算机的CPU和内存就是通过这些端口和外部设备进行通信的。汇编语言程序设计I/O接口部件一般有三种寄存器:数据寄存器,用作数据缓冲。状态寄存器,用来保存设备和接口的状态信息,供CPU对外设进行测试。命令寄存器,用来保存CPU发出的命令以控制接口和设备的操作这些寄存器都分配有各自的端口号,CPU通过不同的端口号来选择各种外部设备。汇编语言程序设计I/O地址功能I/O地址功能00H~0FHDMA控制器8237A2F8H~2FEH2号串行口(COM2)20H~3FH可编程中断控制器8237A320H~324H硬盘适配器40H~5FH可编程中断计时器366H~36FHPC网络60H~63H8255APPI372H~377H软盘适配器70H~71HCMOSRAM378H~37AH2号并行口(LPT1打印机)81H~8FHDMA页表地址寄存器380H~38FHSDLC及BSC通信汇编语言程序设计93H~9FHDMA控制器390H~393HCluster适配器A0H~A1H可编程中断控制器23A0H~3AFHBSC通信C0H~CEHDMA通道,内存/传输地址寄存器3B0H~3BFHMDA视频寄存器F0H~FFH协处理器3BCH~3BEH1号并行口170H~1F7H硬盘控制器3C0H~3CFHEGA/VGA视频寄存器200H~20FH游戏控制端口3D0H~3D7HCGA视频寄存器278H~27AH3号并行口(LPT2打印机)3F0H~3F7H软盘控制寄存器2E0H~2E3HEGA/VGA使用3F8H~3FEH1号串行口(COM1)汇编语言程序设计I/O指令I/O指令用来完成累加器(AL/AX)与I/O端口间的数据传送,包括输入指令IN和输出指令OUT两条指令,每条指令都有直接和间接两种端口寻址方式。1.输入指令IN指令格式:INAL/AX,addr指令功能:将指定的I/O端口中的内容输入到累加器AL/AX中。1)直接端口寻址方式:INAL,addr;AL←[addr]INAX,addr;AX←[addr+1,addr]2)间接端口寻址方式:INAL,DX;AL←[DX]INAX,DX;AX←[DX+1,DX]汇编语言程序设计输出指令(OUT)指令格式:OUTadr,AL/AX指令功能:将累加器AL或AX中的内容输出到指定的I/O端口中。1)直接端口寻址方式:OUTadr,AL;[adr]←ALOUTadr,AX;[adr+1,adr]←AX2)间接端口寻址方式:OUTDX,AL;[DX]←ALOUTDX,AX;[DX+1,DX]←AX汇编语言程序设计需要注意的问题1)输入、输出指令不影响标志位。2)IN指令的目的操作数和OUT指令的源操作数只能使用累加器AL、AX,若需要将I/O端口中的内容输入(IN指令)到其它寄存器或内存单元中,只能先输入到累加器中,然后再传送一次。3)在直接寻址方式中,端口地址在指令中直接给出。它是个8位的立即数,即端口的8位物理地址,其范围是0-255(0-FFH),直接端口寻址方式只限于外设的前256个端口。汇编语言程序设计4)在间接寻址方式中,端口地址通过DX间接给出,其范围为0~65535(0~FFFFH),所有I/O端口都可以使用这种寻址方式。5)对于前256个端口(0~FFH),既可使用直接寻址,又可使用间接寻址;而当端口号超过256时,只能使用间接寻址,也就是要先把端口地址放到DX中,然后再进行输入或输出。6)输入/输出指令提供了字节、字使用方式,选用哪一种,取决于I/O端口的宽度,如为字端口,则用字操作指令。7)输入/输出指令中的端口号或寄存器DX的内容均为端口的地址,而传送的是端口中的内容。汇编语言程序设计例1:将端口61H中的内容送入寄存器BH中。INAL,61HMOVBH,AL例2:把一个字从端口地址0028和0029传送到存储器的DATA_WORD字单元中。INAX,28HMOVDATA_WORD,AX例3:测试某状态寄存器(端口地址位27H)的第2位是否为1,若为1,则转移到ERROR进行处理。INAL,27HTESTAL,00000100BJNZERROR汇编语言程序设计中断传送方式1、8086的中断分类2、中断指令3、中断向量表4、中断过程5、中断优先级和中断嵌套6、中断处理程序汇编语言程序设计中断:是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。中断源:通常把引起中断的事件或原因。它们可能是来自外设的I/O请求,也可能是计算机的一些异常事故或其他内部原因。中断服务程序:事先编好的处理特殊事件的程序。断点:中断发生时正在执行的程序被中断的位置。保护现场:处理中断之前保护运行环境的工作。恢复现场:执行完中断处理程序后恢复运行环境的工作。汇编语言程序设计80X86中断源指令中断程序性中断外设中断硬件故障中断汇编语言程序设计中断的分类8086的中断源可分为软件中断(内部中断)和硬件中断(外部中断)两大类1.软件中断:由CPU内部引起的中断,引起内部中断的原因有三种:(1)由中断指令INT引起CPU执行完一条INTn指令后,会立即产生中断,并且调用系统中相应的中断处理程序来完成中断功能。汇编语言程序设计(2)由于CPU的某些错误而引起除法出错中断;中断类型号为0;在执行除法指令时,若发现除数为0或商超过了寄存器所能表达的范围,则产生一个类型为0的中断。溢出中断:中断类型号为4,如果溢出标志OF=1,有一条专门指令INTO来中断发生溢出的算术操作。汇编语言程序设计(3)为调试程序而设置的中断单步中断:中断类型为1,当标志位TF=1时,每条指令执行后,CPU自动产生类型号为1的中断。产生单步中断时,CPU同样自动将FLAGS、CS和IP的内容保存入栈,然后清除IF和TF,按正常方式运行中断服务程序。在单步处理程序结束时,原来的FLAGS从堆栈中取回,又把CPU重新设置为单步方式。汇编语言程序设计断点中断:中断类型为3,供DEBUG调试程序用的。断点可以设置在程序的任何地方,设置断点实际上是把一条断点指令INT3插入到程序中,CPU每执行到断点处的INT3指令便产生一个中断。在上述中断中,INT指令和INTO指令产生的中断,以及除法错中断都不能被禁止,并且比任何外部中断的优先级都高。汇编语言程序设计2.硬件中断:来自处理机外部的中断。(1)非屏蔽中断(NMI)是用户不能通过CPU内的中断允许触发器IF控制的中断,由8086CPU的NMI管脚引入,这种中断一旦产生,在CPU内部直接生成中断类型号02的中断。如果系统使用了这种类型的中断,那么CPU总会响应,所以非屏蔽中断主要用于一些紧急的意外处理,如电源掉电等。汇编语言程序设计(2)可屏蔽中断,来自各种外部设备的中断。可屏蔽中断就是用户可以控制的中断,其途径是通过对CPU内的中断允许触发器IF的设置来禁止和允许CPU响应中断。可屏蔽中断由8086CPU的INTR管脚引入。这种中断请求需要设备提供中断类型号,CPU响应中断后,取中断类型号的4倍作为中断服务入口地址表的地址,通过查表得到相应的中断服务程序首地址,转去执行相应的中断服务程序。汇编语言程序设计INTR用于外部设备的中断请求。这些外设通过8259A可编程控制器与CPU相连。外设发出的中断请求,CPU是否做出响应由两个控制条件决定;一是该外设的中断请求是否被屏蔽;二是CPU是否允许响应中断。这两个条件分别由8259A中的中断屏蔽寄存器(IMR)和标志寄存器(PSW)中的中断允许位IF控制。中断屏蔽寄存器格式如所示。汇编语言程序设计中断指令1.中断指令INT指令格式:INTN指令的执行过程:1)SP←SP-2,SS:[SP]←PSW将标志寄存器的内容压入堆栈保存2)IF←0,TF←0AC←0清除中断允许标志IF和清除单步标志TF3)SP←SP-2,SS:[SP]←CSSP←SP-2,SS:[SP]←IP将断点地址的段基址值CS和偏移值IP压入堆栈保存,即保护断点。4)IP←[N×4],CS←[N×4+2]取中断处理程序的入口地址,并转去执行。汇编语言程序设计2.溢出则中断指令INTO指令格式:INTO指令的执行过程:若OF=1,则产生一个类型号为4的中断;若OF=0,则不产生中断。3.中断返回指令IRET指令格式:IRET指令的执行过程:(1)IP←SS:[SP],SP←SP+2恢复断点地址的偏移值。(2)CS←SS:[SP],SP←SP+2恢复断点地址的段基址值。(3)FLAGS←SS:[SP],SP←SP+2恢复标志寄存器的内容。汇编语言程序设计中断向量表8086中断系统能处理256种类型的中断,中断类型号的范围为0-FFH。每种类型的中断都由相应的中断服务程序来处理,中断服务程序的入口地址又叫做中断向量,每个中断向量占4个字节(前2个字节存放中断服务程序的偏移地址,后2个字节存放中断服务程序的段地址),把各中断服务程序的入口地址集合到一起形成的入口地址表就叫做中断向量表。CPU接收到某个中断时,要自动转到相应的中断处理程序中执行,必须知道该中断源对应的中断处理程序在内存中的位置(该中断处理程序事先必须编制好),这样就要查找该中断源对应的中断向量。汇编语言程序设计中断向量表保存在内存最低地址的1KB空间内,其地址范围为0段0000H~0段3FFH内存区。各中断服务程序的入口地址按其类型号依次存放,每个入口地址占用四个字节。中断向量入口地址与中断类型号之间的关系:中断向量入口地址=4×中断类型号中断类型号乘以4,即可计算出相应的中断向量地址,从该地址的内存单元中取出偏移地址和段地址分别放入IP和CS,CPU就可以转入相应的中断处理程序。即:IP←[4×N,4×N+1]CS←[4×N+2,4×N+3]汇编语言程序设计汇编语言程序设计地址中断类型号用途地址中断类型
本文标题:第八章 输入输出与中断
链接地址:https://www.777doc.com/doc-3168753 .html