529 lines
23 KiB
Markdown
529 lines
23 KiB
Markdown
# 第 2 章 16 位 Intel 8086 微处理器(期末复习总结)
|
||
|
||
> 本章是《微机系统》课程的**绝对核心**,期末考试必考、计算题与简答题的主要来源。请务必熟练掌握物理地址计算、标志位、最小/最大模式、寄存器组、引脚信号、总线时序等内容。
|
||
|
||
---
|
||
|
||
## 一、详细内容分析
|
||
|
||
### 2.0 8086 概述(PPT 第 1 页)
|
||
|
||
- 厂商:Intel 公司推出的 16 位微处理器。
|
||
- 兼容性:**兼容 8085**(8 位微处理器),8088 是与 8086 **内部结构相同**的微处理器,但外部数据总线为 8 位。
|
||
- 结构:**CISC**(复杂指令集)结构。
|
||
- 供电:单一 **+5V** 电源。
|
||
- 主频:**4.77 MHz ~ 10 MHz**。
|
||
- 总线:
|
||
- 内部数据总线和外部数据总线均为 **16 位**(8088 为 8 位)
|
||
- 地址总线为 **20 位**,可最大寻址 **1 MB** 的存储空间。
|
||
- 工作方式:**取指令与执行指令并行**(流水线/重叠工作)。
|
||
- 内存管理:**分段管理**方式。
|
||
|
||
---
|
||
|
||
### 2.1 8086 微处理器内部结构
|
||
|
||
#### 2.1.0 内部基本组成
|
||
|
||
CPU 内部最基本的 4 个组成:
|
||
1. 运算器(ALU)
|
||
2. 控制器
|
||
3. 寄存器组
|
||
4. 总线逻辑
|
||
|
||
#### 2.1.1 总线接口单元 BIU(Bus Interface Unit)
|
||
|
||
**组成**(5 个部分):
|
||
1. 4 个 16 位**段寄存器**:CS、DS、SS、ES
|
||
2. 16 位**指令指针** IP
|
||
3. **6 字节指令队列**(8086)
|
||
4. **总线控制逻辑**
|
||
5. **20 位地址加法器**(Σ)
|
||
|
||
**功能**:
|
||
1. 取指令(从存储器取指令到指令队列)
|
||
2. 形成 20 位物理地址
|
||
3. 传送数据:实现 CPU 与内存、I/O 端口间的数据传送
|
||
|
||
**指令预取策略**:
|
||
- 指令队列出现 **2 个以上空字节**时,BIU 自动按 **CS:IP** 确定的位置到存储器去取指令,**一次取 2 个字节**。
|
||
- 这就实现了"取指"与"执行"的并行(流水线)。
|
||
|
||
#### 2.1.2 执行单元 EU(Execution Unit)
|
||
|
||
**组成**(4 个部分):
|
||
1. **16 位 ALU**
|
||
2. **16 位标志寄存器**(FLAGS/FR)
|
||
3. **EU 控制单元**
|
||
4. **8 个 16 位通用寄存器**(AX、BX、CX、DX、SP、BP、SI、DI)
|
||
|
||
**功能**:
|
||
1. 从 BIU 指令队列读取指令
|
||
2. 由 EU 控制电路译码分析
|
||
3. 在 EU 中计算操作数的 16 位偏移地址,**送 BIU**,由 BIU 的 20 位加法器形成 20 位物理地址
|
||
4. 将取来的操作数送 ALU 进行运算
|
||
5. 结果送寄存器或送 BIU 放回内存
|
||
6. 本次操作状态放入标志寄存器中
|
||
|
||
#### 8086 结构特点:EU 与 BIU 并行工作
|
||
|
||
- 串行 CPU:取指→执行→存结果,总线经常空闲。
|
||
- 8086:EU 在执行的同时,BIU 预取下一条指令,**总线利用率大幅提高**,**降低了对存储器存取速度的要求**。
|
||
|
||
---
|
||
|
||
### 2.2 8086 编程结构(寄存器组)
|
||
|
||
8086 CPU 共有 **14 个 16 位寄存器**,分 4 类:
|
||
|
||
| 分类 | 寄存器 | 数量 |
|
||
|------|--------|------|
|
||
| 数据寄存器 | AX, BX, CX, DX | 4 |
|
||
| 指针及变址寄存器 | SP, BP, SI, DI | 4 |
|
||
| 段寄存器 | CS, DS, SS, ES | 4 |
|
||
| 控制寄存器 | IP, FLAGS(FR) | 2 |
|
||
|
||
#### 2.2.1 通用寄存器
|
||
|
||
**(1) 数据寄存器**(4 个 16 位寄存器,每个都可拆成两个 8 位寄存器):
|
||
|
||
| 16 位 | 高 8 位 | 低 8 位 | 用途 |
|
||
|-------|--------|--------|------|
|
||
| AX | AH | AL | 累加器 Accumulator |
|
||
| BX | BH | BL | 基址寄存器 Base |
|
||
| CX | CH | CL | 计数器 Counter |
|
||
| DX | DH | DL | 数据寄存器 Data |
|
||
|
||
例:若 (AX) = 1234H,则 (AH) = 12H,(AL) = 34H。
|
||
|
||
**(2) 指针及变址寄存器**(4 个,只能 16 位使用):
|
||
- **SP**:Stack Pointer 堆栈指针,指示**栈顶**位置(与 SS 配合)。
|
||
- **BP**:Base Pointer 基址指针,指示堆栈段中一个数据区的基位置(用于访问堆栈段中数据)。
|
||
- **SI**:Source Index 源变址寄存器,**源串操作数**的指针。
|
||
- **DI**:Destination Index 目的变址寄存器,**目的串操作数**的指针。
|
||
|
||
#### 2.2.2 段寄存器(4 个)
|
||
|
||
存放**当前段**的段起始地址(高 16 位),与段内偏移地址一起确定一个存储单元地址:
|
||
|
||
| 段寄存器 | 名称 | 用途 | 默认偏移寄存器 |
|
||
|---------|------|------|---------------|
|
||
| **CS** | Code Segment 代码段 | 当前代码段 | **IP** |
|
||
| **SS** | Stack Segment 堆栈段 | 当前堆栈段 | **SP、BP** |
|
||
| **DS** | Data Segment 数据段 | 当前数据段 | BX、SI、DI |
|
||
| **ES** | Extra Segment 附加段 | 附加数据段 | DI(串指令) |
|
||
|
||
#### 2.2.3 控制寄存器(2 个)
|
||
|
||
**(1) IP(Instruction Pointer)指令指针**:
|
||
- 存放**下一条要取出指令**的段内偏移地址。
|
||
- `CS:IP` 决定下一条要取出的指令的物理地址。
|
||
- **IP 不能被程序直接存取**,由 BIU 修改,类似于 PC(Program Counter)。
|
||
- 物理地址 = CS × 16 + IP。
|
||
|
||
**(2) FLAG 标志寄存器(FR)**:
|
||
|
||
16 位寄存器,定义了 **9 位有效标志**,分两类:
|
||
|
||
| 位 | 标志 | 类别 | 含义 |
|
||
|----|------|------|------|
|
||
| **CF** (bit 0) | 进位/借位 Carry Flag | 状态 | 结果最高位有进位/借位 CF=1,否则=0 |
|
||
| **PF** (bit 2) | 奇偶 Parity Flag | 状态 | 结果**低 8 位**中"1"的个数为偶 PF=1,否则=0 |
|
||
| **AF** (bit 4) | 辅助进位 Aux Carry | 状态 | D3 位(第 4 位)有进位/借位 AF=1 |
|
||
| **ZF** (bit 6) | 零 Zero Flag | 状态 | 结果为 0 时 ZF=1,否则=0 |
|
||
| **SF** (bit 7) | 符号 Sign Flag | 状态 | 结果为负(最高位=1)SF=1,否则=0 |
|
||
| **OF** (bit 11) | 溢出 Overflow Flag | 状态 | 有符号运算结果超出表示范围 OF=1 |
|
||
| **IF** (bit 9) | 中断允许 Interrupt Enable | 控制 | IF=1 开中断(允许可屏蔽中断),IF=0 关中断 |
|
||
| **DF** (bit 10) | 方向 Direction Flag | 控制 | 串操作地址方向:DF=0 增址,DF=1 减址 |
|
||
| **TF** (bit 8) | 陷阱 Trap Flag | 控制 | TF=1 单步方式,每执行一条指令产生类型 1 中断 |
|
||
|
||
> 其他位(1、3、5、12、13、14、15)未定义(部分保留为 1)。
|
||
|
||
**典型例题**:完成加法 `35E5H + 7832H` 后求各标志位
|
||
- 35E5H + 7832H = AE17H
|
||
- 结果最高位 A(1010)的最高位为 1 ⇒ **CF = 0**(无进位)
|
||
- 低 8 位 17H = 0001 0111B,有 4 个"1"(偶数) ⇒ **PF = 1**
|
||
- D3 位:E5 + 32 = 117H,D3 位由 5+3=8,无进位 ⇒ **AF = 0**
|
||
- 结果非 0 ⇒ **ZF = 0**
|
||
- 最高位为 1 ⇒ **SF = 1**
|
||
- 有符号溢出判断:35E5H 为负,7832H 为正,结果 AE17H 仍为负,无溢出 ⇒ **OF = 0**
|
||
|
||
---
|
||
|
||
### 2.3 8086 微处理器外部结构(引脚)
|
||
|
||
#### 引脚学习要点
|
||
|
||
- **功能**、**有效电平/沿**、**输入/输出**、**门类型**
|
||
- 功能:传输地址、数据、控制及辅助信号
|
||
- 引脚名上**有横杠**的,表示**低电平/下降沿有效**(如 `RD` 表示低电平有效的读信号)
|
||
- 8086 有**两种工作模式**:**最大模式**和**最小模式**(由 MN/MX 引脚选择)
|
||
- 有 **8 个引脚**在两种模式下功能不同
|
||
|
||
#### 2.3.1 两种模式下功能相同的引脚(共 32 个常用引脚中的大部分)
|
||
|
||
| 序号 | 引脚 | 功能 |
|
||
|------|------|------|
|
||
| 1,20 | GND | 地(2 个接地) |
|
||
| 40 | Vcc | +5V 电源 |
|
||
| 2-16,39 | **AD15~AD0** | **地址/数据复用引脚**,分时输出低 16 位地址及数据信号;经地址锁存器后输出 A15~A0 |
|
||
| 35-38 | **A19/S6 ~ A16/S3** | **地址/状态复用引脚**,分时输出高 4 位地址及状态信息 |
|
||
| 17 | **NMI** | 非屏蔽中断请求,上**升沿**有效 |
|
||
| 18 | **INTR** | 可屏蔽中断请求,**高电平**有效 |
|
||
| 32 | `RD` | 读选通(低有效) |
|
||
| 19 | **CLK** | 时钟输入,占空比 1/3(1/3 高电平,2/3 低电平) |
|
||
| 21 | **RESET** | 复位信号,输入 4 个时钟周期以上的高电平使 CPU 复位 |
|
||
| 22 | **READY** | 就绪信号(高有效),主存或 I/O 接口准备好时可传输数据 |
|
||
| 23 | `TEST` | 测试信号,由 WAIT 指令检查,`TEST`=0 继续,否则等待(用于 CPU 与外部硬件同步) |
|
||
| 33 | **MN/MX** | 最小/最大模式选择:接 +5V 最小模式,接地最大模式 |
|
||
| 34 | `BHE`/S7 | 高 8 位数据允许/状态 |
|
||
|
||
**`BHE` 与 A0 的组合**(关键考点!决定数据总线宽度):
|
||
|
||
| `BHE` | A0 | 操作 | 所用数据引脚 |
|
||
|-------|-----|------|-------------|
|
||
| 0 | 0 | 从**偶地址**读/写**一个字** | AD15~AD0 |
|
||
| 0 | 1 | 从**奇地址**读/写**一个字节** | AD15~AD8 |
|
||
| 1 | 0 | 从**偶地址**读/写**一个字节** | AD7~AD0 |
|
||
| 1 | 1 | 无效 | -- |
|
||
|
||
- 从奇地址读/写**一个字**(非对齐字):需要 **2 个总线周期**
|
||
- 第 1 周期:低 8 位 → AD15~AD8
|
||
- 第 2 周期:高 8 位 → AD7~AD0
|
||
- 对齐字访问:1 个总线周期
|
||
- 非对齐数据访问需 2 个总线周期
|
||
|
||
#### 2.3.2 两种模式下功能不同的引脚(重点:24~31 号引脚)
|
||
|
||
**最小模式下**(MN/MX 接 +5V):
|
||
|
||
| 引脚 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| 24 | `INTA` | 中断响应信号 |
|
||
| 25 | **ALE** | 地址锁存允许(高电平有效,下降沿锁存地址) |
|
||
| 26 | `DEN` | 数据允许(低有效,控制数据收发器) |
|
||
| 27 | **DT/R** | 数据发送/接收(1=发送,0=接收) |
|
||
| 28 | **M/IO** | 存储器/I/O 选择(高=存储器,低=I/O) |
|
||
| 29 | `WR` | 写信号(低有效) |
|
||
| 30 | **HOLD** | 总线保持请求(其他主设备申请总线) |
|
||
| 31 | **HLDA** | 总线保持响应(CPU 让出总线) |
|
||
|
||
**最大模式下**(MN/MX 接地):
|
||
|
||
| 引脚 | 名称 | 功能 |
|
||
|------|------|------|
|
||
| 25, 24 | QS1, QS0 | 指令队列状态,指示前一个 T 状态队列状态 |
|
||
| 26, 27, 28 | `S2` `S1` `S0` | **总线周期状态**信号,提供给 8288 总线控制器 |
|
||
| 29 | `LOCK` | 总线封锁(低有效),由前缀指令 LOCK 产生 |
|
||
| 30, 31 | `RQ/GT1` `RQ/GT0` | 总线请求/允许(双向),`RQ/GT0` 优先级更高 |
|
||
|
||
#### 复位操作(高频考点)
|
||
|
||
- RESET 引脚输入 **4 个时钟周期以上**的高电平使 CPU 复位。
|
||
- **复位后状态**:
|
||
- 标志寄存器清 0(FR = 0)
|
||
- **IP = 0000H**,**DS = 0000H**,**SS = 0000H**,**ES = 0000H**,**指令队列清空**
|
||
- **CS = FFFFH**
|
||
- **复位后执行的第一条指令的物理地址**:
|
||
- PA = CS × 16 + IP = FFFFH × 10H + 0000H = **FFFF0H**
|
||
- 即 CPU 从物理地址 **FFFF0H** 处开始执行指令(位于 1MB 存储空间最顶端的 16 字节 ROM 区)
|
||
|
||
---
|
||
|
||
### 2.4 8086 的两种组成模式(最大/最小模式)
|
||
|
||
| | 最小模式 | 最大模式 |
|
||
|---|---------|---------|
|
||
| **MN/MX** | 接 +5V | 接地 |
|
||
| **系统构成** | 单机系统(只有 1 个 8086) | 多机系统(1 主 8086 + 协处理器 8087/8089) |
|
||
| **控制信号** | 由 8086 自身直接产生 | 由总线控制器 **8288** 产生 |
|
||
| **典型配置** | 1×8284(时钟)+ 3×8282(地址锁存)+ 2×8286(总线驱动) | 1×8284 + 2×8282 + 2×8286 + 1×8288(总线控制器) |
|
||
|
||
> **8288 是最大模式区别于最小模式的关键芯片**,专门用来根据 `S2 S1 S0` 状态产生控制信号。
|
||
|
||
---
|
||
|
||
### 2.5 8086 总线周期(时序)
|
||
|
||
#### 2.5.1 基本概念
|
||
|
||
- **时钟周期(T)**:CPU 主频每个时钟脉冲的持续时间,用 T 表示。
|
||
- **总线周期**:CPU 通过总线进行一次读或写的过程。一个总线周期由 **4 个时钟周期 T1、T2、T3、T4** 组成。
|
||
- **指令周期**:执行一条指令所需的时间(由若干总线周期组成)。
|
||
- **等待状态 Tw**:当外设/存储器未准备好(READY=0)时插入;Tw 与 T3 行为相同。
|
||
- **中断响应周期**:CPU 响应可屏蔽中断时插入 2 个总线周期。
|
||
|
||
| T 状态 | 主要操作 |
|
||
|--------|---------|
|
||
| **T1** | CPU 发出地址(A19/S6~A16/S3 输出地址,A19~A16 高 4 位;AD15~AD0 输出低 16 位地址),ALE 有效锁存地址 |
|
||
| **T2** | 撤销地址;地址/数据复用线 AD 浮空;地址/状态线输出**状态 S6~S3**;读/写控制信号有效 |
|
||
| **T3** | 数据出现在 AD15~AD0 上(写:CPU 输出数据;读:等待外设送数据);检查 READY 信号,未就绪则插入 Tw |
|
||
| **T4** | 完成数据读/写,控制信号无效,结束总线操作 |
|
||
|
||
#### 2.5.2 总线读周期(最小模式)信号特点
|
||
|
||
- `M/IO`:T2 起变有效(**高**=读存储器,**低**=读 I/O)。
|
||
- `DT/R`:低(接收,CPU 读)。
|
||
- `DEN`:T2 起变低有效(数据收发器使能)。
|
||
- `RD`:T2 起变低有效(读选通)。
|
||
- ALE 在 T1 出现一个正脉冲,下降沿锁存地址。
|
||
- T3/Tw 期间数据出现在数据总线上。
|
||
|
||
#### 2.5.3 总线写周期(最小模式)信号特点
|
||
|
||
- `DT/R`:高(发送,CPU 写)。
|
||
- 数据在 T2 后即出现在 AD 线上(写不用等外设)。
|
||
- `WR`:T2 起变低有效。
|
||
- 其余与读周期类似。
|
||
|
||
**典型例题**:`MOV AX, [2000H]` 设 (DS)=1000H,求物理地址
|
||
- PA = DS × 16 + 2000H = 1000H × 10H + 2000H = 12000H
|
||
- 从 12000H、12001H 取出字数据 3456H 送 AX(高 8 位从 12001H 读出 34H,低 8 位从 12000H 读出 56H)
|
||
|
||
---
|
||
|
||
### 2.6 8086 存储器组织
|
||
|
||
#### 2.6.1 层次结构(由近到远、速度由快到慢、容量由小到大)
|
||
|
||
寄存器 → CPU 内部 Cache → CPU 外部 Cache → 主存 → 外存
|
||
|
||
#### 2.6.2 存储器分类
|
||
|
||
- 外存:磁盘、磁带、光盘、U 盘
|
||
- 内存:
|
||
- ROM(只读):MROM、PROM、EPROM、EEPROM
|
||
- RAM(随机读写):双极型、MOS 型(MOS 又分**动态 RAM**和**静态 RAM**)
|
||
|
||
#### 2.6.3 地址空间
|
||
|
||
- 8086 有 20 位地址线,按字节单元编址,地址范围 **00000H ~ FFFFFH**(共 1 MB)。
|
||
- 每个存储单元对应 1 个 20 位**物理地址**。
|
||
|
||
#### 数据存储格式
|
||
|
||
- 字(16 位)存放在任意连续两个单元中,**低字节放低地址**(小端方式)。
|
||
- 字地址 = 低字节所在地址。
|
||
|
||
**对齐字 vs 非对齐字**:
|
||
|
||
| 类型 | 定义 | 总线周期数 |
|
||
|------|------|----------|
|
||
| **对齐字** | 存放在偶地址的字 | **1 个总线周期** |
|
||
| **非对齐字** | 存放在奇地址的字 | **2 个总线周期** |
|
||
|
||
#### 2.6.4 分段管理
|
||
|
||
- 8086 内部寄存器是 16 位,无法直接给出 20 位地址,故采用分段管理。
|
||
- **每段最长 64 KB**,段内地址连续,各段独立。
|
||
- 段起始地址必须能被 **16 整除**(即低 4 位为 0),所以 16 位段寄存器的内容 ×16 即为该段 20 位物理基地址。
|
||
- 段内偏移量:16 位,最大 64K 单元。
|
||
|
||
**两类地址**:
|
||
|
||
| 类型 | 含义 |
|
||
|------|------|
|
||
| **物理地址** | 信息在存储器中实际存放的地址(20 位),通过地址线传送 |
|
||
| **逻辑地址** | 编程中使用的地址,由**段地址:段内偏移量**组成 |
|
||
|
||
**物理地址计算公式**(高频重点):
|
||
|
||
```
|
||
物理地址 (PA) = 段地址 × 16 + 段内偏移量
|
||
= 段地址 × 10H + 偏移量
|
||
(20 位) (16 位) (16 位)
|
||
```
|
||
|
||
例:逻辑地址 `1000:2000H` 的物理地址 = 1000H × 10H + 2000H = **12000H**
|
||
|
||
**默认段寄存器使用规则**:
|
||
|
||
| 访问类型 | 默认段寄存器 | 可显式指定的段寄存器 |
|
||
|---------|------------|-------------------|
|
||
| 取指令 | CS | 无 |
|
||
| 堆栈操作 | SS | 无 |
|
||
| 字符串操作源串 | DS | CS, ES, SS |
|
||
| 字符串操作目的串 | ES | 无 |
|
||
| 一般数据访问 | DS | CS, ES, SS |
|
||
|
||
> 同一物理地址可对应多个逻辑地址(如 PA=12000H 可写成 1000:2000H、1100:1200H 等)
|
||
|
||
---
|
||
|
||
### 2.7 I/O 端口组织
|
||
|
||
- I/O 设备不能直接与 CPU 总线相连,需通过 I/O 接口芯片。
|
||
- **端口**:CPU 可寻址的 I/O 接口逻辑;每个端口分配一个端口地址。
|
||
- 8086 用低 16 位地址线对 I/O 端口编址,最多 65536 个 8 位端口。
|
||
- 两个编号相邻的 8 位端口可组合成 1 个 16 位端口。
|
||
- 8086 采用**独立的端口编址方式**(与存储器分开编址,靠 M/IO 引脚区分)。
|
||
|
||
---
|
||
|
||
### 2.8 8086 中断系统(重要补充)
|
||
|
||
#### 2.8.1 基本概念
|
||
|
||
- **中断**:CPU 正常执行时,由事件引起 CPU 暂停现行程序,转去执行服务程序,处理完后返回断点继续执行。
|
||
- **中断源**:触发中断的事件。
|
||
- **中断系统**:实现中断功能的软硬件系统。
|
||
|
||
#### 2.8.2 中断优先级
|
||
|
||
当多个中断源同时请求时,按优先级响应。
|
||
- 基本方法:**软件查询**、**硬件优先级排队**(菊花链/8259A 中断控制器)。
|
||
|
||
#### 2.8.3 CPU 响应外部中断的条件
|
||
|
||
1. 一条指令执行结束后。
|
||
2. 有中断请求。
|
||
3. 开中断(IF=1,仅对 INTR)。
|
||
|
||
#### 2.8.4 中断处理过程(硬件自动完成)
|
||
|
||
1. **关中断**
|
||
2. **保护现场**(标志寄存器入栈)
|
||
3. **保护断点**(CS:IP 入栈)
|
||
4. **形成中断服务程序入口地址**
|
||
5. **转入中断服务程序**
|
||
|
||
#### 2.8.5 中断服务程序结构(软件完成)
|
||
|
||
1. 保护现场(所用寄存器入栈)
|
||
2. 中断服务(核心)
|
||
3. 恢复现场(寄存器出栈)
|
||
4. 开中断(STI)
|
||
5. 返回断点(IRET)
|
||
|
||
#### 2.8.6 中断分类
|
||
|
||
| 类型 | 说明 | 中断类型码 |
|
||
|------|------|----------|
|
||
| **外部中断** | INTR(可屏蔽)、NMI(非屏蔽) | 由 INTR:8259A 提供;NMI 固定为 2 |
|
||
| **软件中断** | INT n、INTO(溢出 OF=1)、INT3(断点) | n 或固定 |
|
||
| **软件陷阱** | 除法错误(类型 0)、单步中断(TF=1,类型 1) | 0、1 |
|
||
|
||
#### 2.8.7 中断向量表
|
||
|
||
- 位于存储器低地址端,**1 KB**(00000H ~ 003FFH),共 256 项。
|
||
- 每 4 字节存放一个中断服务程序的入口逻辑地址(CS:IP):
|
||
- 低地址两字节:IP
|
||
- 高地址两字节:CS
|
||
- **向量地址 = 类型码 × 4**
|
||
- 例:类型码 20H 的向量地址 = 20H × 4 = 80H,从 0000:0080H 起依次存放 IP(低)、CS(高)
|
||
|
||
#### 2.8.8 可屏蔽中断(INTR)
|
||
|
||
- 高电平有效,**IF=1 时**CPU 在当前指令执行结束后响应。
|
||
- INTR 响应需 2 个中断响应总线周期:
|
||
- 第 1 周期:`INTA` 给出响应
|
||
- 第 2 周期:从数据线读取中断类型码
|
||
|
||
#### 2.8.9 非屏蔽中断(NMI)
|
||
|
||
- 不受 IF 影响,**上升沿触发**,类型码固定为 **2**。
|
||
- 实模式下,CPU 直接从中断向量表 **0000:0008H ~ 0000:000BH** 取出 CS:IP。
|
||
|
||
#### 2.8.10 软件中断(INT n、INTO、INT3)
|
||
|
||
- 中断类型码包含在指令中,**不执行中断响应总线周期**。
|
||
- 返回地址指向软件中断指令的**下一条指令**。
|
||
|
||
---
|
||
|
||
## 二、考点总结(期末必背)
|
||
|
||
### 【高频】计算题考点
|
||
|
||
- **物理地址计算**:`PA = 段地址 × 16 + 段内偏移量`(PA = 段地址 × 10H + EA)
|
||
- 例:(DS)=2000H,(BX)=1000H,`MOV AX,[BX]` 取出的物理地址 = 2000H×10H + 1000H = **21000H**
|
||
- **复位后第一条指令地址**:PA = CS × 16 + IP = FFFFH × 10H + 0000H = **FFFF0H**
|
||
- **标志位判断**(CF/PF/AF/ZF/SF/OF)
|
||
- 必背各标志位的判定规则(特别是 OF 与 CF 的区别)
|
||
- **向量地址计算**:向量地址 = 中断类型码 × 4
|
||
- **存储容量计算**:8086 = 1 MB,每段最大 64 KB,I/O 端口 64 KB
|
||
|
||
### 【高频】简答题考点
|
||
|
||
- **BIU 与 EU 的功能**(必背)
|
||
- BIU:取指、形成物理地址、传送数据
|
||
- EU:译码、执行运算、存结果、更新标志
|
||
- **8086 结构特点**:取指与执行并行(EU/BIU 流水线工作),提高总线利用率,降低存储器速度要求
|
||
- **标志寄存器 9 位标志位的含义**(每位都要记清楚)
|
||
- **最小模式与最大模式的区别**:
|
||
- 最小模式:单机系统,MN/MX 接+5V,控制信号由 CPU 自身直接产生;配 8284+8282+8286
|
||
- 最大模式:多机系统,MN/MX 接地,控制信号由 8288 产生;可接 8087/8089 协处理器
|
||
- **8086 引脚分时复用**:AD15~AD0(地址/数据复用)、A19/S6~A16/S3(地址/状态复用),用 ALE 锁存地址
|
||
- **`BHE` 与 A0 组合决定数据总线宽度**(4 种组合,对齐字 1 个总线周期,非对齐字 2 个)
|
||
- **段寄存器的作用与默认搭配**(CS:IP、SS:SP/BP、DS:BX/SI/DI、ES:DI)
|
||
- **分段管理的原因**:内部寄存器 16 位无法直接给出 20 位物理地址;段起始地址必须能被 16 整除
|
||
- **物理地址与逻辑地址的关系**、**同一 PA 可对应多个逻辑地址**
|
||
- **复位后寄存器状态**:FR=0、IP=0、DS=0、SS=0、ES=0、CS=FFFFH、指令队列清空
|
||
- **指令预取策略**:队列有 2 个以上空字节时 BIU 自动取指一次 2 字节
|
||
- **总线周期 4 个 T 状态各做什么**
|
||
- **中断响应条件、处理过程、软件中断与硬件中断的区别**
|
||
- **中断向量表的结构与向量地址计算**
|
||
|
||
### 【高频】分析题考点
|
||
|
||
- **给定总线时序波形图,判断处于哪个 T 状态、读还是写、内存还是 I/O**
|
||
- 看 M/IO:高=内存,低=I/O
|
||
- 看 DT/R:高=写,低=读
|
||
- 看 RD/WR 是否有效
|
||
- 看 DEN、ALE 的电平变化
|
||
- **给定 `BHE`、A0 状态,判断访问类型**(4 种组合)
|
||
- **给定中断类型码求向量地址**及对应物理单元中存放的内容顺序
|
||
|
||
### 重点速记表
|
||
|
||
| 项目 | 数值/特征 |
|
||
|------|---------|
|
||
| 数据总线(8086) | 16 位 |
|
||
| 地址总线 | 20 位 |
|
||
| 寻址空间 | 1 MB (00000H ~ FFFFFH) |
|
||
| 每段最大 | 64 KB |
|
||
| 段寄存器位数 | 16 位 |
|
||
| 物理地址位数 | 20 位 |
|
||
| 时钟占空比 | 1/3(高)/ 2/3(低) |
|
||
| 主频范围 | 4.77 ~ 10 MHz |
|
||
| 指令队列 | 6 字节 |
|
||
| 寄存器总数 | 14 个 16 位 |
|
||
| 复位后 CS | FFFFH |
|
||
| 复位后 IP | 0000H |
|
||
| 复位后首指令地址 | FFFF0H |
|
||
| 复位高电平持续 | ≥ 4 个时钟周期 |
|
||
| 总线周期 T 状态数 | 4(T1、T2、T3、T4) |
|
||
| 总线控制器(最大模式) | 8288 |
|
||
| 时钟发生器 | 8284 |
|
||
| 地址锁存器 | 8282(或 74LS373) |
|
||
| 总线驱动器 | 8286(或 74LS245) |
|
||
| 协处理器(最大模式) | 8087(浮点)、8089(I/O) |
|
||
| 中断向量表大小 | 1 KB(00000H ~ 003FFH) |
|
||
| 中断类型码数 | 256 个 |
|
||
| 向量地址 | 类型码 × 4 |
|
||
| NMI 类型码 | 2 |
|
||
| 电源 | +5V(单电源) |
|
||
|
||
### 典型例题
|
||
|
||
**例 1**:已知 (CS)=1200H,(IP)=0200H,求物理地址
|
||
- PA = 1200H × 10H + 0200H = **12200H**
|
||
|
||
**例 2**:已知 (DS)=3000H,求访问数据单元 [5000H] 的物理地址
|
||
- PA = 3000H × 10H + 5000H = **35000H**
|
||
|
||
**例 3**:物理地址 20000H 可对应哪些逻辑地址?
|
||
- 段地址 = PA ÷ 16,偏移 = PA % 16
|
||
- 2000:0000H、2001:0FF0H、20FF:0010H 等(无数种)
|
||
|
||
**例 4**:求加法 35E5H + 7832H 的标志位(结果 = AE17H)
|
||
- CF=0、PF=1(17H 中"1"为偶数)、AF=0、ZF=0、SF=1、OF=0
|
||
|
||
**例 5**:类型码 08H 的中断,对应向量地址 = 08H × 4 = **20H**,从 0000:0020H 起依次存放 IP、CS
|
||
|
||
**例 6**:某总线周期波形中 M/IO=1、DT/R=0、RD=0,说明是**读存储器**操作
|
||
- ALE 在 T1 有效锁存地址;T3 数据由存储器送到 CPU
|
||
|
||
---
|
||
|
||
> **复习建议**:本章内容多且杂,请按"结构(BIU/EU)→ 寄存器组(特别是标志位)→ 引脚 → 物理地址计算 → 总线时序 → 中断"的顺序复习。务必多练计算题(物理地址、向量地址、标志位),并熟记简答题的关键点。 |