




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章输入输出程序设计第一页,共五十九页,2022年,8月28日本章内容提要I/O设备的数据传送方式程序直接控制I/O方式中断传送方式第二页,共五十九页,2022年,8月28日8.1I/O设备的数据传动方式1CPU与外设2直接存储器存取(DMA)方式第三页,共五十九页,2022年,8月28日8.1.1CPU与外设与CPU进行数据交换的,除了存储器外,还有输入输出设备(统称为外设)。输入IN和输出OUT指令,可以从外设读取数据和向外设提供数据。由于外设种类繁多,其工作原理、数据格式、操作时序等各异,所以在处理器与外设之间还有一个协调两者数据传送的逻辑电路,称为输入输出(I/O)接口电路。处理器并不直接操纵外设,而是通过I/O接口来控制外设。第四页,共五十九页,2022年,8月28日I/O接口电路中的寄存器I/O接口电路呈现给程序员的,是各种可编程寄存器。这些寄存器可以分成三类:数据寄存器——它保存和处理与外设间交换的数据;控制寄存器——处理器通过它对外设进行控制,也称命令寄存器;状态寄存器——外设的当前工作状态通过它向处理器提供。在涉及外设操作的输入输出程序中,各种寄存器以I/O地址(端口)体现;对应三类寄存器分别称为:数据端口、控制端口、状态端口。第五页,共五十九页,2022年,8月28日CPU与外设数据传送方式程序直接控制传送方式程序查询I/O方式中断传送方式直接存储器存取(DMA)方式第六页,共五十九页,2022年,8月28日8.1.2直接存储器存取(DMA)方式主要由硬件DMA控制器实现其传送功能。DMA(directmemoryaccess)方式,也称为成组数据传送方式。主要用于一些高速的I/O设备。如磁带、磁盘、A/D等设备。传送数据时,每个字节一到达端口,就直接从接口送到存储器;同样,接口和它的DMA控制器也能直接从存储器取出字节并把它送到I/O设备去。第七页,共五十九页,2022年,8月28日DMA工作原理DMA控制器(intel8237A)一般包括四个寄存器:
控制寄存器 状态寄存器 地址寄存器 字节计数器在信息传送前,应初始化这些寄存器。
地址寄存器←要传送的数据块首地址;
字节寄存器←要传送的数据长度(字节数);
状态寄存器←控制字,指出数据是输入还是输出,并启动DMA操作。每个字节传送后,地址寄存器加1,字节计数器减1。第八页,共五十九页,2022年,8月28日DMA传送步骤由系统完成以下步骤:⑴DMA控制器向CPU发出HOLD信号,请求使用总线。⑵CPU发出响应信号HOLD给DMA控制器,并将总线让出,这时CPU放弃了对总线的控制,而DMA控制器获得了总线控制权。⑶传输数据的存储器地址(在地址寄存器中)通过总线发出。⑷传输的字节数通过数据总线进行传送。⑸地址寄存器加1,以指向下一个要传送的字节。⑹字节计数器减1。⑺如字节计数器非0,转向第3步。⑻否则,DMA控制器撤销总线请求信号HOLD,传送结束第九页,共五十九页,2022年,8月28日8.2程序直接控制I/O方式1I/O端口2I/O指令3I/O程序举例第十页,共五十九页,2022年,8月28日8.2.1I/O端口80x86中,I/O端口独立编址,允许设置64K(65535)个8位端口,或32K(32768)个16位端口。CPU和内存通过I/O端口与外设进行通信。表8.1列出了部分端口地址(十六进制)。第十一页,共五十九页,2022年,8月28日8.2.2I/O指令IN/OUT指令,即可传送字节又可传送字,使用的寄存器必须是AL或AX。直接寻址:寻址0~255号端口。间接寻址:所有端口,使用DX寄存器。IN AX,28HMOV DATA_WORD,AXIN AL,27HTEST AL,00000100HJNZ ERRORMOV DX,126HIN AL,DX ;端口126H OR AL,80H ;第7位控制成组数据传送OUT DX,AL第十二页,共五十九页,2022年,8月28日8.2.3I/O程序举例例8.1发声子程序SOUND例8.2 查询方式
打印字符程序PRT_CHAR例8.3 查询方式 控制数据输入第十三页,共五十九页,2022年,8月28日8.3中断传送方式18086的中断分类2中断向量表3中断过程4中断优先级和中断嵌套5中断处理过程第十四页,共五十九页,2022年,8月28日中断的相关概念
中断是CPU和外设进行数据传送的有效办法。它可以避免因反复查询外设状态而浪费的时间,从而提高CPU的效率。中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。中断源——引起中断的事件。外部中断(硬件中断)——由外设控制器或协处理器引起的中断。内部中断(软件中断)——由程序中安排的中断指令INT产生的中断,或由CPU的某些错误结果产生的中断。8080/8088的中断源如图8.3所示。第十五页,共五十九页,2022年,8月28日8.3.18086的中断分类软件中断硬件中断第十六页,共五十九页,2022年,8月28日1.软件中断软件中断又称内中断。它通常由三种情况引起:由中断指令INT引起;由于CPU的某些错误引起;为调试程序(DEBUG)设置的中断。第十七页,共五十九页,2022年,8月28日(1)中断指令INT引起的内中断CPU执行完一条INTn指令后,会立即产生中断,并调用系统中相应的中断处理程序来完成中断功能,n指出中断类型号。INT指令可以指定0~0FFH中的任何类型号。除系统占用的类型号之外,用户还可利用为用户保留的类型号扩充新的中断处理功能。INTn、INTO、除法错中断都不能被禁止,而且比任何外部中断的优先级都高。第十八页,共五十九页,2022年,8月28日(2)处理CPU某种错误的中断除法错中断:INT0在执行除法时,如果除数为0或商超过了寄存器所能表达的范围,则产生一个类型为0的中断。溢出中断:INTO 中断类型号为4若溢出标志OF=1,则产生溢出中断;否则,不产生中断,CPU继续运行原程序。该中断的处理程序,主要是打印出一个错误信息,在处理结束后,不返回原程序继续执行,而是把控制权交给操作系统。如: ADD AX,VALUE INTO ;测试加法溢出第十九页,共五十九页,2022年,8月28日(3)为调试程序(DEBUG)设置的中断
单步中断:为寻找程序中的问题,进行单步工作(一次只执行一条指令)。类型号为1。当单步标志位TF=1时,每条指令执行后,CPU会自动产生单步中断。使用单步中断可以逐条指令地跟踪程序的流程,观察CPU每执行一条指令后,各个寄存器及有关存储单元的变化,从而指出和确定产生错误的原因。
断点中断:将程序分段,为每段设置一个断点。中断类型号为3。当CPU执行到断点时便产生中断,可以检查各寄存器及有关存储单元的内容。断点可以设置在程序的任何的地方。第二十页,共五十九页,2022年,8月28日2.硬件中断硬件中断又称外中断。硬件中断主要有两种来源:非屏蔽中断(NMI)——为电源错、内存或I/O总线的奇偶等异常事件的中断保留的。中断类型号为2。可屏蔽中断——来自各种外设的中断。由外设的请求引起的中断。可屏蔽中断受中断标志IF控制;非屏蔽中断和IF位无关。第二十一页,共五十九页,2022年,8月28日可屏蔽中断从外设发出中断请求到CPU响应中断,有两个控制条件起决定性作用:
该外设的中断请求是否屏蔽——由中断屏蔽寄存器(IMR)控制。
CPU是否允许响应中断——由标志寄存器(FLAGS)中的中断允许位IF控制。第二十二页,共五十九页,2022年,8月28日中断屏蔽寄存器中断屏蔽寄存器的端口地址是21H,如图8.4所示。中断屏蔽寄存器可分别控制某个可屏蔽中断源。在编写中断程序时,应在主程序的初始化部分设置好中断屏蔽寄存器,以确定允许用中断方式工作的外部设备。;系统重设键盘中断IN AL,21HMOV AL,11111101BOUT 21H,AL第二十三页,共五十九页,2022年,8月28日控制CPU的中断允许标志IFCPU是否响应中断还与中断允许标志IF有关。IF=0,CPU禁止响应任何外设的中断(关中断);IF=1,允许CPU响应外设的中断请求(开中断)。中断允许标志IF是控制所有可屏蔽中断的。当任何类型的中断发生时,当前的FLAGS要入栈保存,然后清除IF位,进入中断处理程序,如果允许在一个中断处理程序的执行过程中发生硬中断,则必须用一条STI指令开中断。当中断返回时,恢复了原FLAGS的值,其中IF=1,则允许硬中断再次发生。STI 设置中断允许位(IF=1)CLI 清除中断允许位(IF=0)第二十四页,共五十九页,2022年,8月28日中断命令寄存器在一次中断处理结束之前,还应给8259A的可编程中断控制器的中断命令寄存器发出中断结束命令(EOI:endofinterrupt),否则以后将屏蔽掉对同级中断或低级中断的处理。中断命令寄存器的I/O端口地址为20H(如图8.4所示)。在中断处理过程中,也可利用EOI命令清除当前中断请求,以响应同级或低级中断。;结束硬件中断MOV AL,20HOUT 20H,AL第二十五页,共五十九页,2022年,8月28日8.3.2中断向量表每个中断都有一个中断类型号。80x86可处理256种类型的中断,类型号为0~0FFH。中断向量表就是各类型中断处理程序的入口地址表。存储器的最低1.5KB,从0000~5FFH为系统占用,其中,最低的1KB,从0000~003FFH存放中断向量表。256个中断向量,每个中断向量占4个字节。每类中断向量的地址=中断类型号×4。图8.5给出了中断向量表。表8.2给出了中断向量表地址分配。图8.6展示了中断操作步骤。第二十六页,共五十九页,2022年,8月28日中断操作步骤中断操作步骤:取中断类型号;计算中断向量地址;取中断向量,偏移地址送IP,段地址送DS;转入中断处理程序;中断返回到INT指令的下一条指令。第二十七页,共五十九页,2022年,8月28日为中断类型N设置中断向量 MOV AX,0 MOV ES,AX MOV BX,N*4 MOV AX,OFFSETINTHAND MOV ES:WORDPTR[BX],AX MOV AX,SEGINTHAND MOV ES:WORDPTR[BX+2],AX …INTHAND: … IRET用户可以利用保留的中断类型号扩充自己需要的中断功能,对新增加的中断功能要在中断类型表中建立相应的中断向量。第二十八页,共五十九页,2022年,8月28日使用DOS功能调用(21H)存取中断向量例8.4 使用DOS功能调用存取中断向量第二十九页,共五十九页,2022年,8月28日8.3.3中断过程当中断发生时,由中断机构自动完成下列操作:取中断类型号N;标志寄存器(FLAGS)内容入栈;当前代码段寄存器(CS)内容入栈;当前指令指针寄存器(IP)内容入栈;禁止硬件中断和单步中断(IF=0,TF=0);从中断向量表中取4×N的字内容送IP,取4×N+2的字内容送CS;转中断处理程序。如图8.7的中断过程示意图。第三十页,共五十九页,2022年,8月28日8.3.4中断优先级和中断嵌套8086规定的中断优先级次序为:优先级 高 软件中断(除法错,INTO,INT) 非屏蔽中断(NMI) 可屏蔽中断(INTR) 低 单步中断可屏蔽中断的优先权分为八级,正常情况下,优先级次序是:IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7定时器 打印机优先级高 低第三十一页,共五十九页,2022年,8月28日8259A的中断命令寄存器控制优先级8259A的中断命令寄存器的第6、7位控制各种中断请求的优先级次序。R SL0 0 正常优先级方式0 1 清除由L2~L0指定的中断请求1 0 各中断优先级依次左循环一个位置1 1 各中断优先级依次循环到由L2~L0指定的中断 请求到达最低优先级位置上 ;使优先级次序再左循环一个位置MOV AL,10100000OUT 20H,AL ;IR6,IR7,IR0,IR1,IR2,IR3,IR4,IR5第三十二页,共五十九页,2022年,8月28日中断嵌套中断嵌套:正在运行的中断处理程序,又被其他中断源中断的情况。80x86没有规定中断嵌套的深度(中断程序又被中断的层次),实际受堆栈容量的限制。一个中断处理程序,在开中断的情况下,可以被优先级高于它的中断源中断。只有发出了EOI命令,清除正在执行的中断请求,才可以响应同级或低级的中断。
如图8.8所示:正常优先级方式下,优先级中断和中断嵌套发生时的处理过程。第三十三页,共五十九页,2022年,8月28日8.3.5中断处理程序主程序为响应中断所做的准备工作以及硬件(包括CPU和外设接口)自动完成以下动作:第三十四页,共五十九页,2022年,8月28日中断响应的特殊情况注意:设备发到CPU的中断请求信号在时间上是随机的,只要未被屏蔽的设备本身的状态是准备好或空闲的,它就会向CPU请求中断,如果此时CPU正在执行一条指令,那么要等到这条指令执行完后,才响应中断。加封锁的指令(如LOCKMOVAX,BX)应看作一条指令;对加重复前缀的指令(如REPMOVSB)要作为一个整体来处理,执行一次重复串指令即可响应中断;对MOV、POP指令,如果处理对象是段寄存器,那么执行完本条指令后,接着再执行一条指令才响应中断。对STI和IRET指令,也要在该指令执行完后,再执行一条指令才响应中断。第三十五页,共五十九页,2022年,8月28日中断处理子程序中断处理子程序的编写步骤:保存寄存器内容;如允许嵌套,则开中断(STI);处理中断;关中断(CLI);送中断结束命令(EOI)给中断命令寄存器;恢复寄存器内容;返回被中断的程序(IRET)。注意:CPU产生一次中断,I/O设备只完成一个字节(或字)的输入输出,所以中断处理程序所用的指针变量或数据变量一般应设置存储单元来保存。第三十六页,共五十九页,2022年,8月28日中断程序设计举例例8.5 响铃 P300-303例8.6 键盘输入、打印机输出 P303-310例8.7 P310-313除数为0的中断处理程序 第三十七页,共五十九页,2022年,8月28日练习与作业P313-314习题练习: 8.5、8.6提交作业: 8.12第三十八页,共五十九页,2022年,8月28日I/O接口电路示意图处理器数据寄存器状态寄存器控制寄存器输入输出设备数据总线控制总线地址总线外设数据状态信号控制信号I/O接口电路第三十九页,共五十九页,2022年,8月28日表8.1I/O端口地址分配第四十页,共五十九页,2022年,8月28日
例8.1发声程序-1这是一个最基本的控制扬声器发出声音的子程序。通过I/O指令使设备控制寄存器(I/O端口地址为61H)的第一位交替为0和1,而端口61H的第1位和扬声器的脉冲门相连(见图8.1),当第1位由0变为1,延迟一会又由1变为0时,脉冲门就先打开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使之发出了声音。61H端口的第0位和一个振荡器(2号定时器)相连,现在不用振荡器产生声音,所以把第0位置零。第四十一页,共五十九页,2022年,8月28日
例8.1发声程序-2;入口参数:声音频率BX=6000,发声延迟CX=1000。 SOUND PROC NEAR PUSH AX PUSH DX MOV DX,CX IN AL,61H AND AL,11111100BTRIG: XOR AL,2 OUT 61H,AL MOV CX,BX ;控制脉冲门开关DELAY: ;的时间
第四十二页,共五十九页,2022年,8月28日
例8.1发声程序-3 LOOP DELAY DEC DX JNE TRIG POP DX POP AX RETSOUND ENDP第四十三页,共五十九页,2022年,8月28日
图8.1设备控制器通常一个外设的数据端口是8位的,而状态与控制信息只需一位或两位,所以不同外设的状态和控制位可共用一个端口。61H端口的0、1位是控制扬声器的,2~7位分别控制其他外部设备。第四十四页,共五十九页,2022年,8月28日程序查询I/O方式这种CPU与外设交换信息的方式称为查询方式或等待方式。造成CPU必须查询等待的主要原因是许多外设工作速度比较低。查询方式的优点:可以用程序安排几个输入输出设备的先后优先次序,最先查询的设备,其工作的优先级也最高。查询方式的缺点:浪费了CPU的时间,而且由查询转向相应的处理陈许的时间较长,尤其是在设备比较多的情况下。为了提高CPU的工作效率,可以采用中断方式传送数据。第四十五页,共五十九页,2022年,8月28日
例8.2打印字符程序-1采用查询方式的打印字符程序。程序通过反复读取并测试打印机的状态来控制输出。数据寄存器的端口地址为378H,状态寄存器的端口地址为379H,控制寄存器的端口地址为37AH。它们各位的含义如图8.2所示。第四十六页,共五十九页,2022年,8月28日
例8.2打印字符程序-2 .modelsmall .stack .datamess db ‘Printerisnormal’,0dh,0ahcount equ $-mess .code .startup mov si,offsetmess mov cx,countnext: mov dx,379hwait: in al,dx test al,80h测试状态寄存器的第7位,如果为0,表示打印机忙,这时CPU不能送出打印数据;所以程序再次循环,直到第7位变为1,表示打印机空闲,程序才从数据区读取一个字符送到打印机的数据寄存器。并由控制器发出一个选通信号(端口37AH的第0位),控制打印机将这个字符打印输出。第四十七页,共五十九页,2022年,8月28日
例8.2打印字符程序-3 je wait mov al,[si] mov dx,378h out dx,al mov dx,37ah mov al,0dh out dx,al inc si loop next .exit 0 end第四十八页,共五十九页,2022年,8月28日
图8.2打印机的状态寄存器和控制寄存器第四十九页,共五十九页,2022年,8月28日
例8.3轮流查询-1CPU要从3个设备轮流输入数据,PROC1、PROC2、PROC3分别是设备1、设备2和设备3的数据输入程序,它们的状态寄存器的端口地址分别是STAT1、STAT2、STAT3,这三个状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保定聘用合同标准文本
- 为何要制定合同标准文本
- 买卖闲置厂房合同标准文本
- 2025桥梁建设合同范文
- 2025试用期间不签订正式合同
- 2025标准卧室装修合同范本
- 2025成都租房合同范本下载示例
- 房地产项目股权质押合同
- 创新创业主题讲座
- 万宁市招聘中小学教师真题2024
- 楼梯踏步抹灰标准合同7篇
- 【厦门大学】DeepSeek大模型赋能高校教学和科研
- 巧手包出小混沌(课件)三年级下册劳动人民版
- 2025-2030中国IC卡读写器行业市场现状分析及竞争格局与投资发展研究报告
- 2024-2025学年人教版初中地理七年级下册课件 第8章 第4节 俄罗斯
- 2025年南京秦淮区一中七年级下3月份月考英语试卷
- 2025届高三化学二轮复习 化学工艺流程 课件
- 《清华大学介绍》课件
- 硫磺安全技术说明书MSDS
- 重症专科护士考试题库(含答案)
- 提高水性玻璃烤漆水性金属烤漆的耐溶剂耐水煮附着力和柔韧性的解决方案
评论
0/150
提交评论