精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

I/O接口

考情分析

I/O 接口的结构和端口编址方式以选择题形式考查。重点是统一编址与独立编址的区别——两者在指令使用和地址空间上的差异要能说清。

大纲定位

考纲第六章(二):I/O 接口(I/O 控制器)——1. I/O 接口的功能和基本结构 2. I/O 端口及其编址。

要求到什么程度:说清接口内部有哪几类端口、各走哪条总线,以及统一编址与独立编址的区别(用什么指令、地址空间是否共享)。

I/O 接口的作用

外部设备不能直接连接到系统总线上,原因有三:

  1. 速度不匹配:CPU 运行速度远高于多数外设
  2. 信号格式不同:外设可能使用串行、模拟信号等非标准格式
  3. 控制逻辑各异:不同外设的操作协议不同

I/O 接口充当CPU 与外设之间的桥梁,负责速度匹配、信号转换和协议适配。

它有一堆同义词,选择题会拿这个考名词归类:设备控制器、I/O 控制器、适配器(adapter)、接口卡、网卡、显卡……都是"接口"这一层的东西。

看到这些词属于
驱动器、显示器、键盘、打印机、磁盘设备本体
控制器、适配器、接口卡、网卡、可编程中断控制器(PIC)I/O 接口

判据:名字里带"控制器/适配器/卡"的,基本都是接口部件。

I/O 接口的功能

功能说明
数据缓冲在接口内部设置缓冲寄存器,解决 CPU 与外设的速度差异
信号转换电平转换、串/并转换、D/A 或 A/D 转换等
设备选择通过地址译码确定 CPU 访问的是哪个端口
命令传递接收 CPU 的控制命令(启动、停止等),并传递给设备
状态反馈向 CPU 报告设备当前状态(忙/空闲/错误)

I/O 接口的组成

        CPU 侧(系统总线)              I/O 接口                设备侧
                          ┌──────────────────────────┐
                     ┌───→│  数据端口(数据缓冲寄存器) │←──→ 外设数据
                     │    ├──────────────────────────┤
   数据线 ←────双向───┼───→│  命令端口(控制寄存器)    │───→ 外设控制信号
                     │    ├──────────────────────────┤
                     └───→│  状态端口(状态寄存器)    │←─── 外设状态信号
                          ├──────────────────────────┤
   地址线 ──────────────→ │  地址译码 / 设备选择电路   │
   控制线 ──────────────→ │  (读/写、时序控制逻辑)   │───→ 外设控制时序
                          └──────────────────────────┘

编者注(这张图最容易画错的地方)命令字和状态字都是"数据",走的是数据线,不是控制线。

  • CPU 要下命令 → 把命令字当数据写到命令端口 → 走数据线
  • CPU 要查状态 → 把状态字当数据读回来 → 走数据线
  • 中断类型号同理,也是在中断响应周期由设备经数据线送回 CPU

控制线上跑的不是内容,是时序:读/写信号、M/IO、中断响应信号这些"什么时候做什么动作"的指挥信号。地址线负责选中是哪个端口。

一句话记:内容走数据线,选谁走地址线,何时做走控制线。

I/O 接口中的寄存器统称为 I/O 端口(Port):

端口类型功能方向
数据端口暂存输入/输出数据可读可写
状态端口存放设备状态信息(就绪、忙、错误)CPU 只读
命令端口存放 CPU 发出的控制命令CPU 只写

编者注(端口是逻辑概念,不是物理寄存器数):三类端口不一定对应三个独立的物理寄存器。状态位和控制位常常按位段合用同一个物理寄存器——高几位是状态、低几位是控制,读的时候取状态位段、写的时候改控制位段。所以"状态端口和控制端口可以是同一个寄存器"这个说法是对的

反过来,主存地址不属于任何一类端口的内容——中断方式下 CPU 自己访存,主存地址只在 CPU 内部周转,根本不出现在接口上;只有 DMA 方式才把主存地址交给 DMAC 持有。

图 8.7 I/O 接口的通用结构

图 8.7 I/O 接口的通用结构

教材这张图把主机侧和设备侧分得很清楚:左边是 I/O 总线的数据线/地址线/控制线,中间是数据缓冲寄存器、状态/控制寄存器和地址译码与 I/O 控制逻辑,右边是面向每台外设的界面控制逻辑。注意数据缓冲寄存器和状态/控制寄存器都挂在数据线上——这与上面那条编者注是同一件事。

