Appearance
I/O接口
考情分析
I/O 接口的结构和端口编址方式是 408 选择题的稳定考点。统一编址与独立编址的区别几乎每隔一两年就出现一次,需要牢固掌握两者在指令使用和地址空间上的差异。
I/O 接口的作用
外部设备不能直接连接到系统总线上,原因有三:
- 速度不匹配:CPU 运行速度远高于多数外设
- 信号格式不同:外设可能使用串行、模拟信号等非标准格式
- 控制逻辑各异:不同外设的操作协议不同
I/O 接口(又称设备控制器、I/O 控制器)充当CPU 与外设之间的桥梁,负责速度匹配、信号转换和协议适配。
I/O 接口的功能
| 功能 | 说明 |
|---|---|
| 数据缓冲 | 在接口内部设置缓冲寄存器,解决 CPU 与外设的速度差异 |
| 信号转换 | 电平转换、串/并转换、D/A 或 A/D 转换等 |
| 设备选择 | 通过地址译码确定 CPU 访问的是哪个端口 |
| 命令传递 | 接收 CPU 的控制命令(启动、停止等),并传递给设备 |
| 状态反馈 | 向 CPU 报告设备当前状态(忙/空闲/错误) |
I/O 接口的组成
CPU 侧(系统总线) 设备侧
┌─────────────────┐
数据线 ──→│ 数据缓冲寄存器 │──→ 外设数据线
│ │
地址线 ──→│ 地址译码逻辑 │
│ │
控制线 ──→│ 命令寄存器 │──→ 外设控制信号
│ │
│ 状态寄存器 │←── 外设状态信号
└─────────────────┘I/O 接口中的寄存器统称为 I/O 端口(Port):
| 端口类型 | 功能 | 方向 |
|---|---|---|
| 数据端口 | 暂存输入/输出数据 | 可读可写 |
| 状态端口 | 存放设备状态信息(就绪、忙、错误) | CPU 只读 |
| 命令端口 | 存放 CPU 发出的控制命令 | CPU 只写 |
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 端口需要使用专门的 I/O 指令(如 IN、OUT)
- 内存地址空间不受影响
- 通过控制线上的
信号区分访问的是内存还是 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