vault backup: 2026-06-28 14:53:55
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
---
|
||||
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|试题册索引]]
|
||||
Reference in New Issue
Block a user