收藏 分享(赏)

第8章.ppt

上传人:11xg27ws 文档编号:5850921 上传时间:2019-03-19 格式:PPT 页数:45 大小:190.50KB
下载 相关 举报
第8章.ppt_第1页
第1页 / 共45页
第8章.ppt_第2页
第2页 / 共45页
第8章.ppt_第3页
第3页 / 共45页
第8章.ppt_第4页
第4页 / 共45页
第8章.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、第8章 输入/输出程序设计,8.1 I/O设备的数据传送方式8.2 程序直接控制I/O方式8.3 中断传送方式,外设是用来实现人机交互的一些机电设备。 外设处理信息的类型、速度、通信方式与CPU不匹配, 不能直接挂在总线上,必须通过接口和系统相连,接口 指CPU、存储器、外设之间通过总线进行连接的电路部分, 是CPU与外界进行信息交换的中转站。,I/O设备与主机(CPU和存储器)的通信是通过外设接口进行的,传送控制、状态、数据三种不同的信息,都支持使用IN/OUT指令执行信息交换。,8.1 I/O设备的数据传送方式,控制、状态、数据三种信息,控制信息输出到I/O接口,通知设备和接口要做什么动作

2、,状态信息从I/O接口输入到CPU,表明设备当前所处的状态,数据信息是I/O设备和CPU真正要交换的信息,并行、串行 ?,CPU与外设的工作速度不一致,如何使两者高效、可靠地进行数据传送?,一、程序直接控制 二、中断传送方式 三、DMA传送方式( Direct Memory Access ),CPU与外设间的数据传送方式有以下几种:,程序直接控制方式CPU利用IN/OUT指令直接在端口级上处理输入输出 中断方式CPU在执行程序的同时兼顾对I/O设备的控制或数据传送。当I/O设备准备好(空闲),由I/O通知CPU暂停正在运行的程序,转而处理I/O设备的请求,处理完即返回主程序继续执行。 DMA方

3、式(直接存储器存取方式/成组传送方式)主要适用于高速I/O设备(如磁盘),CPU向I/O接口提供控制信息(如数据块的首地址及字节数),I/O设备直接和存储器进行成批数据的快速传送。,1、程序直接控制方式无条件传送(CPU与外设同步工作): 外部控制过程各种动作时间是固定的,而且是已知的。查询方式(CPU与外设不同步工作):传送前,先查询外设状态,准备好才传送,否则CPU处于等待状态。 2、中断方式:外设与CPU处于并行工作,一旦外设准备好,外设向CPU发中断申请,条件具备,CPU暂停原程序执行,响应中断,外设与CPU串行工作。 3、DMA方式(高速I/O及成组交换数据):CPU不干予,由硬件实

4、现存储器与外设之间交换数据,称直接存取存储器。,DMA传送方式的特点1. 外设和内存之间,直接进行数据传送,不通过CPU, 传送效率高。适用于在内存与高速外设、或两个高速外设之间进行大批量 数据传送。2. 电路结构复杂,硬件开销较大。, 中断传送方式的特点:1. CPU和外设大部分时间处在并行工作状态,只在CPU响应外设的中断申请后, 进入数据传送的过程2. 中断传送方式提高了CPU的效率,查询传送方式特点: 1. CPU通过不断查询外设状态,实现与外设的速度匹配 2. CPU的工作效率低,外设接口由一组寄存器(数据寄存器/状态寄存器/命令寄存器)组成,每个寄存器有一个端口地址(端口号),,8

5、.2 程序直接控制I/O方式,8.2.1 I/O端口,端口中的三种寄存器 数据寄存器: 状态寄存器: 命令寄存器:,对于8位端口, 可达64K(0000FFFFH) ,即65536 对于16位端口,可达32K(0000FFFFH) ,即32768 对于32位端口,可达16K(0000FFFFH) ,即16384,80X86微机中I/O地址空间独立于主存储器,地址空间理论值的大小,地址空间实际上的使用情况,只有十几个外设大容量存储设备,输入指令IN,8.2.2 I/O指令,输出指令OUT,例:测试某状态寄存器(端口号27H)的第2位是否为1 IN AL, 27H TEST AL, 0000010

6、0B JNZ ERRORI/O指令是主机与外设进行通信的最基本途径。DOS功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。,例8.1 Sound程序mov dx, 1000in al, 61hand al, 11111100b sound: xor al, 2out 61h, almov cx, 6000 wait1: loop wait1dec dxjne sound,8.2.3 I/O程序举例,发声原理: 向扬声器发送一串脉冲信号,推动扬声器内纸盆振动,发出声音 脉冲的频率,控制音高; 脉冲的个数(延迟),控制音长,与门,例8.3 CPU要从3个设备轮流输入数据,

