第8章输入输出程序设计

上传人:我** 文档编号:115454849 上传时间:2019-11-13 格式:PPT 页数:37 大小:295KB
返回 下载 相关 举报
第8章输入输出程序设计_第1页
第1页 / 共37页
第8章输入输出程序设计_第2页
第2页 / 共37页
第8章输入输出程序设计_第3页
第3页 / 共37页
第8章输入输出程序设计_第4页
第4页 / 共37页
第8章输入输出程序设计_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《第8章输入输出程序设计》由会员分享,可在线阅读,更多相关《第8章输入输出程序设计(37页珍藏版)》请在金锄头文库上搜索。

1、第8章 输入输出程序设计,8.1 I/O设备的数据传送方式 8.2 程序直接控制I/O方式 8.3 中断传送方式,1. CPU与外设,(1)外部设备通过接口或控制器和CPU相连接,CPU通过输入输出指令IN,OUT与外部设备交换信息。交换的信息包括控制、状态和数据三种信息。 (2)控制信息输出到I/O接口,通知接口和设备要做什么动作。 (3)状态信息从I/O口输入到CPU,表示I/O设备当前所处的状。 (4)数据信息是I/O设备和CPU真正要交换的信息。,8.1 I/O设备的数据传送方式,2. 直接存储器存取(DMA)方式,(1)DMA方式能使I/O设备直接和存储器进行成批数据的快速传输 (2

2、)DMA方式主要用于一些高速的I/O设备,这些设备传输字节或字的速率非常快,对于这类设备,如果I/O指令的方式或者一次次中断的方式来传输字节,将会造成数据的丢失。 (3)DMA控制器一般包括四个寄存器:控制寄存器、状态寄存器、地址寄存器和字节计数器。,(4)DMA传送的步骤 DMA控制器向CPU发出HOLD信号,请求使用总线。 CPU发出响应HOLD信号给DMA控制器,并将总线让出,这时CPU放弃对总线的控制,而DMA控制器获得了总线控制权。 传输数据的存储器地址(在地址寄存器中),通过地址总线。 传输的数据字节通过数据总线进行传送。 地址寄存器增1,以指向下一个要传送的字节。 字节计数器加1

3、。如果字节计数器非0,转向第3步。 否则,DMA控制器撤销总线请求信号HOLD,传送结束。,8.2程序直接控制I/O方式 1、I/O端口 (1)I/O接口是将外设连接到系统总线上的一组逻辑电路的总称。每个接口部件都包含一组寄存器,一般称这些寄存器为 I/O端口。每个端口有一个端口地址。 (2)I/O接口中一般有三种寄存器:数据寄存器、状态寄存器、命令寄存器。 (3)I/O端口单独编址I/O地址空间独立于存储地址空间。8088/8086的端口有64K个,无需分段,设计有两种寻址方式 直接寻址:只用于寻址00H FFH前256个端口,操作数i8表示端口号 间接寻址:可用于寻址全部64K个端口,DX

4、寄存器的值就是端口号。,2、I/O指令 输入指令 IN AL,i8 ;字节输入,直接寻址 IN AL,DX ;字节输入,间接寻址 IN AX,i8 ;字输入,直接寻址 IN AX,DX ;字输入,间接寻址 输出指令 OUT i8,AL ;字节输出,直接寻址 OUT DX,AL ;字节输出,间接寻址 OUT i8,AL ;字输出,直接寻址 OUT DX,AL ;字输出,间接寻址,例:从一个数据寄存器输入数据或从状态寄存器输入接口 和外设的状态。 IN AX,28H MOV DATA_WOARD,AX 把一个字从端口地址0028和0029传送到存储器。 例:测试状态寄存器(端口地址为27H)的第2

5、位是否为1 ,若为1,则转移ERROR进行处理。 IN AL,27H TEST AL,00000100B JNZ ERROR 例:某接口的命令寄存器(端口地址为126H)的低7位控制程组数据传送。 MOV DX,126H IN AL,DX OR AL,80H OUT DX,AL,3、I/O程序举例 发生子程序SOUND 程序通过I/O指令使设备控制寄存器(I/O端口地址为61H)的第1 位交替为0和1,而端口61H的第1位和扬声器的脉冲门相连,当第1 位由0变为1,延迟一会又由1变为0时,脉冲门就先打开后关闭, 产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使之发出 声音。,Sound:

