单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第一章 基础知识,第八章 输入与输出程序设计,第八章 输入与输出程序设计,第一章 基础知识第八章 输入与输出程序设计,1,第一章 基础知识,第八章 输入与输出程序设计,第一章 基础知识第八章 输入与输出程序设计,2,第一章 基础知识,第八章 输入与输出程序设计,第一节:I,O,设备的数据传送方式,输入输出设备都通过一个硬件接口或控制器和CPU相连。例如软磁盘通过软盘控制器和CPU连接起来;终端显示器通过数据接口和CPU连接起来。这些接口和控制器都能支持输入输出,IN、OUT,与外部设备交换信息。这些信息,包括控制、状态和数据,三种不同性质的信息,它们必须按不同的端口地址分别传送。,控制信息输出到,I,O,接口,:,告诉接口和设备要做什么工作,状态信息,的读取:,表示,I/O,设备当前的状态,数据信息的传输,:,是,I,O,设备和,CPU,真正要交换的信息。,常用的输入输出方式,:,1、查询输入输出;2、中断输入输出;3、DMA,方式,DMA方式:,也称为成组数据传送方式。主要适用于些高速的,I,O,设备,如磁带、磁盘、模数转换器等设备。DMA方式能使IO设备直接和存储器进行成批数据的快速传送。每个字节一到达端口,就直接从接口送到存储器,同样,接口和它的DMA控制器也能直接从存储器取出字节并把它送到IO设备中去。,第一章 基础知识第八章 输入与输出程序设计第一节:IO,3,第一章 基础知识,第八章 输入与输出程序设计,第一章 基础知识第八章 输入与输出程序设计,4,第一章 基础知识,第八章 输入与输出程序设计,第二节:,程序直接控制,I,O,方式,I,O,端口的地址编码:,计算机的外部设备和大容量存储设备都是通过接口连接到系统上,每个端口由一组寄存器组成,这些寄存器都分配有一个地址编码,该编码称为IO端口的地址编码,。,计算机的,CPU,和内存就是通过这些端口和外部设备进行通讯的。,I,O,接口中有用作数据缓冲的,数据寄存器,,有用做保存设备和接口的状态信息,供,CPU,对外设进行测试的,状态寄存器,;还有用来保存,CPU,发出的命令以控制接口和设备的操作的,命令寄存器,。它们都分配有各自的端口号,,CPU,就是通过不同的端口号来选择外部设备的,第一章 基础知识第八章 输入与输出程序设计第二节:程序直,5,第一章 基础知识,第八章 输入与输出程序设计,端口数量:,在,IBM PC,中,1M空间的低16位地址线有效,因此这个,I/O,空间允许设置6,4K(65536),个,8,位端口或,32K(32768),个,16,位端口,。,PC,机的部分端口地址,(16,进制,),第一章 基础知识第八章 输入与输出程序设计端口数量:PC,6,第一章 基础知识,第八章 输入与输出程序设计,一、,I/O,指令,PC,机的,I,O,指令,IN,和,OUT,,这两条指令既可以传送字节也可以传送字,并且都有直接端口寻址和间接端口寻址两种方式。,如下所示:,直接端口寻址方式,:,端口地址,PORT,是一个,8,位的立即数,其范围是,0,一,255,。,间接寻址方式,:,端口地址在,DX,中,其范围为,0,一,65535,。,另外要注意的是,,I/O,指令中使用的寄存器必须是,AL,或,AX,。,第一章 基础知识第八章 输入与输出程序设计一、I/O,7,第一章 基础知识,第八章 输入与输出程序设计,用,IN,指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态。,例如 下面两条指令能把一个字从端口地址,0028,和,0029,传送到存储器的,DATA_WORD,单元中。,例 测试某状态寄存器,(,端口地址为,27H),的第,2,位是否为,1,,若为,1,,则转移到,ERROR,进行处理。,OUT,指令用来输出数据或给一个指定的,I,O,端口传送命令信息。,例 某接口的命令寄存器,(,端口地址为,126H),的第,7,位控制成组数据传送,。,注意:DOS,功能调用或,BIOS,例行程序,其例行程序本身也是用,IN,和,OUT,指令与外部设备进行数据交换的。,第一章 基础知识第八章 输入与输出程序设计用IN指令可以,8,第一章 基础知识,第八章 输入与输出程序设计,二、,I/O,直接数据传输举例,例,SOUND,程序,(发声程序),基本原理:,程序通过,I,O,指令使设备控制寄存器,(I,O,端口地址为,61H),的第,1,位交替为,0,和,l,,而端口,6lH,的第,1,位和扬声器的脉冲门相连,当第,1,位由,0,变为,1,,延迟一会又由,0,变为,1,时,脉冲门就先打开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使之发出了声音。,61H,端口的第,0,位和一个振荡器,(2,号定时器,),相连,现在不用振荡器产生声音,所以把第,0,位置零。,第一章 基础知识第八章 输入与输出程序设计二、I/O,9,第一章 基础知识,第八章 输入与输出程序设计,程序:,soundprogram segment,assume cs:soundprogram,main proc far,start:,mov bx,0f350h,mov dx,2300h,in al,61h,mov ah,al,and al,11111100b;关断定时器通道2的门控,sound:xor al,2;触发61H端口第1位,out 61h,al,mov cx,dx;(dx)=控制脉宽的计数值,wait1:loop wait1;延时循环,dec bx;(bx)=脉冲持续的时间,jnz sound,mov al,ah,out 61h,al;恢复61H端口,mov ax,4c00h,int 21h,main endp,soundprogram ends,end start,第一章 基础知识第八章 输入与输出程序设计程序:sou,10,第一章 基础知识,第八章 输入与输出程序设计,例,COMM,程序,基本原理,这是一个关于,INS8250,串行通讯口,I,O,的例子。它的数据寄存器的端口地址是,03F8H,状态寄存器的端口地址是,03FDH,。其中,0,位是输入数据准备位,,5,位是输出数据准备位。下列是串行口输入输出程序。,输出子过程:,读取子过程:,第一章 基础知识第八章 输入与输出程序设计例 COM,11,第一章 基础知识,第八章 输入与输出程序设计,以上,CPU与外部设备交换信息的方式称为查询方式或等待方式,。,造成CPU必须查询等待的主要原因是许多外设的工作速度比较低如磁盘、打印机等,它们通过按键或打印头的机械动作输入或输出一个数据,其速度是很慢的,而OUT执行指令的速度是它的几千倍乃至上万倍,所以则在接收或发送数据之前必须要了解外设的状态,看外设是否已经准备好。当外没还没有准备好以前,CPU就要等待,不能做别的操作。为了提高CPU的工作效率,,我们可采用中断方式传送数据,。关于中断,我们将在下一节中做详细介绍。,第一章 基础知识第八章 输入与输出程序设计以上CPU与外,12,第一章 基础知识,第八章 输入与输出程序设计,第三节:中断传送方式,什么是中断,:,中断是一种使,CPU,中止正在执行的程序而转去处理特殊事件的操作。,什么是中断源,:,引起中断的事件,。,中断的优点,:,避免因反复查询外部设备的状态而浪费时问,从而提高了,CPU,的效率。,外中断,:由外设控制器或协处理器(,8087/80287,)引起的中断一般称为外中断,。,内中断,:,中断指令,INT,产生的中断,或由,CPU,的某些错误结果产生的中断称为内中断,8086,8088,的中断源如下图所示,:,第一章 基础知识第八章 输入与输出程序设计第三节:中断传,13,第一章 基础知识,第八章 输入与输出程序设计,第一章 基础知识第八章 输入与输出程序设计,14,第一章 基础知识,第八章 输入与输出程序设计,非屏蔽中断:,是为电源错、内存或,I,O,总线的奇偶错等异常事件的中断保留的。,外部设备的中断,是通过,Inter 8259A,可编程中断控制器,(PIC),连到主机上。,CPU,通过一组,I,O,端口控制,8259A,,而,8259A,则,通过,INTR,管脚给,CPU,传送中断信号,。这种外中断类型的分配由硬件连线实现,中断,20H,到,3FH,用于调用,DOS,功能例行程序,,其它中断号小于,20H,或大于,3FH,的中断,用于调用,IBM PC ROM BIOS,或一些应用软件,一、,中断向量表,我们给每种中断都安排一个中断类型号。,IBM PC,中断系统能处理,256,种类型的中断,类型号为,0,0FFH,。每种类型的中断都由相应的中断处理程序来处理,,中断向量表,就是各中断类型的处理程序的地址表。如左图所示:,第一章 基础知识第八章 输入与输出程序设计非屏蔽中断:是,15,第一章 基础知识,第八章 输入与输出程序设计,存储器的低,1.5K,字节,地址从,0,到,5FFH,为系统占用,其中最低,1K,字节,地址从,0,到,3FFH,存放中断向量。中断向量表中的,256,项中断向量对应,256,种中断类型,每项占用四个字节,其中两个字节存放中断处理程序的段地址(,16,位),另两个字节存放偏移地址,(16,位,),。因为各处理程序的段地址和偏移地址在中断向量表中按中断类型号顺序存放,所以每类中断向量的地址可由中断类型乘以,4,计算出来。例如,报警中断的中断类型为,4AH,,它的中断向量地址为,4AH,4,128H,,即,128H,,,129H,两字节存放的是报警中断处理程序的偏移地址,12AH,,,l2BH,两字节存放的是报警中断处理程序的段地址,取出段地址和偏移地址。,CPU,就可转入中断处理程序。,中断操作的,5,个步骤,:,(1)取中断类型号,(2)计算中断向量地址,(3)取中断向量,偏移地址送IP段地址送CS,(4)转入中断处理程序,(5)中断返回到INT指令的下一条指令,第一章 基础知识第八章 输入与输出程序设计 存储器,16,第一章 基础知识,第八章 输入与输出程序设计,第一章 基础知识第八章 输入与输出程序设计,17,第一章 基础知识,第八章 输入与输出程序设计,二、,设量中断向量,下表列出了,IBM PC,各类中断的地址分配:,用户可以利用保留的中断类型号扩充自己需要的中断功能,对新增加的中断功能要在中断向量表中建立相应的中断向量。,第一章 基础知识第八章 输入与输出程序设计二、设量中断向,18,第一章 基础知识,第八章 输入与输出程序设计,指令来为中断类型,N,设置中断向量:,;段地址为0,;设置偏移地址,;要设置的中断子过程,;设置新中断向量(地址),注意:如果新的中断功能只供自己使用,或用自己编写的中断处理程序代替系统中的中断处理功能时,要注意保存原中断向量,在设置自己的中断向量时,应先保存原中断向量再设置新的中断向量,在程序结束之前恢复原中断向量。,第一章 基础知识第八章 输入与输出程序设计指令来为中断类,19,第一章 基础知识,第八章 输入与输出程序设计,在实际编程过程中,在检查或设置任何中断向量时,总是避免直接使用中断向量的绝对地址,而是使用,DOS,功能调用,(21H),存取中断向量。,第一章 基础知识第八章 输入与输出程序设计 在实际,20,第一章 基础知识,第八章 输入与输出程序设计,三、,中断过程,当今断发生时,由硬件自动完成下列动作:,1.,取中断类型号N,2.,标志寄存器(PSW)内容入栈,3.,当前代码段寄存器(cs)内容入栈,4.,当前指令计数器(IP)内容入栈,5.,禁止外部中断和单步中断(IF0,TF0),6.,从中断向量表中取4N的字节内容送IP,取4N+2的字节内容送CS。,转中断处理程序,中断发生的过程很象我们所熟悉的子程序调用,不同的是在保护中断现场时,除了保存返回地址,CS,:,IP,之外,还保存了标志寄存器,PSW,的内容。因为标志寄