7、设备1,2,3的状态寄存器端口号分别用STAT1,STAT2,STAT3表示,第5位是输入准备位。INPUT: IN AL, STAT1TEST AL, 20HJZ DEV2CALL FAR PTR PROC1 DEV2: IN AL, STAT2TEST AL, 20HJZ DEV3CALL FAR PTR PROC2 DEV3: IN AL, STAT3TEST AL, 20HJZ NO_INPUTCALL FAR PTR PROC3 NO_INPUT:,查询传送方式,编程流程:,查询传送方式特点: 1. CPU通过不断查询外设状态,实现与外设的速度匹配 2. CPU的工作效率低,8.3

8、中断传送方式,关于中断的几个概念: 什么是中断? 中断源? 中断向量指什么? 中断向量的地址? 硬件中断、软件中断、非屏蔽中断?,使用中断方式时: 外设准备数据,CPU执行程序,CPU与外设并行工作;一旦外设准备就绪,外设向CPU发中断申请, CPU暂停原程序执行,响应中断,进行数据传输。此时,CPU与外设是串行工作。,INTEL 8059A可编程中断控制器(PIC),8086/8088中断源,LPT2,COM2,COM1,LPT1,1. 向CPU的引脚INTR发中断申请信号 当有多个外设同时发出中断请求时, 能按照一定的优先级顺序,向CPU发出中断申请, 使CPU能优先响应优先级最高的外部设

9、备的中断申请。 2. 送中断类型号在CPU中断响应周期,针对不同外设的中断请求,向CPU传送不同的中断类型号,使CPU执行相应的中断子程。,IBM PC机8259A可编程中断控制器(PIC)主要功能:,1.软中断(内中断): (1)INT指令 (2) CPU错(除法错、溢出) (3)为调试程序设置的中断( 单步、断点)2.硬中断(外中断): (1)外设的I/O请求 可屏蔽中断 (2)电源掉电/奇偶错 非屏蔽中断,8.3.1 8086的中断分类,按中断源的不同,中断分为内中断和外中断,问 外设发出中断请求,CPU是否就一定回响应呢?,这由两个控制条件决定:1、该外设的中断请求是否屏蔽2、CPU是

10、否允许响应中断,8259A的IMR FLAGS的IF,答:不一定,8259A的IMR,I/O端口地址:21H 功能:8位对应控制8个外设 工作方式:0表示允许外设中断请求,1表示禁止,例如新增允许 IR2 的中断申请IN AL, 21H ;读入原IMR的内容AND AL, 1111 1011B ;D2=0,允许IR2的中断申请OUT 21H, AL ;写入IMR,FLAGS的IF,工作方式:IF位=1 允许中断 (STI 开中断)=0 禁止中断 (CLI 关中断),功能:设置CPU中断允许位,非屏蔽中断(类型号为2):一种特殊的外部中断,与IF位的设置情况无关,CPU不能禁止此类中断。,中断命

11、令寄存器,CPU响应某级中断后,如果不发出中断结束命令 EOI ,则8259A会屏蔽同级或低级的中断申请。,为什么要发中断结束命令 EOI?,INTSUB PROC、MOV AL, 20H ;将中断结束命令字20H 送ALOUT 20H, AL ;写入中断命令寄存器中IRET ;中断返回INTSUB ENDP,怎么发中断结束命令 EOI?,中断操作的5个步骤:,(1) 取中断类型号 (2) 计算中断向量地址 (3) 取中断向量,偏移地址送IP,段地址送CS (4) 转入中断处理程序 (5) 中断返回到INT指令的下一条指令,例:BIOS中断 INT 4AH4AH4 = 128H 4AH4+2

12、= 12AH(128H) IP(12AH) CS,8.3.2 中断向量表,中断类型号:? 中断向量表:? 中断向量地址:?,用户如何利用保留的中断类型号扩充中断?,中断程序的编写步骤: 1、主程序的编写:(1) 设置中断向量(2) 设置CPU中断允许位(IF)(3) 设置中断屏蔽位(IMR) 2、中断处理子程序的编写:(1) 中断处理功能(2) IRET中断返回,例:为中断类型N设置中断向量MOV AX, 0 MOV ES, AX MOV BX, N*4 MOV AX, OFFSET INTHAND MOV ES: WORD PTRBX, AX ; 偏移地址(N*4) MOV AX, SEG

13、INTHAND MOV ES: WORD PTRBX+2, AX ; 段地址(N*4+2) INTHAND:IRET,设置/ 取中断向量(方法1:绝对地址法),DOS功能调用(21H)存取中断向量设置中断向量: AH=25H AL=中断类型号 DS:DX=中断向量 INT 21H取中断向量: AH=35H AL=中断类型号 INT 21H 返回时送ES:BX=中断向量,设置/ 取中断向量(方法2:DOS功能调用法),例8.4 用DOS功能调用存取中断向量MOV AL, NMOV AH, 35HINT 21H ; 取原中断向量PUSH ESPUSH BX ; 保存原中断向量PUSH DS MOV