6、proc near push ax push dx mov dx,cx in al,61h and al,11111100b trig: xor al, 2 out 61h, al mov cx, 140h wait1: loop wait1 dec dx jne sound pop dx pop ax ret Sound endp,轮流查询几种I/O设备: DEV1: IN AL, STAT1 TEST AL, STAT1_BIT JZ DEV2 CALL FAR PTR PROC1 DEV2: IN AL, STAT2 TEST AL, STAT2_BIT JZ DEV3 CALL FAR

7、 PTR PROC2 DEV3: IN AL, STAT3 TEST AL, STAT3_BIT JZ DEV1 CALL FAR PTR PROC3,优:程序安排或修改 设备的优先次序。 缺:查询等待浪费CPU大量有效时间。,8.3中断传送方式 1、中断概念 中断是CPU和外部设备进行I/O的有效方法,它避免因反 复查询外部状态而浪费时间,提高了CPU的效率。 中断是一种使CPU终止正在执行的程序而转去处理特殊事 件的操作。引起中断的事件称为中断源。,80x86中断源,2、8086的中断分类 (1)软件中断 软件中断又称为内中断,由三种情况引起: 由中断指令INT引起 由于CPU的某些错误而

8、引起。 为调试程序(DEBUG)设置的中断。,1)中断指令INT引起的内中断 在执行中断调用指令INT n时产生的一个向量号为n(0 255) 的内部中断,称为指令中断。INT指令可以指定00FFH中的任何 类型号。 例: INT 12H 当CPU执行该指令时,立即产生一个中断,并从中断向量表的 00000:00048H开始的四个字节单元中取出段地址和偏移地址;然 后转去执行相应的中断处理程序。 2)处理CPU某些错误的中断 除法错中断,类型号为0 在执行除法指令时,若除数为0或商超过了寄存器所能表达的范围, 则产生一个向量号为0的内部中断,称为除法错中断。,例: mov bl,0 idiv

9、bl ;除数BL0,产生除法错中断 mov ax,200h mov bl,1 div bl ;商200H,不能用AL表达 ;产生除法错中断 溢出中断 在执行溢出中断指令INTO时,若溢出标志OF为1,则产生一个向量 号为4的内部中断,被称为溢出中断 例如: mov ax,2000h add ax, 7000h ;2000H7000H9000H,溢出:OF1 into ;因为OF1,所以产生溢出中断,3)为调试程序(DEBUG)设置的中断 单步中断 若单步中断TF为1,则在每条指令执行结束后产生一个向量号为1 的内部中断,称为单步中断。 产生中断时CPU同样自动的将FLAGS,CS和IP的内容保

10、存如堆栈, 然后清除TF和IF,于是,当进入单步中断处理子程序后,就不是 处于单步方式了,将按照正常的方式运行中断处理程序。单步处理 程序结束,原来的FLAGS从堆栈中取回,又把CPU重新设置为单步 方式。 断点中断 8086/8088系统中有一条专用于设置断点的指令,其操作码为 单字节0CCH(助记符 INT 3)。 CPU执行该指令产生一个中断 类型码为3的中断。,(2)硬件中断 硬件中断来自处理器的外部,以完全随机的方式中断现行 程序而转向另一程序。又称外部中断。 硬件中断主要有两个来源: 非可屏蔽中断(NMI) 可屏蔽中断(INTR),1)非可屏蔽中断(NMI) 中断类型号为2,CPU

11、不能通过IF位来禁止,当NMI引脚 有中断请求,那么CPU总会响应。非可屏蔽中断一般用于 紧急的意外处理,如电源断电等。 2)可屏蔽中断(INTR) 外部设备通过8259中断控制器和CPU的INTR引脚相连, 可编程中断控制器可接收来自外设的中断请求信号,并把 中断源的中断类型号送CPU,若CPU响应中断请求,则自 动转入相应的中断处理程序。 外设发出的中断请求得到相应需两个条件 8259的中断屏蔽寄存器(IMR)端口地址(21H)相应位是否被屏蔽 标志寄存器(FLAGS)中的中断允许位是否为1,3、中断向量表 每种中断都给安排一个中断类型号。80x86中断系统能处理256种 类型的中断,类型

