输入输出程序设计
1、I/O设备的数据传送方式
1.1、CPU与外设
每种输入输出设备都要通过一个硬件接口或控制器和CPU相连,这些接口和控制器都能支持输入输出指令IN,OUT与外部设备交换信息。这些信息包括控制、状态和数据三种不同性质的信息,它们必须按不同的端口地址分别传送
控制信息输出到I/O端口,通知接口和设备要做什么动作
状态信息从I/O接口输入到CPU,表示I/O设备当前所处的状态
数据信息是I/O设备和CPU真正要交换的信息。外设和接口之间的数据信息可以是串行的,也可以是并行的,相应地要使用串行接口或并行接口
1.2、直接存储器存取(DMA)方式
DMA方式主要是用于一些高速的I/O设备,如磁带、磁盘、模数转换器等设备。DMA方式能使I/O设备直接和存储器进行成批数据的快速传送。每个字节一到达端口就直接从接口送到存储器,同样,接口和它的DMA控制器也能直接从存储器取出字节并把它送到I/O设备中
DMA控制器一般包括四个寄存器:控制寄存器、状态寄存器、地址寄存器和字节寄存器,这些寄存器在信息传送之前应进行初始化,即系统程序在地址寄存器中设置要传送的数据块的首地址,在字节寄存器中设置要传送的数据长度,在状态控制寄存器中设置控制字,指出数据是输入还是输出,并启动DMA操作。每个字节传送后,地址寄存器增1,字节寄存器减1
系统完成DMA传送的主要步骤如下:
DMA控制器向CPU发出HOLD信号,请求使用总线
CPU发出响应信号HOLD给DMA控制器,并把总线让出,这时CPU放弃了对总线的控制,而DMA控制器获得了总线控制权
传输数据的存储器地址(在地址寄存器中)通过地址总线发出
传输的数据字节通过数据总线进行传送
地址寄存器增1,以致向下一个要传送的字节
字节计数器减1
如字节计数器非0,转向第3步
否则,DMA控制器撤销总线请求信号HOLD,结束传送
2、程序直接控制I/O方式
2.1、I/O端口
计算机的外部设备和大容量存储设备都是通过接口连接到系统上,每个接口由一组寄存器组成,这些寄存器都分配有一个称为I/O端口的地址编码。计算机的CPU和内存就是通过这些端口和外部设备进行通信的
I/O接口部件中一般有三种寄存器:一是用作数据缓冲的数据寄存器,而是用来保存设备和接口的状态信息,供CPU对外设进行测试的状态寄存器;三是用来保存CPU发出的命令以控制接口和设备的操作的命令寄存器。这些寄存器都分配有各自的端口号,CPU就是通过不同的端口号来选择各种外部设备的
在80x86微机中,I/O端口地址在一个独立的地址空间中,这个I/O空间允许设置64K个8位端口或32K个16位端口
2.2、I/O指令