I/O 端口编址方式

CPU 如何访问 I/O 端口?有两种方案。

统一编址(内存映射 I/O)

将 I/O 端口地址映射到内存地址空间中,I/O 端口与内存共享同一套地址。

内存地址空间=真正的内存+I/O 端口
  • 访问 I/O 端口与访问内存使用相同的指令(如 MOV、LOAD、STORE)
  • 不需要专门的 I/O 指令
  • 内存地址空间被占用一部分,可用内存减少
优点缺点
指令丰富,所有内存操作指令都可用于 I/O占用内存地址空间
不需要区分内存指令和 I/O 指令地址译码复杂(需区分是真内存还是 I/O)
便于用高级语言直接操作 I/O程序中不易分辨哪些地址是 I/O

独立编址(端口映射 I/O)

I/O 端口有自己独立的地址空间,与内存地址空间分开。

内存地址空间I/O 地址空间是两套彼此独立的空间
  • 访问 I/O 端口需要使用专门的 I/O 指令(如 IN、OUT)
  • 内存地址空间不受影响

编者注("独立"不等于"地址值不同"):两套空间各走各的译码通路,靠控制线上的 M/IO 信号区分本次访问打的是哪一套。所以同一个地址值 0x60 既可以是某个内存单元、又可以是某个 I/O 端口,硬件不会混淆。

判断题问"独立编址时 I/O 端口地址和主存地址可能相同吗",答案是可能。把"独立"理解成"地址值不重叠"是常见误判。

IN / OUT 的另一端是通用寄存器

指令方向
IN AL, portI/O 端口 → 通用寄存器
OUT port, AL通用寄存器 → I/O 端口

还有一条容易忽略的前提:CPU 访问不到设备本体,只能访问接口里的端口。所以"I/O 指令在通用寄存器与设备之间传送数据"是错的,正确说法是"在通用寄存器与 I/O 端口之间传送"。

  • 通过控制线上的 M/IO 信号区分访问的是内存还是 I/O
优点缺点
不占用内存地址空间只能使用专用 I/O 指令,指令种类少
程序中 I/O 操作清晰可辨不能用内存操作指令的各种寻址方式
地址译码简单

两种编址方式对比

特性统一编址独立编址
地址空间共享独立
使用指令内存指令(MOV 等)专用 I/O 指令(IN/OUT)
是否占用内存空间
区分方式地址范围控制信号
典型架构ARM、MIPSx86(部分设备)

实际系统中,x86 既有独立编址的 I/O 端口(通过 IN/OUT 访问),也有内存映射的 I/O(如显卡显存)。

I/O 接口的类型

分类维度类型说明
按数据传送方式并行接口一次传送一个字/字节的所有位
串行接口逐位传送
按主机访问方式程序查询接口状态端口轮询
中断接口支持中断请求
DMA 接口支持 DMA 传输

交互可视化

加载可视化中...

例题

例 1:某系统采用统一编址方式,地址总线 20 位,其中高 4 KB 地址留给 I/O 端口。实际可用内存空间是多少?

:地址空间总计 220=1 MB,I/O 端口占 4 KB,可用内存 =1 MB4 KB=1020 KB

例 2:在独立编址方式中,执行 MOV AX, [2000H] 访问的是内存还是 I/O 端口?

:MOV 是内存操作指令,在独立编址中只能访问内存。访问 I/O 端口必须使用 IN/OUT 指令。所以 MOV AX, [2000H] 访问的是内存地址 2000H。

例 3:统一编址方式的最大优势是什么?

:可以使用所有内存操作指令(以及丰富的寻址方式)来访问 I/O 端口,程序设计灵活度更高。而独立编址只有 IN/OUT 两条指令,功能有限。

考点清单

  • I/O 接口包含数据端口、状态端口、命令端口三种寄存器
  • 统一编址用内存指令访问 I/O,占用内存地址空间
  • 独立编址用专用 I/O 指令(IN/OUT),不占用内存空间
  • 统一编址下程序中不易区分内存访问和 I/O 访问
  • 独立编址通过控制线上的 M/IO 信号区分内存和 I/O

教材出处

  • 袁春风《计算机组成与系统结构(第 3 版)》§8.2 I/O 接口:图 8.7(p285)

真题练习