14、 AX, SEG INTHAND MOV DS, AX MOV DX, OFFSET INTHAND MOV AL, N MOV AH, 25H INT 21H ; 设置新的中断向量 POP DS POP DX POP DS MOV AL, N MOV AH, 25H INT 21H ; 恢复原中断向量 RET ; INTHAND: IRET,不同?,8.3.3 中断过程,当中断源产生中断申请后, 不论是内中断、非屏蔽中断,还是可屏蔽中断, 只要满足响应条件,在执行完当前指令后, CPU内部硬件会自动完成下列响应中断的过程:, 取中断类型号N 当前FLAGS的内容入栈 当前CS的内容入栈 当前

15、IP的内容入栈 清IF、TF标志为0 取内存单元( 0 : N 4 )字内容送IP 取中断子程取内存单元( 0 : N 4 + 2 )字内容送CS 入口地址 转中断子程序此时CS:IP指向中断程序的入口,开始执行中断程序。,8.3.4 中断优先级和中断嵌套,当有多个中断源同时产生中断申请时, CPU先响应优先权最高的中断源, 再响应优先级较低的中断源。,高 低 内中断 ( 除零,INT 指令,断点,INTO指令 ) 非屏蔽中断 可屏蔽中断(IR0 , IR1 , IR2 , IR3 , IR4 , IR5, IR6, IR7)低 内中断( 单步 ),中断优先级如何进行控制?,8259A的中断命

16、令寄存器的6、7位可以控制,一般情况下,以正常的优先级方式(IR0IR7) 特殊情况下,可以改变优先级的次序:,R SL 0 0 正常优先级方式 0 1 清除由L2L0指定的中断请求0 各中断优先级依次左循环一个位置 1 1 各中断优先级依次循环到由L2L0指定的中断请求到达最低优先级位置上,CPU正在执行某一中断子程,又被其它中断源中断 使CPU转去执行另一中断子程,这个过程叫中断嵌套,嵌套的概念,. . . . STI. . . . . . (EOI) . . . . . IRET,IF=0,禁止中断,允许级别高中断,允许级别低或同级中断,中断子程序运行过程中的中断允许情况,8.3.5 中

17、断处理程序,中断程序的编写步骤: 1、主程序的编写:(1) 设置中断向量(2) 设置CPU中断允许位(3) 设置中断屏蔽位 2、中断处理子程序的编写:(1) 中断处理功能(2) IRET中断返回,当前指令执行完的含义,对于带重复前缀的串指令(如REP MOVSB),执行一 次重复和串指令即可响应中断;,对MOV和POP指令,处理对象为段寄存器,STI和IRET指令执行完本条指令后再执行一条指令才响应中断。,加封锁指令,看作一条指令,一般指令,只要一条指令的执行周期结束即可响应中断 特殊情况:,软中断子程与子程序的编写类似, 其不同点在于: 1子程用CALL指令调用;中断子程用INT指令调用 2

18、子程用RET指令返回;中断子程用IRET指令返回 3CALL指令直接用过程名做操作数, 即由过程名提供子程的入口地址INT指令由类型号N到中断向量表中固定的单元获得中断子程的入口地址,子程序的编写步骤,1、保存寄存器内容 2、如允许中断嵌套,则开中断(STI) 3、处理中断 4、关中断(CLI) 5、送中断结束命令(EOI)给中断命令寄存器 6、恢复寄存器内容 7、返回被中断的程序(IRET),同子程序,?,?,不同子程序,例8.4 编写一个中断处理程序,要求在主程序运行期间,每隔 10秒响铃一次,同时显示The bell is ring!dseg segmentcount dw 1mess

19、db The bell is ring!,0ah,0dh,$ dseg endscseg segment main proc farassume cs:cseg, ds:dseg, es:dseg start:push dsmov ax, axpush axmov ax, dsegmov ds, ax,mov al, 1chmov ah, 35hint 21h ; 取原中断向量push espush bx ; 保存原中断向量push dsmov dx, offset ringmov ax, seg ringmov ds, axmov al, 1chmov ah, 25hint 21h ; 设置

20、新的中断向量pop dsin al, 21hand al, 11111110bout 21h, al ; 设置中断屏蔽位,允许定时器中断sti ; 开中断,mov di, 2000 delay: mov si, 3000 delay1:dec sijnz delay1dec dijnz delay ; 主程序工作(期间每秒产生中断18.2次)pop dxpop dsmov al, 1chmov ah, 25hint 21h ; 恢复原中断向量ret main endp,ring proc farpush dspush axpush cxpush dxmov ax, dsegmov ds, axsti ; 开中断,允许更高级的中断dec countjnz exitmov dx, offset messmov ah, 09int 21h ; 显示The bell is ring!,mov dx, 100in al, 61hand al, 11111100b sound:xor al, 2out 61h, almov cx, 140h wait1:loop wait1dec dxjne sound ; 响铃mov count, 182 exit: cli ; 关中断pop dxpop cxpop axpop dsiret ring endp cseg endsend start,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报