Files
final-exam/接口与通讯技术/重点复习/填空题专题/IO端口编址方式.md
T

115 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- 接口与通讯技术
- I/O编址
- 重点复习
create time: 2026-06-28 15:00
---
# I/O 端口编址方式
## 概述
I/O 端口编址方式是接口与通讯技术的核心基础概念,**在全部 3 套试卷中均有出现**。PC 系列微机采用独立编址方式,拥有专用的 I/O 访问指令和独立的地址空间。本专题涵盖两种编址方式的区别、直接寻址的范围限制以及 IN/OUT 指令的使用规则。
## 正文
### 1. 两种编址方式对比
| 特性 | **统一编址**(存储器映射 I/O) | **独立编址**(隔离 I/O) |
|-----|--------------------------|----------------------|
| 地址空间 | I/O 与内存**共用**同一地址空间 | I/O 有**独立**的地址空间 |
| 访问指令 | 普通访存指令(MOV 等) | **专用** I/O 指令(IN/OUT) |
| 地址范围 | 受内存地址空间限制(可达 1MB+) | 独立编码,通常较小(x86 为 64KB) |
| 代表架构 | ARM、MIPS、PowerPC | **x86(PC 系列微机)** |
```mermaid
graph TB
A["I/O 编址方式"] --> B["统一编址<br/>存储器映射 I/O"]
A --> C["独立编址<br/>隔离 I/O"]
B --> D["与内存共用地址空间<br/>用 MOV 指令访问"]
C --> E["独立 I/O 地址空间<br/>用 IN/OUT 指令访问"]
E --> F["PC 系列采用此方式"]
style C fill:#dfd,stroke:#333
style F fill:#f9f,stroke:#333
```
> [!question] 思考题
> 为什么 x86 选择独立编址而非统一编址?
>
> 答:独立编址有以下优势:
> 1. I/O 指令(IN/OUT)明确标识 I/O 操作,便于操作系统管理和保护
> 2. 不占用宝贵的内存地址空间
> 3. I/O 地址解码电路简单(只需 16 位地址线)
> 4. I/O 操作和内存操作可以有不同的时序和等待周期
### 2. 独立编址的 I/O 端口地址范围
x86 的 I/O 指令有两种端口地址寻址方式:
| 寻址方式 | 端口地址范围 | 指令格式 | 说明 |
|---------|------------|---------|------|
| **直接寻址** | **00H ~ FFH**(8 位,共 256 个端口) | `IN AL, 端口号` | 端口号作为 8 位立即数嵌入指令中 |
| **间接寻址** | 0000H ~ FFFFH(16 位,共 65536 个端口) | `IN AL, DX` | 端口号放在 DX 寄存器中 |
> [!important] 考试高频点
> **直接寻址时端口地址范围为 00H~FFH(0~255)**,这是填空题的经典考法。
>
> 原因:直接寻址的端口号是 8 位立即数,8 位二进制最大表示 255(FFH),所以只能访问前 256 个端口。
```asm
; 直接寻址示例(端口号 ≤ FFH)
IN AL, 20H ; 从端口 20H 读取一个字节到 AL
OUT 21H, AL ; 将 AL 的内容输出到端口 21H
; 间接寻址示例(端口号 > FFH 时必须用 DX)
MOV DX, 300H ; 端口地址 > FFH,必须用 DX
IN AL, DX ; 从 DX 指定的端口读取
```
> [!tip] 记忆口诀
> "直接寻址八位宽,零到二五五(FFH);超过范围用 DX,间接寻址十六位。"
### 3. IN/OUT 指令详解
IN/OUT 是 x86 的专用 I/O 指令,**只能在独立编址方式下使用**:
| 指令 | 功能 | 数据方向 |
|------|------|---------|
| `IN AL, port` | 从 I/O 端口读一个字节到 AL | 端口 → CPU |
| `IN AX, port` | 从 I/O 端口读一个字到 AX | 端口 → CPU |
| `OUT port, AL` | 将 AL 的内容写到 I/O 端口 | CPU → 端口 |
| `OUT port, AX` | 将 AX 的内容写到 I/O 端口 | CPU → 端口 |
```mermaid
sequenceDiagram
participant CPU as "CPU"
participant IO as "I/O 端口"
CPU->>IO: "OUT port, AL<br/>(写操作)"
Note over IO: "端口接收 AL 的数据"
IO->>CPU: "IN AL, port<br/>(读操作)"
Note over CPU: "AL 接收端口数据"
```
### 4. 真题回顾
> [!example] 【真题】I/O 端口的编址方式有两种,分别为\_\_\_\_\_\_和\_\_\_\_\_\_,PC 系列机 I/O 端口的编址方式采用的是后一种。
>
> **答案**:统一、独立
> [!example] 【真题】在 PC 系列微机中,输入/输出指令若采用直接寻址方式,I/O 端口地址的范围是\_\_\_\_\_\_。
>
> **答案**:00H~FFH(0~255)
> [!example] 【真题】I/O 端口的编址方式有两种,其中\_\_\_\_\_\_编址方式中有专用的 I/O 访问指令。
>
> **答案**:独立
## 关联笔记
- [[IO端口编址方式]]
- [[接口分层结构]]
- [[8259A中断管理基础]]
- [[82C37A DMA控制器]]
- [[接口与通讯技术/试题册/index|试题册索引]]