汇编语言输入输出的概念

在一个微机系统中,主机不可避免地、甚至要很频繁地对各种外部设备进行控制,与它们交换信息。这种主机与外部设备间的数据交换叫输入输出(INPUT/OUTPUT),简称 I/O。

虽然对于简单的 I/O 操作(如键盘输入字符、显示器输出字符等)可以借助系统功能调用完成,但这还不够。对从事计算机应用的技术人员,必须了解接口的概念,掌握其编程结构和数据的 I/O 传送方式,从而掌握 I/O 编程技术。

一、外部设备与接口电路#

在一个计算机系统中,除了 CPU 和内部存储器(包括它们的外围支持电路)以外的部件或设备叫作外部设备,简称外设。常用的外设有两类:一类是输入输出设备,如键盘、鼠标器、扫描仪、显示器、打印机、绘图仪等;还有在实际应用的计算机系统中完成检测和控制的仪表装置或其他专用设备装置等。另一类是计算机本身正常工作所需的辅助设备,如磁盘驱动器、扬声器,等等。

计算机的外部设备根据数据交换的方式不同分为字符设备(如键盘、显示器、打印机等)和块设备(如磁盘驱动器),在字符设备中又规定了标准字符设备和非标准的字符设备。标准的字符 I/O 设备规定如下:

(1)标准输入设备,逻辑设备名为 CON,隐含指定为键盘;

(2)标准输出设备,逻辑设备名为 CRT,隐含指定设备是显示器;

(3)标准错误设备,逻辑设备名和隐含指定设备同标准输出设备;

(4)标准辅助设备,逻辑设备名为 AUX,隐含指定设备为串行口;

(5)标准列表设备,逻辑设备名为 PRN,隐含指定设备为打印机。

对于这些标准字符 I/O 设备,可以把它们视同文件进行读写操作。

二、I/O 接口及编程结构#

所有的外设都要通过接口连接到 CPU 上,一个接口往往设置一个以上的端口(寄存器)来存放 CPU 与外设进行交换的信息(输入输出的数据、状态信息、控制信息等)。因此,CPU 与外设间的数据交换实际上是 CPU 通过接口中的端口用专门指令实现的。一般来说,接口电路具有以下编程结构。

  1. 数据端口(寄存器)

数据端口一般有两个或两个以上。当 CPU 向外设输出数据时,将输出的数据写入接口中的数据输出寄存器(输出端口),然后由接口控制传送给外设。当 CPU 从外设输入数据时,外设要将数据存入接口中的输入数据寄存器(输入端口),由 CPU 通过专门的输入指令读取端口的数据。

  1. 状态端口(寄存器)

接口中通常有一个状态寄存器来反映外设的工作状态,如是否空闲,工作是否正常等。不同的外设,接口中状态寄存器的位模式定义不同,以提供给主机进行查询。

  1. 控制端口(寄存器)

外设的接口电路一般都是可编程的,CPU 通过向控制端口发出控制字,确定外设的工作方式、传送方向等。

上述三种端口分别由一个或多个寄存器构成,接口电路的编程结构示意如图 1 所示。

接口电路的编程结构示意

图 1 接口电路的编程结构示意

那么,如何访问不同的端口呢?Intel 系列微机将每个端口(寄存器)分配一个称为端口地址的编码,端口地址可以是 8 位,也可以是 16 位,编址在一个独立的地址空间中,这个空间允许设置 64K 个 8 位端口或 32K 个 16 位端口,对不同的计算机及其接口,I/O 端口的编号有时不完全相同。使用输入/输出指令进行 I/O 操作时,端口地址可直接在指令中以常数形式给出(仅 8 位端口地址时)或将端口地址送入 DX(8 位或 16 位端口地址),用 DX 进行特殊间址。表 1 列出了 PC 部分端口地址的分配。

I/O 端口地址分配

表 1 I/O 端口地址分配

(完)

comments powered by Disqus