Appearance
I/O接口
考情分析
I/O 接口的结构和端口编址方式以选择题形式考查。重点是统一编址与独立编址的区别——两者在指令使用和地址空间上的差异要能说清。
大纲定位
考纲第六章(二):I/O 接口(I/O 控制器)——1. I/O 接口的功能和基本结构 2. I/O 端口及其编址。
要求到什么程度:说清接口内部有哪几类端口、各走哪条总线,以及统一编址与独立编址的区别(用什么指令、地址空间是否共享)。
I/O 接口的作用
外部设备不能直接连接到系统总线上,原因有三:
- 速度不匹配:CPU 运行速度远高于多数外设
- 信号格式不同:外设可能使用串行、模拟信号等非标准格式
- 控制逻辑各异:不同外设的操作协议不同
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
控制线上跑的不是内容,是时序:读/写信号、
、中断响应信号这些"什么时候做什么动作"的指挥信号。地址线负责选中是哪个端口。 一句话记:内容走数据线,选谁走地址线,何时做走控制线。
I/O 接口中的寄存器统称为 I/O 端口(Port):
| 端口类型 | 功能 | 方向 |
|---|---|---|
| 数据端口 | 暂存输入/输出数据 | 可读可写 |
| 状态端口 | 存放设备状态信息(就绪、忙、错误) | CPU 只读 |
| 命令端口 | 存放 CPU 发出的控制命令 | CPU 只写 |
编者注(端口是逻辑概念,不是物理寄存器数):三类端口不一定对应三个独立的物理寄存器。状态位和控制位常常按位段合用同一个物理寄存器——高几位是状态、低几位是控制,读的时候取状态位段、写的时候改控制位段。所以"状态端口和控制端口可以是同一个寄存器"这个说法是对的。
反过来,主存地址不属于任何一类端口的内容——中断方式下 CPU 自己访存,主存地址只在 CPU 内部周转,根本不出现在接口上;只有 DMA 方式才把主存地址交给 DMAC 持有。

图 8.7 I/O 接口的通用结构
教材这张图把主机侧和设备侧分得很清楚:左边是 I/O 总线的数据线/地址线/控制线,中间是数据缓冲寄存器、状态/控制寄存器和地址译码与 I/O 控制逻辑,右边是面向每台外设的界面控制逻辑。注意数据缓冲寄存器和状态/控制寄存器都挂在数据线上——这与上面那条编者注是同一件事。
I/O 端口编址方式
CPU 如何访问 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 指令(如 IN、OUT)
- 内存地址空间不受影响
编者注("独立"不等于"地址值不同"):两套空间各走各的译码通路,靠控制线上的
信号区分本次访问打的是哪一套。所以同一个地址值 0x60既可以是某个内存单元、又可以是某个 I/O 端口,硬件不会混淆。判断题问"独立编址时 I/O 端口地址和主存地址可能相同吗",答案是可能。把"独立"理解成"地址值不重叠"是常见误判。
IN / OUT 的另一端是通用寄存器:
| 指令 | 方向 |
|---|---|
IN AL, port | I/O 端口 → 通用寄存器 |
OUT port, AL | 通用寄存器 → I/O 端口 |
还有一条容易忽略的前提:CPU 访问不到设备本体,只能访问接口里的端口。所以"I/O 指令在通用寄存器与设备之间传送数据"是错的,正确说法是"在通用寄存器与 I/O 端口之间传送"。
- 通过控制线上的
信号区分访问的是内存还是 I/O
| 优点 | 缺点 |
|---|---|
| 不占用内存地址空间 | 只能使用专用 I/O 指令,指令种类少 |
| 程序中 I/O 操作清晰可辨 | 不能用内存操作指令的各种寻址方式 |
| 地址译码简单 |
两种编址方式对比
| 特性 | 统一编址 | 独立编址 |
|---|---|---|
| 地址空间 | 共享 | 独立 |
| 使用指令 | 内存指令(MOV 等) | 专用 I/O 指令(IN/OUT) |
| 是否占用内存空间 | 是 | 否 |
| 区分方式 | 地址范围 | 控制信号 |
| 典型架构 | ARM、MIPS | x86(部分设备) |
实际系统中,x86 既有独立编址的 I/O 端口(通过 IN/OUT 访问),也有内存映射的 I/O(如显卡显存)。
I/O 接口的类型
| 分类维度 | 类型 | 说明 |
|---|---|---|
| 按数据传送方式 | 并行接口 | 一次传送一个字/字节的所有位 |
| 串行接口 | 逐位传送 | |
| 按主机访问方式 | 程序查询接口 | 状态端口轮询 |
| 中断接口 | 支持中断请求 | |
| DMA 接口 | 支持 DMA 传输 |
交互可视化
例题
例 1:某系统采用统一编址方式,地址总线 20 位,其中高 4 KB 地址留给 I/O 端口。实际可用内存空间是多少?
解:地址空间总计
例 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 访问
- 独立编址通过控制线上的
信号区分内存和 I/O
教材出处
- 袁春风《计算机组成与系统结构(第 3 版)》§8.2 I/O 接口:图 8.7(p285)