12、号为00H0FFH。每种中断类型的中断都由相应 的中断处理程序。如图8.5 (1)中断向量:实际上就是中断处理子程序的入口地址,每个中断类型对应一个中断向量。 (2) 8086的中断系统是以位于内存0段的03FFH区域存放中断向量,中断向量表中最多可以容纳256个中断向量。 (3)中断向量表就是各类型中断处理程序的入口地址表。 (4)中断向量并不是任意存放的。一个中断向量占4个存储单元,其中,前2个单元存放中断处理子程序入口地址的偏移量(IP),低位在前,高位在后,后2个单元存放中断处理子程序入口地址的段地址(CS),同样也是低位在前、高位在后。按照中断类型的序号,对应的中断向量在内存的0段0

13、单元开始有规则地进行排列。,图8.5 中断向量表,例:BIOS中断INT 4AH中断操作 取中断类型号; 计算中断向量地址; 取中断向量,偏移地址送IP,段地址送CS; 转入中断处理程序; 中断返回到INT指令的下一条指令; 向量地址=4AH*4=128H (128H)=1806H,(12AH)=F000H 则:IP=1806H,CS=F000H 那么程序转去CS:IP=F000:1806H去执行,图8.6 中断操作步骤,(4)编写指令为中断类型N设置中断向量 MOV AX,0 MOV ES,AX MOV BX,N*4 MOV AX,OFFSET INTHAND MOV ES:WORD PTR

14、BX,AX MOV AX,SEG INTHAND MOV ES:WORD PTRBX+2,AX,(5)设置中断向量和取中断向量 设置中断向量:把AL指定的中断类型的中断向量DS:DX 放在中断向量表中 预置: AH=25H AL=中断类型号 DS:DX=中断向量 执行:INT 21H 取中断向量:把指定的中断类型的中断向量从中断向量表 中取到ES:BX中 预置: AH=35H AL=中断类型号 执行:INT 21H 返回时送DS:BX=中断向量,4、中断过程 当发生中断时,中断机构自动完成下列工作 取中断类型号N 标志寄存器(FLAGS)内容入栈 当前代码段(CS)内容入栈 当前指令计数器(I

15、P)内容入栈 禁止硬件中断和单步中断(IF=0,TF=0) 从中断向量表中取4*N的字内容送IP,取4*N+2的字内容送CS 转中断处理程序。,图8.7 中断过程,5、中断处理程序 (1)中断响应主程序准备工作及硬件自动完成的动作。 主程序: 设置中断向量 设置设备的中断屏蔽位 设置CPU的中断允许位IF(开中断) 硬件自动完成: 外设接口送中断请求给CPU 当前指令执行完后,CPU送响应信号给外设 CPU接收中断类型号 当前的FLAGS,CS和IP保存入栈 清除IF和TF 中断向量送IP和CS,说明: 设备发送到CPU的中断请求信号是随机的 CPU正在执行一条指令,那么要等指令执行完后,才响

16、应中断。 对加封锁的指令(LOCK MOV AX,BX)应看做一个整体处理 对于串处理指令(REP MOVSB)不是全部重复执行完,而是执行一次重复和串指令即可响应中断 对MOV和POP指令,如果处理对象是段寄存器,那么本条指令执行完后,接着再执行一条指令才响应中断。 对开中断指令STI和中断返回指令RETI,执行完后,在执行一条指令才响应中断。,(2)中断处理程序的编写方法 保存寄存器内容; 如允许中断嵌套,则开中断(STI); 处理中断; 关中断(CLI); 送中断结束命令(EOI)给中断命令寄存器; 恢复寄存器内容; 返回被中断的程序。,中断实例(1),例:在系统定时器(中断类型为8)的中断处理程序中,有一条中断指令INT 1CH ,时钟中断每发生一次(约每秒中断18.2次),都要调用一次中断类型1CH的处理程序。在ROM BIOS中,1CH的处理程序只有一条IRET指令,实际上它并没有做任何工作,只是为用户提供了一个中断类型号。如果用户有某种定时周期性的工作需要完成,就可利用系统定时器的中断间隔,用自己设计的处理程序来代替原有的1C

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号