微机原理与接口技术 — 知识点汇总

教材:《微机原理与接口技术(第4版)》牟琦 桑亚群 编著
整理日期:2026年6月16日


第1章 计算机系统概述

考试范围:1.1 计算机系统简介、1.2 微处理器的发展(1.3 嵌入式系统、1.4 逻辑电路基础不考)


1.1 计算机系统简介

1.1.1 计算机的分类及发展

一、计算机的分类

分类依据 类别 说明
按用途 专用计算机 针对特定任务设计,结构简单、速度快、可靠性高、成本低,但功能单一、适应性差
通用计算机 功能齐全、适应性强,但牺牲了效率、速度和经济性
按性能和规模 巨型机(超级计算机) 速度最快、性能最高、存储容量最大,运算速度每秒万亿次以上
大型机 结构规模和性能指标次之
服务器 介于大型机和微型机之间
微型计算机 以微处理器为CPU,即个人计算机(PC)
单片机(微控制器) 一片集成电路做成,体积小、结构简单、价格便宜

微型计算机:以微处理器作为中央处理器,和半导体存储器、输入输出设备共同组成的计算机系统。1971年Intel 4004(4位)组成的第一台微型计算机MCS-4问世。

单片机主流系列:8051、AVR、PIC、MSP430、ARM

二、计算机的发展(五代)

代数 时间 逻辑元件 主要特征
第一代 1946年起 电子管 定点运算,主要用于数值计算
第二代 1956年起 晶体管 浮点运算,提出变址、中断、I/O处理等新概念
第三代 1964年起 中小规模集成电路 机种多样化、系列化,小型计算机出现
第四代 1972年起 大规模/超大规模集成电路(LSI/VLSI) 微型计算机开始出现
第五代 1991年起 巨大规模集成电路(ULSI) 单片计算机开始出现

世界第一台电子数字计算机:1946年,美国宾夕法尼亚大学,耗资40万美元,18000多个电子管,占地160平方米,重30吨,运算速度5000次/秒。

三、摩尔定律

1965年摩尔观察到:芯片上的晶体管数量每年翻一番(后修正为每18个月翻一番)。

核心内容:由于硅技术的不断改进,每18个月,集成度将翻一番,速度将提高一倍,而其价格将降低一半。

集成电路规模划分

  • LSI(大规模集成电路):芯片上1000个元件
  • VLSI(超大规模集成电路):每个芯片1万个元件
  • ULSI(特大规模集成电路):芯片超过100万个元件

1.1.2 计算机系统的组成

一、基本概念

概念 定义
计算机系统 硬件系统软件系统两部分组成
硬件 构成计算机的所有实体部件的集合(电路、机械等物理部件)
软件 为运行、维护、管理、应用计算机所编制的所有程序文档的总和
程序 用计算机语言编写的命令序列的集合
文档 便于了解程序所需要的阐述性资料

二、冯·诺依曼计算机(重要考点⭐)

1946年,冯·诺依曼提出**"存储程序控制"的概念,因此又称存储程序计算机**为冯·诺依曼结构计算机。

冯·诺依曼体系结构五大要点

序号 要点 说明
1 五大部件 运算器、存储器、控制器、输入设备、输出设备
2 二进制表示 指令和数据均以二进制编码表示,采用二进制运算
3 存储程序 程序和数据存放在同一存储器
4 顺序执行 指令在存储器中按执行顺序存放,由**程序计数器(PC)**指明要执行的指令地址
5 以运算器为中心 输入/输出设备与存储器之间的数据传送都要通过运算器

⚠️ 易错点:冯·诺依曼结构是以运算器为中心;现代计算机是以存储器为中心

三、五大部件功能

部件 功能 核心/备注
运算器 对信息进行处理和运算(“电子算盘”),完成算术运算和逻辑运算 核心是算术逻辑运算部件(ALU)
控制器 整个计算机的指挥中心,控制各部件有序工作 包括指令寄存器、指令译码器、时序控制器
存储器 记忆装置,存放程序和数据 是"存储程序控制"的基础
输入设备 将程序和原始数据输入计算机,转换为二进制信息
输出设备 将处理结果以人或其他设备能接受的形式输出

四、现代计算机系统

组成 说明
CPU(中央处理器) 运算器 + 控制器 集成在一片集成电路中
主机 CPU + 内存
外围设备(外设) 主机以外的所有硬件设备(输入设备、输出设备、辅助存储器)

现代计算机特点

  • 存储器为中心
  • 采用总线结构
  • 在系统总线上配置存储器和I/O接口电路及I/O设备

冯·诺依曼结构(图1.2):以运算器为中心,所有数据传送通过运算器。

现代计算机结构(图1.3):以存储器为中心,I/O设备可通过I/O接口直接与存储器交换数据。


1.2 微处理器的发展

Intel微处理器发展时间线

年份 型号 位数 特点
1971 Intel 4004 4位 第一个商用微处理器
1972 Intel 8008 8位
1974 Intel 8080 8位
1978 Intel 8086 16位 第一个x86处理器
1979 Intel 8088 16位 准16位(内部16位,外部8位数据总线)
1982 Intel 80286 16位 增加了保护模式
1985 Intel 80386 32位 第一个32位处理器
1989 Intel 80486 32位 集成FPU和Cache
1993 Intel Pentium 32位 超标量架构
1995 Intel Pentium Pro 32位 动态执行
1997 Intel Pentium II/III 32位 MMX/SSE指令集
2000 Intel Pentium 4 32位 NetBurst架构
2004 Intel Pentium M 32位 低功耗设计
2006 Intel Core 2 Duo 64位 多核时代
2008 Intel Core i7 64位 Nehalem架构

其他微处理器

  • AMD:x86兼容处理器的主要竞争对手
  • ARM:低功耗处理器,广泛用于移动设备
  • MIPS:RISC架构,用于嵌入式系统

1.3 嵌入式系统 ❌ 不考

1.4 逻辑电路基础 ❌ 不考


考试重点总结 ⭐

必考知识点

  1. 冯·诺依曼体系结构的五大要点(特别是"存储程序"概念)
  2. 五大部件及其功能(运算器、控制器、存储器、输入设备、输出设备)
  3. 以运算器为中心 vs 以存储器为中心的区别
  4. 计算机五代发展的时间线和逻辑元件
  5. 摩尔定律的内容
  6. 微型计算机的定义和组成
  7. CPU、主机、外设的概念区分

重要公式/规则

  • 摩尔定律:每18个月,集成度翻一番,速度翻一番,价格降一半
  • 计算机发展规律:大约每隔5年运算速度提高10倍,可靠性提高10倍,成本降低1/10,体积缩小1/10

易错点提醒 ⚠️

易错点 正确理解
冯·诺依曼计算机的中心 以运算器为中心(不是存储器)
现代计算机的中心 以存储器为中心(不是运算器)
程序和数据的存放 存放在同一存储器中(冯·诺依曼特点)
CPU的组成 运算器 + 控制器(不包括存储器)
主机的组成 CPU + 内存(不包括外设)
第一台电子计算机 1946年ENIAC,不是第一台微型计算机
第一台微型计算机 1971年MCS-4(Intel 4004)

知识框架图

1
2
3
4
5
6
7
8
9
10
计算机系统
├── 硬件系统
│ ├── CPU(运算器 + 控制器)
│ ├── 存储器(内存)
│ └── 外部设备
│ ├── 输入设备
│ └── 输出设备
└── 软件系统
├── 系统软件
└── 应用软件

整理自《微机原理与接口技术(第4版)》第1章


第2章 微型计算机系统基础

考试范围:2.1 指令系统、2.2 计算机中的数据表示与编码、2.3 微型计算机硬件系统组成、2.4 输入输出系统
不考:2.5 微机系统中采用的先进技术


2.1 指令系统

2.1.1 程序设计语言

一、三种语言对比

语言类型 定义 特点 翻译方式
机器语言 用二进制代码表示的计算机能直接识别和执行的指令集合 使用绝对地址和绝对操作码;最低级的语言;无需翻译 无需翻译,硬件直接执行
汇编语言 用约定的文字、符号和数字按规定格式表示指令的符号语言 用英文缩写表示操作码(助记符);与机器语言一一对应;面向机器 需要汇编程序翻译为目标程序
高级语言 接近数学语言和自然语言的编程语言(如BASIC、C、C++、Java等) 通用性强、便于学习和掌握;与具体机器无关 需要编译程序解释程序翻译

⚠️ 易错点

  • 汇编语言与机器语言是一一对应的,一种CPU对应一种汇编语言
  • 高级语言源程序需通过编译或解释才能执行
  • 编译程序:将源程序全部翻译成目标程序(可独立运行)
  • 解释程序:逐条解释语句并逐条执行(不生成目标程序)

2.1.2 处理器体系结构

一、系列计算机与ISA

概念 定义
指令集体系结构(ISA) CPU物理硬件和上层软件之间的接口,是编译程序开发者和CPU设计者之间的抽象层
系列计算机 具有相同基本指令系统和基本体系结构,但具有不同组成和实现的一系列不同型号的机器

ISA的核心作用

  • 对CPU设计者:根据ISA要求设计CPU,使其能够识别和执行ISA要求的指令
  • 对编译程序开发者:不需要知道CPU内部硬件如何实现,只需知道CPU能识别和执行哪些指令及其编码方式

系列计算机的特点(如Intel x86系列):

  • 同一系列的CPU有共同的指令集
  • 新推出的机种指令系统包含所有旧机种的全部指令
  • 旧机种上运行的各种软件可以不加任何修改便可以在新机种上运行(向后兼容)

二、CISC与RISC对比(重要考点⭐)

特征 CISC(复杂指令系统计算机) RISC(精简指令系统计算机)
全称 Complex Instruction Set Computer Reduced Instruction Set Computer
代表 Intel、AMD(x86架构) IBM、ARM、MIPS
指令数量 指令类型多(数百条) 指令类型尽可能减少
指令长度 指令长度不等,有些指令长且复杂 长度尽可能相等,规范指令格式
执行时间 执行时间不等 执行时间尽可能相同
寻址方式 寻址方式复杂,内存定位复杂 寻址方式简化,简化访问内存操作
实现方式 采用微程序结构 使用VLSI技术,简化处理器结构
寄存器 增加通用寄存器
并行处理 增强处理器的并行处理能力
设计理念 考虑所有可能情况,功能全面 只支持常用简单指令,硬件只支持常用的20%指令

“巴莱多定律”(二八定律):CISC中最常用的简单指令仅占指令总数的20%,但在程序中出现的频率却占80%。大量使用频率很低的复杂指令造成了硬件资源的浪费。


2.2 计算机中的数据表示与编码

2.2.1 数与数制

一、进位计数法

数制:人们利用符号来计数的科学方法,以表示数值所用的数字符号个数来命名。

数制 基数 数字符号 进位规则 借位规则
十进制 10 0~9 逢十进一 借一当十
二进制 2 0、1 逢二进一 借一当二
八进制 8 0~7 逢八进一 借一当八
十六进制 16 0~9、A~F 逢十六进一 借一当十六

二、位权表示法

位权:某个固定位置上的计数单位。

r进制数的通式

N=±i=mn1xiri=±(i=0n1xiri+i=1mxiri)N = \pm \sum_{i=-m}^{n-1} x_i r^i = \pm \left( \sum_{i=0}^{n-1} x_i r^i + \sum_{i=-1}^{-m} x_i r^i \right)

其中:r称为基数(或基),n为整数位个数,m为小数位个数。

示例

  • (234.13)10=2×102+3×101+4×100+1×101+3×102(234.13)_{10} = 2×10^2 + 3×10^1 + 4×10^0 + 1×10^{-1} + 3×10^{-2}
  • (110.11)2=1×22+1×21+0×20+1×21+1×22(110.11)_2 = 1×2^2 + 1×2^1 + 0×2^0 + 1×2^{-1} + 1×2^{-2}
  • (34.56)8=3×81+4×80+5×81+6×82(34.56)_8 = 3×8^1 + 4×8^0 + 5×8^{-1} + 6×8^{-2}
  • (1B.E5)16=1×161+B×160+E×161+5×162(1B.E5)_{16} = 1×16^1 + B×16^0 + E×16^{-1} + 5×16^{-2}

三、常用数制对照表(重要⭐)

十进制 二进制 八进制 十六进制
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

关键关系:2³=8,2⁴=16,因此每3位二进制数对应一位八进制数,每4位二进制数对应一位十六进制数

四、数制转换(重要考点⭐⭐⭐)

(1)r进制数 → 十进制数:按位权展开相加

【例2.1】 把二进制数101.11转换为十进制数

(101.11)2=1×22+0×21+1×20+1×21+1×22=4+0+1+0.5+0.25=(5.75)10(101.11)_2 = 1×2^2 + 0×2^1 + 1×2^0 + 1×2^{-1} + 1×2^{-2} = 4+0+1+0.5+0.25 = (5.75)_{10}

【例2.2】 把八进制数123.54转换为十进制数

(123.54)8=1×82+2×81+3×80+5×81+4×82=64+16+3+0.625+0.0625=(83.6875)10(123.54)_8 = 1×8^2 + 2×8^1 + 3×8^0 + 5×8^{-1} + 4×8^{-2} = 64+16+3+0.625+0.0625 = (83.6875)_{10}

(2)十进制数 → r进制数

整数部分:除r取余法(从下往上读)

将十进制整数除以基数r,得到商和余数;再将商除以r,又得到商和余数;继续直到商为0。第一次得到的余数为最低位,最后得到的余数为最高位。

【例2.3】 将十进制数25转换为二进制数

1
2
3
4
5
6
2 | 25  余数
2 | 12 1 ←最低位
2 | 6 0
2 | 3 0
2 | 1 1
| 0 1 ←最高位

所以 (25)10=(11001)2(25)_{10} = (11001)_2

【例2.4】 将十进制数97转换为十六进制数

1
2
3
16 | 97  余数
16 | 6 1 ←最低位
| 0 6 ←最高位

所以 (97)10=(61)16(97)_{10} = (61)_{16}

小数部分:乘r取整法(从上往下读)

用基数r乘以十进制小数,得到整数和小数部分;再用r乘以小数部分,继续直到小数部分为0或满足精度要求。每次得到的整数部分按先后顺序从左到右排列。

【例2.5】 将十进制小数0.8125转换为二进制小数

1
2
3
4
5
0.8125 × 2 = 1.6250  整数部分 1 ←最高位
0.6250 × 2 = 1.2500 整数部分 1
0.2500 × 2 = 0.5000 整数部分 0
0.5000 × 2 = 1.0000 整数部分 1 ←最低位
0.0000 余下小数为0,结束

所以 (0.8125)10=(0.1101)2(0.8125)_{10} = (0.1101)_2

⚠️ 易错点

  • 整数部分:除r取余,余数从下往上读(先得到的是低位)
  • 小数部分:乘r取整,整数从上往下读(先得到的是高位)
  • 十进制转r进制时,整数和小数部分需要分别转换,再合并
  • 有些十进制小数无法用二进制精确表示(如0.1),转换时只能取近似值

2.3 微型计算机硬件系统组成

2.3.1 微型计算机系统组成概述

一、基本概念层次

层次 组成 说明
微处理器(CPU) 运算器 + 控制器 核心硬件部件,对系统性能起决定性影响
微型计算机 微处理器 + 存储器 + I/O接口 + 系统总线 硬件实体
微型计算机系统 微型计算机 + 外部设备 + 软件 完整的、独立的信息处理系统

二、内存与外存对比

特征 内存(主存) 外存(辅存)
构成 半导体材料(RAM、ROM、Cache) 磁盘、光盘等
易失性 易失性(断电数据丢失) 非易失性(断电数据不丢失)
CPU访问 CPU可以直接访问 CPU不能直接访问
容量 容量小 容量大
速度 速度快 速度慢
价格 价格较高 价格较低

⚠️ 易错点:ROM具有非易失性,在嵌入式系统中通常用来做外存储器。

三、单片机与嵌入式系统

概念 定义
单片机 只用一片集成电路做成的计算机,把一个完整的计算机系统集成到一个芯片上(包括CPU、RAM、ROM、I/O口、中断系统、定时器/计时器等)
嵌入式系统 一种"完全嵌入受控器件内部,为特定应用而设计的专用计算机系统"
关系 单片机是一种典型的嵌入式微控制器

2.4 输入输出系统

2.4.1 I/O接口概述

一、I/O接口的功能

功能 说明
数据缓冲 解决CPU与外设速度不匹配问题
信号转换 进行数据格式、电平、信号类型的转换
中断管理 管理中断请求,实现中断优先级排队
设备选择 通过端口地址选择特定的外设
时序控制 提供外设工作所需的时序信号

二、I/O端口编址方式

方式 说明 特点
统一编址 I/O端口与内存单元统一编址,共享地址空间 优点:可用所有内存访问指令;缺点:占用内存空间
独立编址 I/O端口与内存分开编址,有独立的I/O地址空间 优点:不占用内存空间;缺点:需要专门的I/O指令

8086/8088 CPU采用独立编址方式。


考试重点与易错点总结

一、数制转换(最高频考点⭐⭐⭐)

  1. r进制→十进制:按位权展开求和
  2. 十进制整数→r进制:除r取余,余数从下往上读
  3. 十进制小数→r进制:乘r取整,整数从上往下读
  4. 二进制↔八进制:每3位一组互转
  5. 二进制↔十六进制:每4位一组互转

二、CISC vs RISC(常考对比题⭐⭐)

对比项 CISC RISC
指令数量 多(数百条)
指令长度 不等 尽可能相等
执行时间 不等 尽可能相同
寻址方式 复杂 简化
代表架构 x86(Intel/AMD) ARM、MIPS、PowerPC

三、常见易错点

  1. 汇编语言与机器语言一一对应,不是与高级语言一一对应
  2. 编译是全部翻译,解释是逐条翻译执行
  3. 除r取余法:第一次得到的余数是最低位最后得到的是最高位
  4. 乘r取整法:第一次得到的整数是最高位最后得到的是最低位
  5. 十进制数0.1转换为二进制是无限循环小数(0.0001100110011…)
  6. 每3位二进制对应1位八进制,每4位二进制对应1位十六进制
  7. 内存是易失性的(RAM断电丢失),外存是非易失性
  8. ROM虽然属于内存,但具有非易失性,嵌入式系统中可做外存

四、重要公式

r进制数按位权展开通式

N=±(i=0n1xiri+i=1mxiri)N = \pm \left( \sum_{i=0}^{n-1} x_i r^i + \sum_{i=-1}^{-m} x_i r^i \right)

二进制→十进制

N2=±i=mn1xi2iN_2 = \pm \sum_{i=-m}^{n-1} x_i 2^i


注意:本章2.3~2.4节中关于寄存器结构、存储器地址分配、堆栈操作等详细内容需结合教材后续页面及课堂笔记补充完善。提供的图片仅覆盖了2.1~2.2.1节(数制转换部分)。


第3章 80x86微处理器


3.1 Intel 8086微处理器概述

8086基本参数

参数
推出时间 1978年,Intel公司
数据总线宽度 16位
地址总线宽度 20位
寻址能力 1MB(2²⁰ = 1,048,576字节)
ALU位宽 16位
操作位数 8位和16位均可
指令队列 6字节预取队列

8086主要特点

  • 采用多级中断技术多重寻址方式多重数据处理形式
  • 采用段式存储器结构
  • 具有硬件乘除法运算电路
  • 增加了预取指令的队列寄存器
  • 具有多重处理能力(可与8087浮点运算器、8089 I/O处理器组成多处理器系统)

3.2 8086的存储器组织(⭐重点)

3.2.1 寻址空间和数据存储格式

1. 寻址空间

  • 定义:存储器地址允许的最大范围,即CPU能访问多大范围的地址
  • 寻址空间由CPU地址总线的位数决定
  • 存储器按字节编址时,若地址总线为 n 位,CPU寻址范围是 2ⁿ 字节
CPU 地址总线位数 寻址能力
8086 20位 2²⁰ = 1MB
80286 24位 2²⁴ = 16MB
80386 32位 2³² = 4GB

⚠️ 易错点:寻址范围的大小和内存的实际容量并不一定相等。如果地址总线位数不够,即使有很大的内存也无法完全访问。

2. 8086存储器的组织及寻址

  • 8086 CPU地址总线20位,寻址能力为1MB
  • 每字节用唯一的一个地址码标识
  • 地址范围:00000H ~ FFFFFH(十六进制)
  • 这种每字节对应一个地址的方式称为**“按字节编址”**

3. 数据存储类型

(1) 字节数据(BYTE)
  • 8位数据
  • 对应地址可以是偶地址(A₀=0)或奇地址(A₀=1)
(2) 字数据(WORD)⭐
  • Intel 8086是16位机,字长16位
  • 每个字数据存放在两个连续的字节单元
  • 高8位存放在高地址字节(高字节)
  • 低8位存放在低地址字节(低字节)
  • 低字节的地址作为这个字的地址(字地址)
类型 条件 说明
规则字 字地址为偶地址 一个总线周期即可存取
非规则字 字地址为奇地址 需要两个总线周期才能存取

⚠️ 易错点:字地址是低字节的地址(偶数地址),不是高字节的地址。

(3) 双字数据(DOUBLE WORD)
  • 占用4个连续字节单元
  • 规定最低字节地址为双字的地址
  • 用于存储指针数据

4. 存储器分块结构

8086系统将1MB内存分为两个块,每块容量为512KB

块名称 数据总线连接 地址组成 选择信号
高位字节块(奇地址块) D₁₅~D₈ 奇地址单元 BHE
低位字节块(偶地址块) D₇~D₀ 偶地址单元 A₀=0

5. BHE与A₀的组合操作⭐⭐

数据类型 BHE A₀ 操作 数据线
规则字 0 0 从偶地址开始读/写一个字 D₁₅~D₀
字节(高) 0 1 从奇地址开始读/写一字节 D₁₅~D₈
字节(低) 1 0 从偶地址开始读/写一字节 D₇~D₀
非规则字 0→1 1→0 第一周期高8位,第二周期低8位 分两次
无效 1 1 无效

💡 考试重点:BHE=0表示选中高字节块,A₀=0表示选中低字节块。两者同时为0时,可一次读写一个规则字。


3.2.2 存储器的分段结构和物理地址的形成(⭐⭐核心考点)

1. 存储器的分段结构

为什么要分段?

  • 8086 CPU内部寄存器均为16位
  • 8086指令中的地址码也只有16位
  • 但地址总线为20位,可寻址1MB空间
  • 16位寄存器无法直接表示20位地址 → 采用分段管理

分段规则:

  • 将1MB存储空间分成若干逻辑段
  • 每个逻辑段长度 ≤ 64KB
  • 段起始地址的低4位必须为0(即段起始地址必须是16的倍数)
  • 段起始地址的高16位称为段地址(段基地址)
  • 段内存储单元相对于段起始地址的偏移量称为偏移地址(Offset Address),也是16位

逻辑地址格式:

1
段地址 : 偏移地址

例:逻辑地址 7018H:5E7FH 表示段地址为7018H,偏移地址为5E7FH

2. 物理地址的形成⭐⭐⭐

物理地址计算公式:

物理地址=段地址×10H+偏移地址\boxed{物理地址 = 段地址 \times 10H + 偏移地址}

或等价地:

物理地址=段地址×16+偏移地址物理地址 = 段地址 \times 16 + 偏移地址

实现方式:

  • 8086 CPU有一个专门的20位地址加法器
  • 当CPU寻址某个存储单元时:
    1. 段地址左移4位(相当于乘以16)
    2. 再与16位偏移地址相加
    3. 形成20位物理地址

计算示例:

  • 逻辑地址 7018H:5E7FH
  • 物理地址 = 7018H × 10H + 5E7FH = 70180H + 5E7FH = 75FFFH

⚠️ 易错点:段地址 × 10H 是十六进制左移一位(相当于乘16),不是乘10!

3. 按信息特征分段存储

段类型 段寄存器 存储内容 默认选择规则
代码段 CS 程序的指令代码 取指令时自动选择
数据段 DS 数据、中间结果、最后结果 存取操作数时自动选择
附加段 ES 附加数据(串操作目的串) 存取操作数时可选择
堆栈段 SS 堆栈数据或状态信息 堆栈操作时自动选择

💡 考试重点:取指令用CS,堆栈操作用SS,存取数据默认用DS。


3.3 8086微处理器的内部结构(⭐⭐重点)

3.3.1 8086 CPU的内部结构

8086 CPU内部由两大功能部件组成:

1
2
3
4
5
6
7
8
9
10
11
12
┌─────────────────────────────────────────┐
│ 8086 CPU │
├──────────────────┬──────────────────────┤
│ EU │ BIU │
│ (执行部件) │ (总线接口部件) │
│ │ │
│ · 通用寄存器 │ · 段寄存器(CS/DS/SS/ES)│
│ · ALU │ · IP (指令指针) │
│ · 标志寄存器 │ · 地址加法器 │
│ · EU控制电路 │ · 指令队列(6字节) │
│ │ · 总线控制逻辑 │
└──────────────────┴──────────────────────┘

BIU和EU的关系⭐⭐

  • BIU和EU是既分工又合作的两个独立部件
  • BIU负责存取指令和数据
  • EU负责执行指令
  • 两者的操作是并行的(流水线技术)

BIU和EU的操作原则

  1. 每当8086 CPU指令队列中有两个空字节时,BIU就会自动寻找空闲的总线周期进行预取指令操作,直到指令队列填满为止
  2. 当指令队列缓冲器中存有一条以上的指令时,EU就立即开始执行
  3. 每当EU执行一条转移、调用或返回指令后,BIU清空指令队列,并从转移后的当前地址取出指令送EU执行

1. 总线接口部件(BIU)⭐

主要功能:

  1. 预取指令序列:自动进行预取指令操作,按先后次序存入指令缓冲寄存器
  2. 存取数据:配合EU,从指定的内存单元或I/O端口中取出或存放数据
  3. 将访问主存的逻辑地址转换为实际的物理地址

组成部件:

部件 位数 功能
地址加法器 20位 段地址左移4位 + 偏移地址 = 20位物理地址
段寄存器 16位 × 4 CS、DS、SS、ES,存放段地址
指令指针IP 16位 存放下一条将要执行的指令在代码段中的偏移地址
指令队列缓冲器 6字节 缓存BIU取出的待执行指令,先进先出方式工作
总线控制逻辑 将CPU内部总线和系统总线相连

⚠️ 易错点:IP存放的是下一条将要执行的指令的偏移地址,不是当前指令的地址。


2. 执行部件(EU)⭐

主要功能:

  1. 从指令队列中取出指令代码,由EU控制器进行译码
  2. 对操作数进行算术和逻辑运算,将结果特征存入标志寄存器
  3. 需要与主存储器或I/O端口传送数据时,向BIU发出命令

组成部件:

部件 位数 功能
ALU(算术逻辑运算单元) 16位 8位/16位二进制算术和逻辑运算,计算16位偏移量
通用寄存器 16位 × 8 4个数据寄存器(AX/BX/CX/DX) + 4个指针/变址寄存器(SP/BP/SI/DI)
标志寄存器FLAGS 16位 反映CPU运算的状态特征(实际使用9位)
数据暂存寄存器 协助ALU完成运算,暂存参加运算的数据
EU控制电路 从BIU取指令、译码、控制各部件执行

重要特性:

  • EU内部各部件通过16位内部总线连接
  • 这个内部总线与CPU外接的总线之间是隔离的,两个总线可以同时工作而互不干扰

3.3.2 8086 CPU的寄存器结构(⭐⭐⭐核心考点)

8086微处理器内部共有14个16位寄存器,按用途分为4类

1
2
3
4
5
6
7
8
9
10
11
┌─────────────────────────────────────────────────────┐
│ 8086 CPU 内部寄存器 │
├─────────────────┬───────────────────────────────────┤
│ 通用寄存器组 │ │
│ (8个16位) │ 数据寄存器(4个): AX, BX, CX, DX │
│ │ 地址指针与变址寄存器(4个): SP, BP, SI, DI │
├─────────────────┼───────────────────────────────────┤
│ 控制寄存器(2个) │ IP (指令指针), FLAGS (标志寄存器) │
├─────────────────┼───────────────────────────────────┤
│ 专用寄存器组 │ 段寄存器(4个): CS, DS, SS, ES │
└─────────────────┴───────────────────────────────────┘

1. 段寄存器(4个16位)⭐⭐

寄存器 全称 功能
CS Code Segment 存放当前正在运行的程序所在段的段地址
DS Data Segment 存放当前程序使用的数据所在段的段地址
SS Stack Segment 存放当前堆栈段的段地址
ES Extra Segment 存放当前程序使用的附加段的段地址(串操作时用作目的串地址)

💡 默认段寄存器选择规则

  • 取指令 → CS
  • 堆栈操作 → SS
  • 存取操作数 → DS(或ES,串操作时)
  • BP寻址 → 默认使用SS

2. 数据寄存器(4个16位)⭐⭐

数据寄存器用来暂时存放计算过程中所用到的操作数、结果或其他信息。

寄存器 全称 特殊功能
AX Accumulator 累加器,算术运算的主要寄存器;所有I/O指令都使用AX
BX Base 基址寄存器,计算存储器地址时用作基址;存放偏移地址
CX Count 计数寄存器,在循环(Loop)和串处理指令中用作隐含的计数器
DX Data 数据寄存器,双字运算时与AX组合存放双字数(DX存放高位字);I/O操作时存放端口地址

访问方式:

  • 每个寄存器可作为16位数据寄存器使用(AX、BX、CX、DX)
  • 也可作为8个8位数据寄存器使用(AH、AL、BH、BL、CH、CL、DH、DL)

⚠️ 易错点

  • IN和OUT指令只能访问AX和DX
  • DX+AX 组合用于双字运算
  • CX是循环和串操作的隐含计数器

3. 地址指针与变址寄存器(4个16位)⭐⭐

用来存放主存地址的段内偏移地址,用于形成20位物理地址。也可存放操作数,但只能以字(16位)为单位

寄存器 全称 功能
SP Stack Pointer 堆栈指针寄存器,指出堆栈段中栈顶的偏移地址
BP Base Pointer 基址指针寄存器,指出要处理的数据在堆栈段中的起始地址
SI Source Index 源变址寄存器,串操作中指向源串
DI Destination Index 目的变址寄存器,串操作中指向目的串

默认段寄存器配对:

寄存器 默认段寄存器 说明
SP SS 堆栈指针始终与SS配对
BP SS 凡包含BP的寻址方式,默认使用SS
SI DS 源变址默认使用数据段
DI ES 目的变址默认使用附加段(串操作时)

⚠️ 易错点:包含BP的寻址方式,如无特别说明,段地址由SS提供(不是DS)。即SS+BP。


4. 控制寄存器(2个16位)⭐⭐

(1) 指令指针寄存器 IP(Instruction Pointer)

  • 存放下一条将要执行的指令在代码段中的偏移地址
  • 程序员不可以直接使用
  • 每当执行一次取指令操作,它将自动加1("1"指1条指令,字节数不同IP加的字节数也不同)
  • 与CS结合,形成指向指令存放单元的物理地址:CS × 10H + IP

(2) 标志寄存器 FLAGS⭐⭐⭐

这是一个16位寄存器,但8086 CPU只用到9位

  • 6位状态标志位:CF、PF、AF、ZF、SF、OF
  • 3位控制标志位:DF、IF、TF

标志寄存器详解⭐⭐⭐

状态标志位(6个)

标志位 名称 功能
CF Carry Flag(进位标志位) 算术运算后,若最高位产生进位或借位,则CF=1
PF Parity Flag(奇偶标志位) 运算结果的低8位中1的个数为偶数则PF=1
AF Auxiliary Carry Flag(辅助进位标志位) 低4位向高4位(D₃→D₄)产生进位或借位,则AF=1
ZF Zero Flag(零标志位) 运算结果为0,则ZF=1
SF Sign Flag(符号标志位) 与运算结果的最高位相同(字节运算D₇,字运算D₁₅)
OF Overflow Flag(溢出标志位) 补码运算有溢出时OF=1(字节:-128~+127溢出;字:-32768~+32767溢出)

⚠️ 易错点

  • PF只看低8位,不是全部16位
  • SF与最高位相同,用补码运算时反映结果的符号特征
  • OF只在补码运算时才有意义

控制标志位(3个)

标志位 名称 功能
DF Direction Flag(方向标志位) 控制串操作方向:DF=0时地址递增,DF=1时地址递减。可用专用指令设置
IF Interrupt Enable Flag(中断允许标志位) IF=1允许响应可屏蔽中断,IF=0禁止。不影响NMI和内部中断。可用专用指令设置
TF Trap Flag(单步标志位/跟踪标志位) TF=1时CPU进入单步执行方式,每执行完一条指令产生一次内部中断。没有专用指令设置或清除

💡 考试重点

  • IF=1 允许可屏蔽中断,IF=0 禁止可屏蔽中断
  • IF的状态不影响非屏蔽中断请求(NMI)和CPU内部中断请求
  • TF用于调试,没有专用指令设置

3.4 总线的工作周期(⭐⭐重点)

基本概念

概念 定义
时钟周期(T状态) 一个时钟脉冲时间,也称为一个T周期,由计算机主频决定
总线周期 CPU通过总线对存储器或外设I/O端口进行一次访问所需要的时间
指令周期 一条指令从开始取指令到最后执行完毕所需的时间

关系: 一个指令周期由一个或若干个总线周期组成

时钟周期计算

时钟周期=1主频时钟周期 = \frac{1}{主频}

例:8086主频为5MHz,一个时钟周期 = 1/5MHz = 200ns

8086基本总线周期

一个基本的总线周期由4个时钟周期组成:

状态 名称 功能
T₁ 地址状态 CPU向总线发送地址信息
T₂ 数据传送 CPU从总线撤销发送地址,存储器准备要发送的数据
T₃ 数据传送 总线高四位提供状态信息,低16位提供数据信息
T₄ 数据传送 采样数据,完成操作

等待周期 T_W

  • 当慢速设备在3个T周期内无法完成数据读/写时
  • 外设向8086 CPU的READY引脚发出请求延长总线周期的信号
  • CPU在T₃与T₄之间插入等待周期T_W
  • T_W的个数与外部请求信号的持续时间长短有关
  • T_W期间,总线上的状态一直保持不变

空闲周期 T_I

  • 如果在一个总线周期后不立即执行下一个总线周期,即总线上无数据传输操作
  • 系统总线处于空闲状态,这时执行空闲周期T_I
  • T_I也以时钟周期T为单位
  • 两个总线周期之间插入几个T_I与CPU执行的指令有关

⚠️ 易错点

  • 数据传送必须在T₂~T₄这3个周期内完成
  • T₁期间输出地址,T₂开始撤销地址
  • 插入T_W是因为外设速度慢,不是CPU速度慢

3.5 8086中断系统(⭐重点)

8086中断系统可直接识别和处理256个不同的中断源,每个中断源有唯一的中断识别号(中断类型码0~255)。

3.5.1 8086中断类型

一、硬件中断(外部中断)

由处理器外部的硬件请求引起,8086有两条硬件中断请求信号线:

中断类型 信号线 特点
可屏蔽中断 INTR 受IF标志控制,CLI指令可屏蔽(IF=0),高电平有效
非屏蔽中断 NMI 不受IF影响,不能用CLI屏蔽,上升沿触发,优先级高于INTR

可屏蔽中断响应过程

  1. CPU在指令周期最后一个T状态采样INTR
  2. 若IF=1,CPU进入中断响应周期
  3. 8086发出两个连续中断响应信号(INTA)
  4. 外设通过数据总线送入中断类型码
  5. CPU根据类型码查中断向量表,转入中断服务程序

NMI中断:中断类型码固定为2,用于紧急故障处理(RAM奇偶校验错、I/O通道校验错等)

二、软件中断(内部中断)

由处理器内部事件产生,主要有以下几种:

中断类型 类型码 触发条件
除法错中断 0 执行DIV/IDIV时除数为0或商溢出
单步中断 1 TF=1时,每执行一条指令后产生
断点中断 3 执行INT 3指令
溢出中断 4 执行INTO指令且OF=1
INT n中断 n 执行INT n指令,用户可指定任意类型码

⚠️ TF标志没有专用指令设置,需通过PUSHF/POPF指令修改

三、中断优先权

8086规定中断优先权从高到低:

①除法错、溢出中断、INT n → ②NMI → ③INTR → ④单步中断

3.5.2 中断向量与中断向量表

中断向量:中断服务程序的入口地址(段地址CS + 偏移地址IP,共4字节)

中断向量表:存放256个中断源入口地址的存储区

  • 位于内存最低端:0000H~003FFH(1KB空间)
  • 每个中断类型码n对应地址:0000:4n(即n×4)
  • 低字节存放IP,高字节存放CS

重要示例

  • 类型码0(除法错)→ 地址 0000:0000
  • 类型码1(单步)→ 地址 0000:0004
  • 类型码2(NMI)→ 地址 0000:0008
  • 类型码8(时钟)→ 地址 0000:0020

3.5.3 中断处理过程

可屏蔽中断响应过程(6步):

  1. 外设→8259→INTR→CPU
  2. CPU检测IF标志,IF=1则响应
  3. CPU发出两个INTA脉冲
  4. 8259送中断类型码到数据总线
  5. CPU读取类型码,查向量表获取入口地址
  6. 保护断点(CS、IP、FLAGS压栈),转入中断服务程序

中断返回:执行IRET指令,从堆栈弹出IP、CS、FLAGS


3.6 8086微处理器外部基本引脚与工作模式

3.6.1 8086系统总线结构

8086 CPU设计为可工作在两种模式下:

  • 最小模式:由8086单一微处理器构成的小型系统(MN/MX引脚接+5V)
  • 最大模式:用于实现多处理机系统(MN/MX引脚接地)

考试重点:最大工作模式不要求,只需掌握最小模式

3.6.2 8086 CPU引脚信号

8086采用DIP封装,40条引脚,使用+5V电源。时钟频率:5MHz(8086)、8MHz(8086-1)、10MHz(8086-2)。

一、地址总线与数据总线(分时复用)

引脚 名称 功能
AD₁₅~AD₀ 地址/数据总线 T₁时刻输出地址,T₂~T₄传送数据(双向、三态)
A₁₉/S₆~A₁₆/S₃ 地址/状态总线 T₁时刻输出高4位地址,其余时间输出状态信息(输出、三态)
BHE/S₇ 高8位允许/状态 T₁时刻低电平有效,选中高字节块AD₁₅~AD₈

S₄S₃与段寄存器对应关系

S₄ S₃ 当前使用的段寄存器
0 0 ES(附加段)
0 1 SS(堆栈段)
1 0 CS(代码段)或I/O/中断向量寻址
1 1 DS(数据段)

二、控制总线

公用控制引脚

引脚 功能 有效电平
RD 读信号 低电平
WR 写信号 低电平
M/IO 存储器/IO控制 高=存储器,低=IO
READY 准备就绪 高电平(等待T_W周期)
TEST 测试信号 低电平(WAIT指令用)
INTR 可屏蔽中断请求 高电平
NMI 非屏蔽中断请求 上升沿
RESET 系统复位 高电平(至少4个时钟周期)
CLK 系统时钟

RESET复位后状态

  • FLAGS、IP、DS、SS、ES清零
  • CS设置为0FFFFH
  • CPU从FFFFF0H开始执行程序

三、最小模式控制引脚

引脚 功能
INTA 中断响应(输出,两个低电平脉冲)
ALE 地址锁存允许(输出,高电平有效,下降沿锁存)
DEN 数据允许(输出,低电平有效)
DT/R 数据发送/接收(输出,高=发送,低=接收)
HOLD 总线保持请求(输入,高电平有效)
HLDA 总线保持响应(输出,高电平有效)

3.6.3 最小模式下的8086系统配置

主要芯片

  • 8284:时钟发生器(产生CLK、RESET、READY信号)
  • 74LS373:地址锁存器(锁存AD总线上的地址)
  • 74LS245:数据收发器(双向数据缓冲)

时序:T₁→T₂→T₃→(T_W)→T₄

  • T₁:输出地址和BHE
  • T₂:撤销地址,开始数据传输
  • T₃:数据继续传输
  • T_W:等待周期(READY=0时插入)
  • T₄:结束总线周期

考试重点总结

⭐⭐⭐ 必考知识点

  1. 物理地址计算:物理地址 = 段地址 × 10H + 偏移地址
  2. 寄存器结构:14个寄存器的分类和各寄存器功能
  3. BIU和EU的功能及并行工作原理
  4. 标志寄存器FLAGS:6个状态标志 + 3个控制标志的含义
  5. BHE与A₀的组合:不同数据类型的操作方式

⭐⭐ 重要知识点

  1. 存储器分段结构:为什么分段、分段规则、逻辑地址格式
  2. 数据存储类型:字节、字(规则字/非规则字)、双字
  3. 总线周期:4个T状态的功能、T_W的插入条件
  4. 默认段寄存器配对:SP→SS, BP→SS, SI→DS, DI→ES

⭐ 了解知识点

  1. 8086基本参数(16位数据总线、20位地址总线、1MB寻址)
  2. 存储器分块结构(高位字节块、低位字节块)
  3. 指令队列的工作原理(6字节、先进先出)
  4. IP寄存器的自动加1特性

❌ 不考范围

  • 3.7.3 最大模式系统总线周期时序
  • 最大工作模式

易错点提醒

  1. 物理地址公式:段地址 × 10H(十六进制),不是 × 10(十进制)
  2. 规则字 vs 非规则字:字地址是低字节地址,偶地址为规则字
  3. BHE信号:BHE=0表示选中高字节块(有效),不是BHE=1
  4. PF标志:只看低8位中1的个数,不是全部16位
  5. IF标志:只影响可屏蔽中断,不影响NMI和内部中断
  6. BP寻址:默认使用SS段寄存器,不是DS
  7. IP寄存器:程序员不能直接访问,存放的是下一条指令的偏移地址
  8. T₁状态:输出地址;T₂开始撤销地址
  9. TF标志没有专用指令设置或清除
  10. 非规则字存取:需要两个总线周期

第4章 寻址方式与指令系统


一、指令系统概述

1.1 基本概念

概念 说明
程序 能够完成一个完整任务的一系列有序指令的集合
指令 指示计算机进行某种操作的命令,是用户使用与控制计算机运行的最小功能单位
指令系统 一台计算机所能执行的全部指令的集合
机器指令 用二进制编码表示的指令,计算机能直接理解和执行
汇编指令 用助记符(英文单词缩写)代替二进制指令形成的符号化指令

重要:汇编指令与机器指令是一一对应的,但计算机不能直接识别汇编指令,必须通过汇编程序翻译成机器指令。

1.2 指令格式

机器指令通常由两部分组成:

  • 操作码(Operation)字段:规定指令所执行的操作
  • 操作数(Operand)字段:也称为地址码,可能直接给出操作数,也可能描述操作数地址

1.3 指令字长度

类型 定义
指令字长度 一个指令字中包含二进制代码的位数
机器字长 计算机能直接处理的二进制数据的位数,决定运算精度
单字长指令 指令字长度等于机器字长
半字长指令 指令字长度等于半个机器字长
双字长指令 指令字长度等于两个机器字长

指令字结构分类

  • 等长指令字结构:各种指令字长度相等
  • 变字长指令字结构:各种指令字长度随指令功能而异

8086特点:采用变字长格式,指令由1~6字节组成。第1字节至少包含操作码,大多数指令的第2字节表示寻址方式,第3~6字节表示操作数。

1.4 8086汇编指令格式

1
标号:操作码  操作数;注释
  • 标号:可选,表示该指令在代码段中助记符形式的偏移地址
  • 注释:可选,对指令进行说明,不参加指令执行

按操作数个数分类

  • 双操作数指令:如 ADD AX, BX(格式:操作码 DST, SRC
  • 单操作数指令:如 INC AXMUL BL
  • 无操作数指令:如 HLTXLAT

⚠️ 易错点:8086规定,对于双操作数指令,不能两个操作数同为存储器操作数(串操作指令除外)。


二、8086寻址方式

寻址方式:形成指令地址或操作数地址的方式。

8086 CPU的寻址分为两类:

  • 指令寻址方式:确定下一条将要执行指令地址的方法
  • 数据寻址方式:形成操作数地址的方法

2.1 数据寻址方式

(1)立即寻址

定义:操作数包含在指令中,操作数(地址码)字段直接给出操作数本身。

汇编格式

1
操作码 DST, 数字表达式

特点

  • 操作数是指令的一部分,不能修改
  • 执行速度快
  • 只能适用于操作数固定的情况
  • 立即数只能用于源操作数,不能用于目标操作数

示例

1
2
3
4
MOV AX, 251      ; 将十进制数251送入AX
MOV AL, '5' ; 将'5'的ASCII码送入AL
MOV AL, 0E8H ; 将8位二进制数0E8H送入AL
MOV AX, 2346H ; 将16位二进制数2346H送入AX

(2)寄存器寻址

定义:操作数在CPU内部的寄存器中,指令中指定寄存器名。

汇编格式

1
操作码 DST, SRC    ; DST与SRC其中一个或两个同时为寄存器名

可用寄存器

  • 16位通用寄存器:AX、BX、CX、DX、SI、DI、SP、BP
  • 8位通用寄存器:AH、AL、BH、BL、CH、CL、DH、DL
  • 段寄存器:CS、DS、SS、ES
  • FLAGS标志寄存器

优点

  • 地址码短,缩短指令长度,节省存储空间
  • 从寄存器取数比从存储器取数速度快

示例

1
2
MOV AX, CX    ; 将CX内容送入AX
MOV DL, BL ; 将BL内容送入DL

(3)存储器寻址

物理地址计算公式

1
物理地址 = 段地址 × 10H + 段内偏移地址(有效地址EA)

有效地址(EA):操作数在内存中的偏移地址
形式地址/DISP:指令地址码字段给出的地址

存储器寻址方式包括以下5种:

① 直接寻址

EA = DISP(位移量直接给出)

汇编格式

1
2
3
地址表达式
[地址表达式]
[数字表达式]

默认段寄存器:DS

示例

1
2
MOV AX, [1000H]    ; 物理地址 = DS × 10H + 1000H
; 假设DS=3000H,则物理地址 = 30000H + 1000H = 31000H

段超越前缀(访问其他段):

1
2
MOV AL, ES:TABLE        ; 使用ES段
MOV AL, ES:[1000H] ; 使用ES段
② 寄存器间接寻址

EA = [BX] / [BP] / [SI] / [DI]

汇编格式

1
[基址寄存器名或变址寄存器名]

默认段规则

  • 使用 BX、SI、DI → 默认在数据段(DS)
  • 使用 BP → 默认在堆栈段(SS)

示例

1
2
3
MOV AX, [BX]      ; 物理地址 = DS × 10H + BX
MOV AL, [BP] ; 物理地址 = SS × 10H + BP
MOV AX, ES:[DI] ; 物理地址 = ES × 10H + DI(段超越)

用途:一般用于访问表格或字符串,通过修改寄存器内容访问下一数据项。

③ 寄存器相对寻址

EA = [BX] / [BP] / [SI] / [DI] + DISP

汇编格式

1
2
位移量[基址寄存器名或变址寄存器名]
位移量 ± 基址寄存器名或变址寄存器名

默认段规则:同寄存器间接寻址

示例

1
2
3
MOV AX, 20H[SI]         ; 物理地址 = DS × 10H + SI + 20H
MOV CL, [BP + 2000H] ; 物理地址 = SS × 10H + BP + 2000H
MOV AX, TABLE[SI] ; 物理地址 = DS × 10H + TABLE + SI

用途:用于表格或数组数据的访问操作,将首地址作为位移量,用寄存器记录下标。

④ 基址加变址寻址

EA = [BX] / [BP] + [SI] / [DI]

汇编格式

1
2
[基址寄存器名][变址寄存器名]
[基址寄存器名 + 变址寄存器名]

示例

1
2
MOV AX, [BX][SI]     ; 物理地址 = DS × 10H + BX + SI
MOV AX, [BX + SI] ; 物理地址 = DS × 10H + BX + SI(等价)

优点:两个寄存器内容都可修改,比寄存器相对寻址更灵活。

⑤ 相对基址加变址寻址

EA = [BX] / [BP] + [SI] / [DI] + DISP

汇编格式

1
2
位移量[基址寄存器][变址寄存器]
[基址寄存器 + 变址寄存器 + 位移量]

示例

1
2
3
MOV AL, TABLE[BX][SI]    ; 等价于以下两种写法
MOV AL, TABLE[BX + SI]
MOV AL, [TABLE + BX + SI]

(4)I/O端口寻址

① I/O直接端口寻址
  • 端口地址以8位立即数方式在指令中直接给出
  • 端口号范围:0~255
1
IN AL, n      ; 将n号端口的数据输入AL
② 间接端口寻址
  • 16位I/O端口地址必须放在DX寄存器
  • 端口号范围:0~65535
1
OUT DX, AL    ; 将AL内容输出到DX指定的端口

2.2 指令寻址方式

确定下一条将要执行指令地址的方法。

(1)顺序寻址方式

  • 指令地址在内存中顺序存储
  • 8086中由 CS:IP 形成指令地址
  • CPU每取一条指令,IP自动+1

(2)跳转寻址方式

下一条指令地址不是由IP+1顺序给出,而是由当前执行的指令给出。

转移类型

  • 段内转移:在同一逻辑段内,只改变IP
  • 段间转移:在不同逻辑段,同时改变CS和IP
① 段内直接寻址

汇编格式

1
2
3
指令名 SHORT 目标地址标号    ; 段内短转移(8位位移量,范围-128~+127)
指令名 NEAR PTR 目标地址标号 ; 段内近转移(16位位移量,范围-32768~+32767)
指令名 目标地址标号 ; 段内近转移(默认16位)

特点:位移量不随程序加载位置改变,可实现程序重定位

⚠️ 注意:条件转移指令的位移量只能是8位,无条件转移指令的位移量可以是8位或16位。

② 段内间接寻址

汇编格式

1
2
3
指令名 16位寄存器名
指令名 WORD PTR 存储器寻址方式
指令名 存储器寻址方式

执行过程:按指定寻址方式找到一个字,送入IP寄存器,CS不变。

③ 段间直接寻址

汇编格式

1
2
指令名 FAR PTR 目标地址标号
指令名 段地址:段偏移地址

执行过程:取第1个字送IP,取第2个字送CS。

④ 段间间接寻址

汇编格式

1
指令名 DWORD PTR 存储器寻址方式

执行过程:从存储器相继两个字中,第1个字送IP,第2个字送CS。


2.3 寻址方式总结表

寻址方式 有效地址EA 默认段寄存器
立即寻址 无(操作数在指令中)
寄存器寻址 无(操作数在寄存器中)
直接寻址 EA = DISP DS
寄存器间接寻址 EA = [BX]/[SI]/[DI] DS
寄存器间接寻址 EA = [BP] SS
寄存器相对寻址 EA = [BX]/[SI]/[DI] + DISP DS
寄存器相对寻址 EA = [BP] + DISP SS
基址加变址寻址 EA = [BX]/[BP] + [SI]/[DI] DS(BX/SI/DI)或 SS(BP)
相对基址加变址寻址 EA = [BX]/[BP] + [SI]/[DI] + DISP DS(BX/SI/DI)或 SS(BP)
I/O直接端口寻址 端口号n(8位)
I/O间接端口寻址 DX(16位端口号)

三、8086指令系统

Intel 8086 CPU提供133条基本指令,按功能分为7类:


3.1 数据传送指令

(1)通用数据传送指令 MOV

格式

1
MOV DST, SRC    ; DST ← SRC

DST:寄存器或存储器
SRC:寄存器、存储器或立即数

使用限制

  1. 两个操作数不能同为存储器操作数
  2. CS不能作为目标操作数
  3. 段寄存器之间不能互相传送
  4. 立即数不能直接送入段寄存器
  5. MOV指令不影响标志位

应用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
; 立即数传送
MOV AL, 12H ; 8位传送
MOV AX, 3456H ; 16位传送

; 寄存器之间传送
MOV AX, BX ; 16位传送
MOV CL, BH ; 8位传送

; 寄存器与存储器之间传送
MOV AX, [BX] ; 从存储器取16位数据到AX
MOV [SI], DH ; 将8位数据存入存储器

; 段寄存器传送
MOV DS, AX
MOV ES, [SI]

注意:MOV不能直接实现两个存储单元之间的数据传送,需要借助通用寄存器通过两条指令完成。

(2)堆栈操作指令

堆栈特点

  • 按"后进先出"(LIFO)原则存取
  • 8086堆栈设置在堆栈段SS
  • SP作为堆栈指针,堆栈必须按字操作
  • SP初始值指向堆栈中栈底+1单元的偏移地址

PUSH指令

1
PUSH SRC    ; SP ← SP-2, (SP+1:SP) ← SRC

POP指令

1
POP DST     ; DST ← (SP+1:SP), SP ← SP+2

⚠️ 易错点:入栈时SP先减2再存数据;出栈时先取数据SP再加2。

(3)地址传送指令

指令 功能
LEA REG, M REG ← M的偏移地址(有效地址)
LDS REG, M REG ← M的第一个字,DS ← M的第二个字
LES REG, M REG ← M的第一个字,ES ← M的第二个字

(4)标志寄存器传送指令

指令 功能
LAHF AH ← FLAGS低8位
SAHF FLAGS低8位 ← AH
PUSHF SP ← SP-2, (SP+1:SP) ← FLAGS
POPF FLAGS ← (SP+1:SP), SP ← SP+2

(5)数据交换指令

1
XCHG DST, SRC    ; DST ↔ SRC(两个操作数内容互换)

(6)换码指令

1
XLAT    ; AL ← (BX + AL)

用于查表操作,将AL中的值作为表偏移,BX为表首地址。

(7)输入/输出指令

1
2
IN  AX, DX     ; 输入
OUT DX, AX ; 输出

3.2 算术运算指令

指令 功能 说明
ADD DST, SRC DST ← DST + SRC 加法
ADC DST, SRC DST ← DST + SRC + CF 带进位加法
INC DST DST ← DST + 1 加1
SUB DST, SRC DST ← DST - SRC 减法
SBB DST, SRC DST ← DST - SRC - CF 带借位减法
DEC DST DST ← DST - 1 减1
NEG DST DST ← 0 - DST 求补
CMP DST, SRC DST - SRC(不保存结果) 比较
MUL SRC 无符号乘法 AL×SRC→AX(8位)或AX×SRC→DX:AX(16位)
IMUL SRC 有符号乘法 同MUL
DIV SRC 无符号除法 AX÷SRC→AL(商),AH(余数)(8位)
IDIV SRC 有符号除法 同DIV

乘法指令隐含操作数

  • 8位乘法:AL × SRC → AX
  • 16位乘法:AX × SRC → DX:AX

除法指令隐含操作数

  • 8位除法:AX ÷ SRC → AL(商),AH(余数)
  • 16位除法:DX:AX ÷ SRC → AX(商),DX(余数)

⚠️ 易错点:除法运算时,若商超过目标寄存器范围会产生溢出中断。


3.3 逻辑运算指令

指令 功能 说明
AND DST, SRC DST ← DST ∧ SRC 逻辑与
OR DST, SRC DST ← DST ∨ SRC 逻辑或
XOR DST, SRC DST ← DST ⊕ SRC 异或
NOT DST DST ← ¬ DST 逻辑非(取反)
TEST DST, SRC DST ∧ SRC(不保存结果) 测试

应用技巧

  • AND:用于屏蔽(清零)某些位
  • OR:用于置位某些位
  • XOR:用于取反某些位;XOR AX, AX 可将AX清零
  • TEST:用于检测某些位的状态,配合条件转移指令使用

3.4 移位指令

指令 功能 说明
SHL DST, n 逻辑左移 最高位→CF,最低位补0
SHR DST, n 逻辑右移 最低位→CF,最高位补0
SAL DST, n 算术左移 同SHL
SAR DST, n 算术右移 最低位→CF,最高位保持不变
ROL DST, n 循环左移 最高位→最低位,同时→CF
ROR DST, n 循环右移 最低位→最高位,同时→CF
RCL DST, n 带进位循环左移 CF→最低位,最高位→CF
RCR DST, n 带进位循环右移 CF→最高位,最低位→CF

移位次数n:可以是立即数1或CL寄存器中的值。

乘2/除2技巧

  • 左移n位 = 乘以2^n
  • 逻辑右移n位 = 无符号数除以2^n
  • 算术右移n位 = 有符号数除以2^n

3.5 串操作指令

指令 功能 说明
MOVSB/MOVSW 串传送 字节/字传送
CMPSB/CMPSW 串比较 字节/字比较
SCASB/SCASW 串扫描 AL/AX与串元素比较
LODSB/LODSW 串装入 将串元素装入AL/AX
STOSB/STOSW 串存储 将AL/AX存入串中

配合使用的前缀

  • REP:重复执行,直到CX=0
  • REPE/REPZ:相等/为零时重复
  • REPNE/REPNZ:不等/不为零时重复

方向标志DF

  • DF=0:正向(地址递增),用CLD指令设置
  • DF=1:反向(地址递减),用STD指令设置

串操作中的寄存器约定

  • DS:SI → 源串地址
  • ES:DI → 目的串地址
  • CX → 计数器
  • AL/AX → 扫描值或装入/存储值

3.6 程序控制指令

(1)无条件转移指令

1
JMP 目标地址    ; 无条件转移到目标地址

(2)条件转移指令(均为段内短转移,位移量8位)

指令 条件 说明
JZ/JE ZF=1 相等/为零转移
JNZ/JNE ZF=0 不等/不为零转移
JS SF=1 负数转移
JNS SF=0 非负数转移
JO OF=1 溢出转移
JNO OF=0 无溢出转移
JC/JB CF=1 进位/低于转移
JNC/JNB CF=0 无进位/不低于转移
JA/JNBE CF=0且ZF=0 高于/不低于等于转移
JAE/JNB CF=0 高于等于/不低于转移
JBE/JNA CF=1或ZF=1 低于等于/不高于转移

无符号数比较:使用 JA、JAE、JB、JBE
有符号数比较:使用 JG、JGE、JL、JLE

(3)循环指令

1
2
3
4
LOOP 标号      ; CX ← CX-1,若CX≠0则转移
LOOPE/LOOPZ ; CX ← CX-1,若CX≠0且ZF=1则转移
LOOPNE/LOOPNZ ; CX ← CX-1,若CX≠0且ZF=0则转移
JCXZ ; 若CX=0则转移

(4)子程序调用与返回

1
2
CALL 过程名    ; 调用子程序(压入返回地址,跳转到过程)
RET ; 返回(弹出返回地址)

段内CALL:只压入IP
段间CALL:压入CS和IP

(5)中断指令

1
2
INT n          ; 软中断,中断类型号n
IRET ; 中断返回

3.7 处理器控制指令

指令 功能
CLC CF ← 0(清进位标志)
STC CF ← 1(置进位标志)
CMC CF ← ¬CF(进位标志取反)
CLD DF ← 0(清方向标志,正向)
STD DF ← 1(置方向标志,反向)
CLI IF ← 0(关中断)
STI IF ← 1(开中断)
NOP 空操作(消耗一个时钟周期)
HLT 停机(等待中断或复位)

四、考试重点与易错点

4.1 寻址方式判断

判断方法:看操作数的形式

  • 操作数是数字 → 立即寻址
  • 操作数是寄存器名 → 寄存器寻址
  • 操作数在[]中 → 存储器寻址(需进一步判断具体类型)
  • 操作数有段超越前缀 → 注意段寄存器的选择

4.2 重要公式

1
物理地址 = 段地址 × 10H + 有效地址(EA)

4.3 易错点汇总

易错点 正确理解
MOV指令两个操作数都为存储器 不允许(除串操作指令外)
立即数送段寄存器 不允许(如MOV DS, 1000H是错误的)
CS作为目标操作数 不允许
段寄存器之间直接传送 不允许(如MOV DS, ES是错误的)
PUSH/POP操作字节数 入栈SP-2,出栈SP+2(按字操作
BP寻址的默认段 堆栈段SS(不是数据段DS)
条件转移指令位移量 只能是8位(-128~+127)
乘法隐含操作数 8位:AL×SRC→AX;16位:AX×SRC→DX:AX
除法溢出 商超过目标寄存器范围会产生中断

4.4 读程序技巧

  1. 确定寻址方式:根据操作数形式判断
  2. 计算物理地址:段地址×10H + EA
  3. 注意段寄存器默认规则:BX/SI/DI→DS,BP→SS
  4. 注意数据宽度:字节操作还是字操作
  5. 注意字节顺序:8086采用小端存储(低字节在低地址)

4.5 标志位判断

标志位 受影响的指令 含义
CF 算术运算、移位指令 进位/借位标志
ZF 算术/逻辑运算 零标志
SF 算术/逻辑运算 符号标志
OF 算术运算 溢出标志(有符号数)
PF 算术/逻辑运算 奇偶标志
AF 算术运算 辅助进位标志

五、4.5 本章实验项目

本节内容为自学部分,不在考试范围内。


第5章 汇编语言程序设计

一、汇编语言概述

1.1 汇编语言的特点

  • 定义:计算机系统底层机器语言的符号表示形式,用助记符代替二进制指令代码
  • 优点
    • 执行速度快
    • 程序短小
    • 可以直接控制硬件
    • 可以方便编译
    • 辅助计算机工作者掌握计算机体系结构

1.2 汇编语言程序开发流程

1
编辑程序 → MyProg.asm → 汇编程序 → MyProg.obj → 链接程序 → MyProg.exe
  • 汇编程序功能:将汇编语言源程序转换为目标程序,检查语法错误,进行数制转换,计算表达式,分配内存空间
  • 目前主要使用宏汇编程序(MASM)

二、汇编语言程序基本格式(5.1)

2.1 程序结构

汇编语言源程序采用分段结构,一般由3种程序段组成:

  • 代码段(CODE SEGMENT)
  • 数据段(DATA SEGMENT)
  • 堆栈段(STACK SEGMENT)

2.2 基本格式

1
2
3
4
5
6
7
8
9
10
11
12
13
NAME1 SEGMENT    ; 段的起始
语句1
语句2
...
NAME1 ENDS ; 段的结束

NAME2 SEGMENT
语句1
语句2
...
NAME2 ENDS

END ; 源程序结束

2.3 语句分类

  1. 指令语句:与机器指令一一对应
  2. 伪指令语句:在汇编过程中起作用,不生成目标代码
  3. 宏指令语句:预先定义的指令代码序列(考试不要求)

2.4 语句格式

1
2
指令语句:[标号:] 操作符 操作数 [; 注释]
伪指令语句:[名字] 伪指令符 参数 [; 注释]

三、汇编语言中的数据(5.2)

3.1 常量(Constant)

3.1.1 数值常量

进制 结尾字母 示例
二进制 B 00101100B
八进制 O或Q 1777O
十进制 D(可省略) 178D
十六进制 H 0FFFFH

⚠️ 易错点:十六进制数第一个字符是A~F时,前面必须加0,如0FFFFH

3.1.2 字符串常量

  • 用单引号括起来的字符
  • 存储的是ASCII码
  • 例:'A’的码值是41H,'AB’的码值是4142H

3.1.3 符号常量

用符号名代替常量

1
2
COUNT EQU 3
COUNT = 3

3.2 变量(Variable)

3.2.1 变量的定义

格式[变量名] 伪指令 表达式 [,表达式 ...]

数据定义伪指令

伪指令 功能 字节数
DB 定义字节 1字节(8位)
DW 定义字 2字节(16位)
DD 定义双字 4字节(32位)
DF 定义6字节 6字节(48位)
DQ 定义8字节 8字节(64位)
DT 定义10字节 10字节

3.2.2 表达式类型

  1. 数值表达式DATA1 DB 25,25H,10011010B
  2. ? 表达式:表示不预置初值 DATA2 DB ?,?
  3. 字符串表达式DATA4 DB 'AB','CD'
  4. DUP表达式DATA3 DB 2 DUP(2 DUP(4),15)

DUP格式N DUP (EXP),N为重复次数,EXP为表达式

3.2.3 变量的属性

  1. 段属性(SEGMENT):变量所在段的起始地址(16位)
  2. 偏移属性(OFFSET):变量与段起始地址之间的字节数
  3. 类型属性(TYPE):变量的字节数
    • BYTE(DB) = 1
    • WORD(DW) = 2
    • DWORD(DD) = 4
    • FWORD(DF) = 6
    • QWORD(DQ) = 8
    • TBYTE(DT) = 10

3.3 标号(Label)

3.3.1 定义

  • 标号是某条指令所在内存单元地址的符号表示
  • 在代码段中定义,后面跟着冒号
  • 可用LABEL或EQU伪指令定义

3.3.2 标号的属性

  1. 段属性:标号的段地址总是在CS寄存器中
  2. 偏移属性:标号与所在段起始地址之间的字节数
  3. 类型属性
    • NEAR:段内引用(16位段,指针长度2B)
    • FAR:段外引用(16位段,指针长度4B)

四、运算符与表达式(5.3)

4.1 算术运算符

+(加)、-(减)、*(乘)、/(除)、MOD(取模)

⚠️ 注意:两个地址相加、相乘、相除没有意义

4.2 逻辑运算符

AND(与)、OR(或)、XOR(异或)、NOT(非)

  • 只能用于数值表达式,不能用于地址表达式
  • 逻辑运算符在汇编阶段完成,逻辑运算指令在执行阶段完成

4.3 关系运算符

EQ(相等)、LT(小于)、LE(小于或等于)、GT(大于)、GE(大于或等于)、NE(不等于)

  • 结果:关系成立→0FFFFH,不成立→0000H

4.4 取值运算符(分析运算符)

运算符 功能
SEG 返回变量和标号的段地址
OFFSET 返回变量和标号在段内的偏移量
TYPE 返回变量和标号的类型(数字)
LENGTH 返回DUP定义的变量个数
SIZE 返回变量占用的字节数(=LENGTH×TYPE)

TYPE返回值表

类型 返回值
字节数据 1
字数据 2
双字数据 4
NEAR指令单元 -1
FAR指令单元 -2

示例

1
2
SCORE DW 30 DUP(0)
; TYPE SCORE = 2, LENGTH SCORE = 30, SIZE SCORE = 60

4.5 合成运算符(修改属性运算符)

4.5.1 PTR运算符

格式类型 PTR 表达式

  • 类型可以是BYTE、WORD、DWORD、NEAR、FAR
1
2
NUM DB 1,3,5,7
MOV AX, WORD PTR NUM ; 将NUM临时改为字类型

4.5.2 THIS运算符

格式新符号名 EQU THIS 类型

1
2
3
DNUM EQU THIS WORD
NUM DB 1,3,5,7
; DNUM指向NUM,但类型为WORD

五、伪指令(5.4)

5.1 符号定义伪指令

5.1.1 赋值伪指令EQU

格式符号名 EQU 表达式

  • 不允许重复定义
  • 解除定义需用PURGE

5.1.2 等号伪指令=

  • 允许重复定义
1
2
EMP = 7
EMP = EMP + 1 ; 合法,EMP变为8

5.1.3 类型定义伪指令LABEL

格式变量 LABEL 类型标号 LABEL 类型

1
2
3
DATW LABEL WORD
DATB DB 20 DUP(0)
; DATW和DATB指向同一地址,但类型不同

5.1.4 解除定义伪指令PURGE

格式PURGE 符号1,符号2,...,符号N

5.2 段定义伪指令

5.2.1 SEGMENT和ENDS

格式

1
2
3
段名 SEGMENT [定位类型][组合类型]['类别']
...
段名 ENDS

定位类型

类型 说明
PARA 默认,段起始地址是16的倍数
PAGE 段起始地址是256的倍数
WORD 段起始地址是偶数
BYTE 段可从任何地址开始

组合类型

类型 说明
NONE 默认,各段独立
PUBLIC 同名同类别段链接成一个物理段
STACK 堆栈段

5.2.2 ASSUME伪指令

格式ASSUME 段寄存器:段名[,段寄存器:段名,...]

⚠️ 重要:ASSUME只建立对应关系,不装入段地址,DS/ES/SS需用MOV指令装入

1
2
3
ASSUME CS:CODE, DS:DATA
MOV AX, DATA
MOV DS, AX

5.3 过程定义伪指令(PROC和ENDP)

格式

1
2
3
4
过程名 PROC [NEAR/FAR]
...
RET
过程名 ENDP
  • NEAR:段内调用(默认)
  • FAR:段间调用
  • 过程中至少应有一条RET指令

5.4 程序标题伪指令TITLE

格式TITLE 文本

  • 文本长度不超过6个字符

5.5 地址计数器$

  • 在指令中:表示当前指令的首地址
  • 在伪指令中:表示当前变量的位置
1
2
JNE $ + 6        ; 转向地址是JNE指令首地址加6
ARRAY DW 1,2,$+4,3,4,$+4

六、程序基本结构设计

6.1 顺序结构

按指令书写顺序依次执行

6.2 分支结构

使用条件跳转指令实现:

  • CMP 比较指令
  • JE/JZ 相等/为零跳转
  • JNE/JNZ 不相等/不为零跳转
  • JG/JGE 大于/大于等于
  • JL/JLE 小于/小于等于

6.3 循环结构

  • LOOP指令:CX计数,CX≠0时循环
  • LOOPE/LOOPZ:相等时循环
  • LOOPNE/LOOPNZ:不相等时循环

七、子程序设计

7.1 过程定义

使用PROC/ENDP伪指令定义子程序

7.2 调用与返回

  • CALL:调用子程序,压入返回地址
  • RET:返回,弹出返回地址

7.3 堆栈操作(考试重点)

1
2
PUSH AX    ; SP←SP-2, (SP)←AX
POP AX ; AX←(SP), SP←SP+2

⚠️ 易错点

  • 堆栈操作都是字操作
  • PUSH顺序:先减SP再存数据
  • POP顺序:先取数据再加SP

八、系统功能调用(DOS中断)

8.1 调用格式

1
2
3
MOV AH, 功能号
MOV DX, 参数地址
INT 21H

8.2 常用功能号

功能号 功能
01H 键盘输入字符
02H 显示字符
09H 显示字符串
4CH 程序终止

8.3 程序结束

1
2
MOV AH, 4CH
INT 21H

九、DEBUG调试(考试重点)

9.1 常用命令

命令 功能
R 显示/修改寄存器
D 显示内存内容
E 修改内存内容
U 反汇编
T 单步执行
G 运行程序
A 汇编命令

9.2 堆栈操作调试

⚠️ 考试重点:画出堆栈区和SP内容变化的过程示意图


十、考试重点与易错点

10.1 重点题型

  1. 读程序题:分析程序功能,追踪寄存器/内存变化
  2. 写程序题:根据要求编写完整汇编程序
  3. 堆栈操作题:PUSH/POP操作过程分析

10.2 易错点提醒

  1. 十六进制数:以A~F开头必须加0,如0FFFFH
  2. EQU vs =:EQU不允许重复定义,=允许
  3. ASSUME:只建立对应关系,不装入段地址
  4. PTR运算符:临时改变类型,不改变实际存储
  5. 堆栈操作:都是字操作,注意SP变化方向
  6. TYPE运算符:标号返回-1(NEAR)或-2(FAR)
  7. DUP嵌套2 DUP(2 DUP(4),15) 需正确计算

10.3 程序模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DATA SEGMENT
; 数据定义
DATA ENDS

STACK1 SEGMENT STACK
DB 100 DUP(?)
STACK1 ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK1
START:
MOV AX, DATA
MOV DS, AX

; 程序主体

MOV AH, 4CH
INT 21H
CODE ENDS
END START

附录:常用伪指令速查表

伪指令 功能 格式示例
DB 定义字节 VAR1 DB 10
DW 定义字 VAR2 DW 1000
DD 定义双字 VAR3 DD 12345678H
DUP 重复定义 ARR DB 10 DUP(0)
EQU 赋值 COUNT EQU 10
= 赋值(可重复) X = 5
SEGMENT 段开始 DATA SEGMENT
ENDS 段结束 DATA ENDS
PROC 过程开始 MAIN PROC NEAR
ENDP 过程结束 MAIN ENDP
ASSUME 段寄存器指派 ASSUME CS:CODE
END 程序结束 END START
OFFSET 取偏移地址 MOV AX, OFFSET VAR
SEG 取段地址 MOV BX, SEG VAR
TYPE 取类型值 MOV AL, TYPE VAR
PTR 修改类型 MOV AX, WORD PTR VAR
$ 当前地址 JMP $+5

第6章 半导体存储器

考试范围:6.1~6.3(6.4虚拟存储器、6.5 Intel 80x86内存管理模式不考不教)


一、存储器概述(6.1)

1.1 存储器的基本概念

  • 存储器:计算机系统中的记忆设备,用来存放程序和数据
  • 存储位(存储元):存储器中最小的存储单位,存储一位二进制代码
  • 存储单元:由若干存储元组成,通常为8位(1字节)
  • 存储器:由多个存储单元组成

1.2 存储器的分类

按存储介质分类

类型 特点
半导体存储器 体积小、功耗低、存取时间短;易失性(断电丢失)
磁表面存储器 非易失性,包括磁盘、磁带等
光盘存储器 非易失性,记录密度高、耐用性好

按存取方式分类(⭐重点)

类型 全称 特点
RAM Random Access Memory 可读/写,存取时间与物理位置无关
ROM Read Only Memory 只能读出,不能随意写入

RAM进一步分类:

  • SRAM(静态RAM):用双稳态触发器存储信息,不需要刷新
  • DRAM(动态RAM):用电容存储信息,需要定期刷新

ROM进一步分类:

  • MROM(掩膜ROM):出厂时写入,不能修改
  • PROM(可编程ROM):可一次性写入
  • EPROM(可擦除PROM):紫外线擦除,可多次编程
  • EEPROM(电可擦除PROM):电擦除,可在线修改
  • 快擦写存储器(Flash Memory):断电不丢失,可擦写

按在计算机中的作用分类

类型 特点
主存储器 与CPU直接交换信息,速度快、容量小、价格高
辅助存储器 不能与CPU直接交换,速度慢、容量大、价格低
高速缓冲存储器(Cache) 位于CPU和主存之间,匹配速度

1.3 存储器的性能指标(⭐重点)

1. 存储器容量

存储器芯片容量=存储单元数×位数存储器芯片容量 = 存储单元数 \times 位数

  • 微型计算机以**字节(8位)**为基本存储单元
  • 常用单位:KB、MB、GB
  • 芯片结构:×1、×4、×8位

例: Intel 2114容量为1K×4位,6264为8K×8位

2. 存取周期

  • 实现一次完整读/写操作的时间
  • 连续启动两次读/写操作的最短时间间隔
  • 双极型:几~几百纳秒;MOS型:十几~几百纳秒

3. 功耗

  • MOS型功耗小于双极型
  • 例:HM62256功耗为40~200mW

4. 可靠性

  • 对电磁场、温度变化等因素的抵抗能力

5. 集成度

  • MOS型 > 双极型
  • 动态存储器 > 静态存储器

1.4 存储器的分级结构(⭐重点)

三级存储体系:

1
2
3
4
5
6
7
CPU

Cache(高速缓冲存储器) ← 速度最快,容量最小

主存(主存储器) ← 速度适中,容量适中

外存(辅助存储器) ← 速度最慢,容量最大

设计目标: 解决容量、速度、成本三者之间的矛盾

  • Cache-主存系统:利用Cache高速存取,整体速度接近Cache
  • 主存-外存系统:增加存储容量,整体容量接近外存

二、随机读/写存储器(6.2)

2.1 静态MOS存储器(SRAM)

1. 基本存储元(六管SRAM)

电路组成:

  • VT₁~VT₄:双稳态触发器(存储信息)
  • VT₅、VT₆:门控管(行选择线X控制)
  • VT₇、VT₈:门控管(列选择线Y控制)

工作原理:

  • 读出:X、Y选择线均为高电平 → VT₅~VT₈导通 → 数据输出
  • 写入:X、Y选择线均为高电平 → 外部数据写入触发器
  • 特点:非破坏性读出,易失性(断电丢失)

2. SRAM的组成

存储矩阵结构:

  • 64×64 = 4096个存储元组成存储矩阵
  • X地址译码器:提供64根行选择线
  • Y地址译码器:提供64根列选择线
  • I/O电路:数据输入/输出

容量扩展:

  • ×1结构:1个I/O电路
  • ×4结构:4个I/O电路
  • ×8结构:8个I/O电路

3. SRAM的读/写过程

读出过程:

  1. 地址码A₀~A₁₁加到地址输入端
  2. 经X、Y译码器译码,选中存储单元
  3. 数据出现在I/O电路输入端
  4. 送读/写控制信号(R/写=1或RD=0)和片选信号(CS=0)
  5. 输出缓冲寄存器三态门打开,数据送到DB上

写入过程:

  1. 地址码加到地址输入端,选中存储单元
  2. 将要写入的数据放在DB上
  3. 加片选信号CS=0和写入信号R/写=0或WR=0
  4. 三态门使DB数据进入输入电路,写入存储单元

4. 常用SRAM芯片(⭐重点)

芯片 容量 地址线 数据线 特点
Intel 2114 1K×4位 A₀~A₉(10根) I/O₁~I/O₄(4根) CS=0选中,WE控制读写
Intel 6264 8K×8位 A₀~A₁₂(13根) D₀~D₇(8根) CE选中,WE/OE控制

Intel 2114引脚功能:

  • A₀~A₉:地址线(10根,寻址1K=1024单元)
  • I/O₁~I/O₄:双向数据线(4根)
  • CS:片选信号(低电平有效)
  • WE:读/写允许(=0写入,=1读出)

Intel 6264引脚功能:

  • A₀~A₁₂:地址线(13根,寻址8KB)
  • D₀~D₇:数据线(8根)
  • CE:片选信号(低电平有效)
  • WE:写允许信号(低电平有效)
  • OE:读允许信号(低电平有效)

Intel 6264工作方式表:

CE WE OE 方式 功能
0 0 0 禁止 不允许WE和OE同时为低
0 1 0 读出 数据读出
0 0 1 写入 数据写入
0 1 1 选通 芯片选通,输出高阻态
1 × × 未选通 芯片未选通

三、存储器与CPU的连接(⭐⭐⭐核心考点)

3.1 连接需要完成的任务

  1. 地址线连接:CPU地址总线 → 存储器地址输入
  2. 数据线连接:CPU数据总线 ↔ 存储器数据I/O
  3. 控制线连接:读/写信号(RD/WR)、片选信号(CS/CE)

3.2 存储器扩展方法

1. 位扩展法(⭐重点)

目的: 单个芯片字长不足,需要增加字长

连接方法:

  • 地址线:所有芯片同名并联
  • 控制线:所有芯片同名并联
  • 数据线:各芯片数据线分别连接到数据总线的不同位

例: 用8片8K×1位芯片组成8K×8位存储器

  • 8片芯片的地址线全部并联
  • 8片芯片的CS、WE等控制线并联
  • 每片的I/O分别接D₀~D₇中的一位

特点:

  • 存储器字数不变,字长增加
  • 片选信号可以直接接地(全部选中)

2. 字扩展法(⭐重点)

目的: 单个芯片字数不足,需要增加存储单元数量

连接方法:

  • 地址线:低位地址线(A₀~Aₙ)并联到各芯片
  • 数据线:并联
  • 控制线:读/写信号并联
  • 片选信号:分别连接到地址译码器的不同输出端

例: 用4片16K×8位芯片组成64K×8位存储器

  • 低位地址A₀~A₁₃连接各芯片的14根地址线
  • 高位地址A₁₄、A₁₅经译码器产生4个片选信号
  • 各芯片数据线并联到D₀~D₇

地址空间分配:

芯片 A₁₅A₁₄ 地址范围
芯片1 00 0000H~3FFFH
芯片2 01 4000H~7FFFH
芯片3 10 8000H~BFFFH
芯片4 11 C000H~FFFFH

3. 字位同时扩展法

目的: 同时需要增加字数和字长

连接方法:

  • 先进行位扩展(组成一个字长足够的芯片组)
  • 再进行字扩展(将多组芯片通过片选连接)

四、地址译码方法(⭐⭐⭐核心考点)

4.1 线选法

原理: 用一根高位地址线直接作为片选信号

特点:

  • 电路简单,不需要译码器
  • 地址空间不连续,有重叠
  • 适合小容量存储系统

例: A₁₅直接接CS,A₁₄~A₀用于片内寻址

  • A₁₅=0时选中芯片,地址范围0000H~7FFFH
  • A₁₅=1时选中芯片,地址范围8000H~FFFFH

4.2 全译码法

原理: 所有高位地址线都参加译码

特点:

  • 地址空间连续,无重叠
  • 每个单元有唯一地址
  • 需要译码器(如74LS138)

例: 用74LS138译码器

  • 3位输入(A、B、C)→ 8位输出(Y₀~Y₇)
  • 可选8个芯片,每个芯片有确定的地址范围

4.3 部分译码法

原理: 部分高位地址线参加译码

特点:

  • 地址空间可能有重叠
  • 比全译码简单
  • 适合中等容量系统

五、重要公式与规则

5.1 容量计算

芯片数量=系统总容量单片容量芯片数量 = \frac{系统总容量}{单片容量}

例: 组成64K×8位存储器,使用8K×8位芯片

芯片数量=64K8K=8芯片数量 = \frac{64K}{8K} = 8片

5.2 地址范围计算

起始地址: 所有片选信号有效时的最小地址
结束地址: 所有片选信号有效时的最大地址

例: 8K×8位芯片,A₀~A₁₂用于片内寻址

  • 起始地址:0000H(A₁₅~A₁₃=000)
  • 结束地址:1FFFH(A₁₅~A₁₃=000,A₁₂~A₀全1)

5.3 片选信号产生

全译码: 高位地址全部参加译码
部分译码: 部分高位地址参加译码
线选法: 单根地址线直接作为片选


六、考试重点与易错点

⭐ 考试重点

  1. 存储器分类:RAM/ROM/SRAM/DRAM的特点与区别
  2. SRAM工作原理:六管存储元电路、读/写过程
  3. 常用芯片:Intel 2114(1K×4)、Intel 6264(8K×8)的引脚与功能
  4. 存储器扩展:位扩展、字扩展、字位同时扩展的连接方法
  5. 地址译码:全译码、部分译码、线选法的原理与应用
  6. 容量与地址范围计算

⚠️ 易错点提醒

  1. SRAM vs DRAM

    • SRAM:用触发器,不需刷新,速度快,集成度低
    • DRAM:用电容,需要刷新,速度慢,集成度高
  2. 片选信号

    • 低电平有效(CS=0选中)
    • 位扩展时CS可直接接地
    • 字扩展时CS由译码器控制
  3. 地址线数量

    • 1K = 2¹⁰ → 10根地址线
    • 8K = 2¹³ → 13根地址线
    • 64K = 2¹⁶ → 16根地址线
  4. 扩展方法选择

    • 字长不够 → 位扩展
    • 字数不够 → 字扩展
    • 两者都不够 → 字位同时扩展
  5. 地址重叠问题

    • 线选法:必然有重叠
    • 部分译码:可能有重叠
    • 全译码:无重叠

📝 典型例题类型

  1. 画出存储器与CPU连接图
  2. 计算芯片数量和地址范围
  3. 设计地址译码电路
  4. 分析存储器系统的容量
  5. 确定各芯片的片选信号连接方式

七、常用芯片速查表

芯片型号 容量 结构 地址线 数据线 特殊说明
Intel 2114 4Kbit 1K×4 A₀~A₉ I/O₁~I/O₄ CS,WE
Intel 2116 16Kbit 16K×1 A₀~A₁₃ 1位 DRAM
Intel 6116 16Kbit 2K×8 A₀~A₁₀ D₀~D₇ CS,WE,OE
Intel 6264 64Kbit 8K×8 A₀~A₁₂ D₀~D₇ CE,WE,OE
Intel 62256 256Kbit 32K×8 A₀~A₁₄ D₀~D₇ CE,WE,OE

整理时间:2026年6月16日


第7章 输入/输出技术

一、I/O系统概述

1.1 I/O接口的基本功能

I/O接口是CPU与外围设备之间的桥梁,主要功能包括:

功能 说明
数据缓冲功能 解决CPU与外设速度不匹配问题
信号转换功能 实现数据格式、电平、并串转换
寻址功能 通过地址译码选择相应的寄存器
预处理功能 数据宽度、时序、负载匹配

1.2 接口电路的基本结构

接口电路主要由以下部分组成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
系统总线
├── 控制总线
├── 地址总线
└── 数据总线

┌──────┴──────┐
│ 地址译码器 │ ← 地址译码信号
│ 控制寄存器 │ ← 控制逻辑信号
│ 状态寄存器 │
│ 数据输出寄存器│
│ 数据输入寄存器│
│ 控制逻辑 │
└──────┬──────┘

I/O设备

1.3 I/O端口的类型

端口类型 功能 特点
数据端口 缓冲CPU与外设间的数据 分输入/输出两种
状态端口 存放外设或接口状态 CPU可读取查询
控制端口 接收CPU命令 控制接口和设备动作

1.4 端口的编址方式

编址方式 特点
I/O与内存统一编址 I/O端口占用内存地址空间,用访存指令访问
I/O端口单独编址 I/O端口有独立地址空间,用IN/OUT指令访问

二、输入/输出的基本方法

2.1 I/O控制方式分类

1
2
3
4
5
6
7
8
9
              I/O控制方式

┌────────────┴────────────┐
│ │
主要由程序实现 主要由硬件实现
│ │
├── 程序查询方式 ├── DMA控制方式
└── 中断控制方式 ├── 通道方式
└── 外围处理机方式

2.2 各方式适用场景

方式 适用设备 特点
程序查询 低速外设 简单但CPU效率低
中断控制 低/中速外设 CPU与外设并行工作
DMA 高速外设 数据直接在内存与外设间传送
通道方式 高速外设 专用I/O处理器
外围处理机 高速外设 独立处理机管理I/O

三、程序控制方式

3.1 无条件传送方式(立即传送/同步传送)

基本原理

  • 假设外设已处于就绪状态
  • 程序不必查询外设状态,直接执行I/O指令
  • 适用于状态很少变化的简单外设

适用设备

类型 示例
输入设备 按键、开关
输出设备 LED数码管、交通信号灯、继电器

接口电路特点

1
2
输入方向:外设 → 三态缓冲器 → 数据总线
输出方向:数据总线 → 锁存器 → 外设
传送方向 接口器件 原因
输入 三态缓冲器 输入数据保持时间长于CPU处理时间
输出 锁存器 外设速度慢,需保持数据一段时间

工作过程

输入操作(IN指令):

  1. 地址总线送端口地址 → 地址译码器
  2. 选通信号 M/IO=0,读信号 RD有效
  3. 三态缓冲器被选通,数据进入数据总线

输出操作(OUT指令):

  1. 地址总线送端口地址 → 地址译码器
  2. M/IO=0,写信号 WR=0
  3. 输出锁存器被选中,数据保存并输出给外设

⚠️ 注意事项

  • 数据传送不能太频繁,确保每次传送外设都就绪
  • 主要用于控制CPU与低速I/O接口的信息交换

【例7.1】无条件传送示例

1
2
3
4
; 两个共阴极LED接在D0和D7,地址0000H
MOV DX, 0000H
MOV AL, 81H ; 81H = 10000001B,使D0和D7为高电平
OUT DX, AL ; 两个LED同时点亮

3.2 程序查询方式(条件传送方式)

基本原理

  • CPU通过程序不断查询外设状态
  • 状态不符合要求时CPU等待
  • 状态符合要求时才进行I/O操作

工作流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────┐
│ 启动外设 │
└──────┬──────┘

┌─────────────┐
│ 读外设状态 │
└──────┬──────┘

┌───────┐
│ Ready?│──否──┐
└───┬───┘ │
│是 │
▼ │
┌─────────────┐ │
│ 传送数据 │←──┘
└──────┬──────┘

┌───────┐
│完成? │──否──┐
└───┬───┘ │
│是 │
▼ │
结束 ←────┘

状态标志说明

传送方向 状态标志 含义
输入 READY=1 外设数据已准备好
输出 BUSY=0 外设空闲,可接收数据

输入接口电路工作过程

  1. 外设数据准备好后,发送选通信号
  2. 选通信号作用:
    • 将外设数据送入接口锁存器
    • 使D触发器置1,READY=1
  3. CPU查询状态寄存器,检测READY位
  4. READY=1时,执行IN指令读取数据
  5. 读取后READY自动清0

输出接口电路工作过程

  1. CPU执行OUT指令,数据送入数据锁存器
  2. D触发器输出1,使状态寄存器BUSY=1
  3. 外设从接口取走数据后,发送ACK信号
  4. ACK使D触发器清0,BUSY=0
  5. CPU可开始下一次数据输出

【例7.2】程序查询方式程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
; 数据输入端口地址:52H
; 状态端口地址:56H(第1位为1表示数据就绪)
; 从输入设备读取数据到内存缓冲区,遇到回车结束

COM_SEG SEGMENT
BUFFER DB 82 DUP(?) ; 定义缓冲区
COUNT DB ?
COM_SEG ENDS

CODE SEGMENT
ASSUME ES:COM_SEG, CS:CODE
START:
MOV AX, COM_SEG
MOV ES, AX
MOV DI, OFFSET BUFFER
MOV ES:COUNT, DI ; BUFFER的地址存在COUNT中
MOV CX, 81 ; 设置最大循环次数
CLD

NEXT_IN:
IN AL, 56H ; 读入状态信息
TEST AL, 02H ; 检测第1位是否为1
JZ NEXT_IN ; 为0,数据未准备好,继续读状态
IN AL, 52H ; 数据准备好了,从数据输入端口读入
AND AL, 7FH ; 将正确的数据存入缓冲区内
STOSB
CMP AL, 0DH ; 判断是否为回车
LOOPNE NEXT_IN ; 不是则继续输入新的数据
MOV AL, 0AH
STOSB
SUB DI, ES:COUNT
MOV ES:COUNT, DI ; DI存放缓冲区内数据的个数

程序查询方式评价

优点 缺点
能较好协调外设与CPU定时关系 CPU需不断查询标志位
CPU和外设操作通过状态同步 占用CPU大量时间
硬件结构比较简单 CPU效率较低
无实时响应能力

四、中断方式

4.1 中断的意义

中断技术是现代计算机系统中非常重要的技术,主要解决CPU与各种速度外设之间的速度匹配问题

4.2 中断技术的优点

(1)同步操作

  • CPU运算速度:微秒级
  • 外设运行速度:毫秒级(即使是磁盘)
  • 速度矛盾:快速CPU与慢速外设

中断解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
外设需要I/O操作


外设向CPU发出中断请求


CPU暂停当前程序,执行中断处理程序


完成外设服务(如启动外设工作)


CPU返回被中断程序继续执行


外设执行I/O操作,完成后再次请求中断

效果: CPU在大部分时间里可与外设并行工作,大大提高工作效率。

(2)实时处理

  • 中断技术对实时控制系统非常重要
  • 利用中断技术可使计算机及时响应外部事件

4.3 中断技术的应用领域

领域 应用
故障检测 系统异常处理
实时处理与控制 工业控制
分时系统 多任务调度
多级系统与通信 网络通信
并行处理 多处理器协调
人机交互 键盘、鼠标输入
I/O操作 字符设备输入/输出
A/D转换 模拟信号采集

五、考试重点总结

5.1 核心概念

概念 定义
I/O接口 CPU与外围设备之间的连接电路
I/O端口 接口中能被CPU直接访问的寄存器
无条件传送 假设外设就绪,直接执行I/O指令
程序查询 CPU不断查询外设状态,就绪后传送
中断方式 外设主动请求,CPU响应后服务

5.2 I/O控制方式对比

方式 控制者 CPU效率 实时性 硬件复杂度
无条件传送 程序 简单
程序查询 程序 简单
中断控制 程序+硬件 中等
DMA 硬件 复杂

5.3 接口电路器件选择

场景 器件 原因
输入接口 三态缓冲器 数据保持时间长
输出接口 锁存器 外设速度慢,需保持数据

5.4 端口地址信号

信号 作用
M/IO=0 选择I/O端口
M/IO=1 选择内存
RD=0 读操作
WR=0 写操作

六、易错点提醒

⚠️ 易错点1:无条件传送的前提

  • 错误理解:外设随时就绪
  • 正确理解假设外设已就绪,实际上外设状态很少变化(如开关、LED)
  • 后果:如果外设数据未准备好就读取,会得到错误或无效数据

⚠️ 易错点2:程序查询方式的查询对象

  • 错误理解:查询数据端口
  • 正确理解:查询状态端口的标志位
  • 例如:例7.2中先读56H(状态口),再读52H(数据口)

⚠️ 易错点3:输入/输出接口器件区别

方向 器件 说明
输入 三态缓冲器 不需要锁存,数据保持时间足够
输出 锁存器 必须锁存,外设速度慢

⚠️ 易错点4:中断方式的本质

  • 不是CPU主动查询外设
  • 而是外设主动请求,CPU被动响应
  • 关键:实现了CPU与外设的并行工作

⚠️ 易错点5:I/O端口编址方式区别

方式 指令 地址空间
统一编址 访存指令(MOV等) 与内存共享
单独编址 IN/OUT指令 独立地址空间

七、程序阅读要点

7.1 无条件传送程序阅读

1
2
3
MOV DX, 端口地址    ; 设置I/O端口地址
MOV AL, 数据 ; 准备数据
OUT DX, AL ; 输出数据(注意:M/IO=0, WR=0)

7.2 程序查询方式程序阅读

1
2
3
4
5
6
; 典型模式
NEXT: IN AL, 状态端口 ; 1. 读状态
TEST AL, 掩码 ; 2. 测试状态位
JZ NEXT ; 3. 未就绪则继续查询
IN AL, 数据端口 ; 4. 就绪后读取数据
; ... 处理数据

7.3 关键指令说明

指令 功能 在I/O中的作用
IN AL, DX 从端口读数据 输入操作
OUT DX, AL 向端口写数据 输出操作
TEST AL, 02H 测试第1位 查询状态位
JZ/JNZ 条件跳转 根据状态决定是否继续查询
STOSB 存储字节到ES:DI 将数据存入缓冲区
LOOPNE 相等时循环 控制循环次数

八、答题技巧

8.1 概念题

  • 明确区分各种I/O控制方式的特点
  • 准确描述接口电路的组成和功能
  • 掌握端口的三种类型及其作用

8.2 程序阅读题

  1. 识别传送方式:看是否有状态查询(TEST/JZ)或直接I/O
  2. 确定端口地址:注意IN/OUT指令中的地址
  3. 分析状态位:理解TEST指令的掩码含义
  4. 跟踪程序流程:注意循环和条件跳转

8.3 简答题

  • 中断方式的优点要答全:同步操作、实时处理
  • 程序查询方式的优缺点要对比
  • 无条件传送的适用条件要准确

第8章 常用接口芯片

考试范围:8.1 可编程定时/计数器8253/8254(实验中讲解的部分)、8.2 可编程并行接口8255(重点:方式0)
不考内容:8.3 可编程串行接口8251、8.4 A/D与D/A转换接口


一、8.1 可编程定时/计数器 8253/8254

1.1 基本概念

项目 说明
全称 Programmable Interval Timer (PIT)
功能 提供定时/计数功能,用于系统基准定时、DRAM刷新、扬声器音调控制、磁盘驱动器定时等
制造工艺 NMOS工艺,双列直插式封装
8254与8253关系 8254是8253的改进型,引脚/硬件/编程方式兼容,可用8254替代8253

1.2 8253与8254的主要差异

差异项 8253 8254
最高计数脉冲频率 2MHz 10MHz
状态寄存器 每个计数器内部有状态寄存器和状态锁存器
读回命令 有读回命令字,可读取状态和计数值

1.3 8253内部结构(4大部分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──────────────┬───────────────┬──────────────┐
│ 数据总线 │ 读/写逻辑 │ 控制寄存器 │
│ 缓冲器 │ │ │
│ (D₇~D₀) │ (RD,WR,A₀,A₁)│ (3个,共用1个 │
│ 双向三态 │ │ 端口地址) │
└──────┬───────┴───────┬───────┴──────┬───────┘
│ │ │
└───────────────┼──────────────┘

┌──────────────┼──────────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│计数器 0 │ │计数器 1 │ │计数器 2 │
│16位减1 │ │16位减1 │ │16位减1 │
└─────────┘ └─────────┘ └─────────┘
  • 数据总线缓冲器:双向三态8位缓冲器,是8253与CPU之间的数据接口
  • 读/写逻辑:接收CPU的RD、WR、A₀、A₁信号,控制对各计数器和控制寄存器的读/写
  • 控制寄存器:3个计数器共用1个控制寄存器端口,通过控制字高2位(SC₁SC₀)区分,只能写入,不能读出
  • 计数器:每个计数器由16位锁存寄存器和16位减1计数器组成,有CLK、GATE、OUT三根信号线

1.4 8253引脚功能

引脚 方向 功能说明
D₇~D₀ 双向三态 与CPU数据总线相连,传送控制字、计数初值、当前值
CS̄ 输入 片选信号,低电平有效,由地址线高位译码形成
RD̄ 输入 读信号,低电平有效,接系统IOR
WR̄ 输入 写信号,低电平有效,接系统IOW
A₁, A₀ 输入 地址输入,选择计数器或控制寄存器
CLK₀~₂ 输入 时钟脉冲输入,用于控制减1操作,最高5MHz
GATE₀~₂ 输入 门控信号,控制计数器工作或复位
OUT₀~₂ 输出 计数器输出,计数值减到0时输出标志信号

1.5 A₁A₀地址选择(重要!)

A₁ A₀ 选择对象
0 0 计数器 0
0 1 计数器 1
1 0 计数器 2
1 1 控制寄存器

1.6 8253寻址操作控制逻辑

CS̄ RD̄ WR̄ A₁ A₀ 操作功能
0 1 0 0 0 计数器初值装入计数器0
0 1 0 0 1 计数器初值装入计数器1
0 1 0 1 0 计数器初值装入计数器2
0 1 0 1 1 写控制寄存器
0 0 1 0 0 读计数器0
0 0 1 0 1 读计数器1
0 0 1 1 0 读计数器2

1.7 8253的6种工作方式

方式 名称 特点
方式0 计数结束产生中断 单次计数,OUT初始为低,计数到0变高,常用于中断请求
方式1 可编程单稳触发器 GATE上升沿触发,OUT输出负脉冲宽度=初值×CLK周期,可重触发
方式2 频率发生器(分频器) 连续计数,OUT输出频率=CLK/n,自动重新装入初值
方式3 方波频率发生器 连续计数,OUT输出方波,频率=CLK/n
方式4 软件触发选通 单次计数,装入初值后立即开始,计数到0输出一个CLK宽度的负脉冲
方式5 硬件触发选通 单次计数,GATE上升沿触发,计数到0输出一个CLK宽度的负脉冲

1.8 GATE信号功能表(重要!)

方式 GATE低电平/变低 GATE上升沿 GATE高电平
0 禁止计数 不影响 允许计数
1 不影响 启动计数 不影响
2 禁止计数并置OUT为高 初始化计数 允许计数
3 禁止计数并置OUT为高 初始化计数 允许计数
4 禁止计数 不影响 允许计数
5 不影响 启动计数 不影响

1.9 方式控制字格式(8253)

1
2
D₇  D₆  D₅  D₄  D₃  D₂  D₁  D₀
SC₁ SC₀ RL₁ RL₀ M₂ M₁ M₀ BCD
字段 说明
D₇D₆ (SC₁SC₀) 计数器选择 00=计数器0,01=计数器1,10=计数器2,11=非法
D₅D₄ (RL₁RL₀) 读/写格式 00=锁存命令,01=只读/写低8位,10=只读/写高8位,11=先低后高
D₃D₂D₁ (M₂M₁M₀) 工作方式 000~101对应方式0~方式5
D₀ (BCD) 计数进制 0=二进制,1=BCD码十进制

1.10 8253初始化编程要点

初始化步骤

  1. 写入方式控制字(写入控制寄存器端口,A₁A₀=11)
  2. 写入计数初值(写入对应计数器端口)
    • 若RL₁RL₀=11,先写低字节,再写高字节
    • 若RL₁RL₀=01,只写低字节
    • 若RL₁RL₀=10,只写高字节

计数初值范围

  • 二进制计数(D₀=0):0000H~FFFFH,初值0对应65536
  • BCD计数(D₀=1):0000~9999,初值0对应10000

【例8.1】 利用计数器通道2产生10000Hz方波,CLK=10000Hz:

1
2
3
4
5
6
MOV  AL, 10110110B    ; 方式3,通道2,二进制,先低后高
OUT COTR, AL ; 写入控制寄存器
MOV AX, 1 ; 初值=f/10000=1
OUT CTN2, AL ; 先写低字节
MOV AL, AH
OUT CTN2, AL ; 再写高字节

【例8.2】 通道0,方式1,初值2350H,十进制,端口40H~43H:

1
2
3
4
5
6
MOV  AL, 33H          ; 计数器0,方式1,十进制,先低后高
OUT 43H, AL ; 写入控制寄存器
MOV AL, 50H ; 初值低字节
OUT 40H, AL ; 写入计数器0
MOV AL, 23H ; 初值高字节
OUT 40H, AL ; 写入计数器0

1.11 8253读操作

方法一:暂停计数读取

  • 先使GATE=0或关闭CLK暂停计数
  • 写入控制字设定读/写方式,然后用IN指令读取

方法二:锁存读(“飞读”)

  • 写入锁存命令字(SC₁SC₀ 00 XXXX),将当前计数值锁存到锁存器
  • 然后用IN指令读取,不影响计数器工作
1
2
3
4
5
6
7
; 锁存读取通道1的16位计数值
MOV AL, 40H ; 方式控制字:通道1,锁存
OUT COTR, AL ; 写入8253控制寄存器
IN AL, CNT1 ; 第一次读入低8位
MOV CL, AL
IN AL, CNT1 ; 第二次读入高8位
MOV CH, AL

1.12 PC系统中8253的端口地址分配

I/O端口地址 计数器通道及寄存器
0040H 计数器0
0041H 计数器1
0042H 计数器2
0043H 控制寄存器
  • CLK频率:1.193MHz(周期838ns)
  • 计数器0:方式3,初值0,产生18.2Hz中断(每55ms一次)→ IRQ₀
  • 计数器1:方式2,初值18,产生66.287kHz请求 → DREQ₀(DRAM刷新)
  • 计数器2:方式3,初值533H,产生1000Hz → 扬声器

二、8.2 可编程并行接口 8255(⭐考试重点)

2.1 并行通信基本概念

概念 说明
并行通信 数据各位同时传送,以字或字节为单位,速度快,线多,不宜远距离
串行通信 数据逐位顺序传送,速度低,线少,适合长距离
并行接口 完成并行通信的接口,分为硬连线接口和可编程接口

2.2 8255芯片概述

项目 说明
全称 Intel 8255 可编程并行I/O接口芯片
引脚数 40根引脚,双列直插式
数据端口 3个8位I/O口:A口、B口、C口
控制端口 1个8位控制端口(控制寄存器)
应用 IBM-PC/XT中用于键盘扫描码、DIP开关、扬声器控制、存储器奇偶校验

2.3 8255内部结构

1
2
3
4
5
6
7
8
9
10
11
12
13
                CPU接口          内部逻辑          外设接口
┌──────────┐ ┌──────────────┐ ┌──────────┐
│ │ │ A组控制 │ │ 端口A(8) │── PA₇~PA₀
│ │ │ │ ├──────────┤
D₇~D₀ ────→│ 数据总线 │───→│ 内部数据 │──→│ 端口C │── PC₇~PC₄
(双向) │ 缓冲器 │ │ 总线 │──→│ 上半部(4)│
│ │ │ │ ├──────────┤
RD̄ ──────→│ │ │ │──→│ 端口C │── PC₃~PC₀
WR̄ ──────→│ 读/写 │ │ B组控制 │ │ 下半部(4)│
A₀ ──────→│ 控制逻辑 │ │ │ ├──────────┤
A₁ ──────→│ │ │ │──→│ 端口B(8) │── PB₇~PB₀
RESET ───→│ │ └──────────────┘ └──────────┘
CS̄ ──────→└──────────┘

关键组成

  • 数据总线缓冲器:三态双向8位,与CPU数据总线相连
  • 读/写控制逻辑:接收CS̄、RD̄、WR̄、A₁、A₀、RESET信号
  • A组控制:控制端口A和端口C的高4位(PC₇~PC₄)
  • B组控制:控制端口B和端口C的低4位(PC₃~PC₀)
  • 控制寄存器:只能写入,不能读出

2.4 8255引脚功能

引脚 方向 功能说明
D₇~D₀ 双向三态 数据线,传送数据、控制字、状态字
RESET 输入 复位信号,高电平有效,所有寄存器清零,A/B/C口均设为输入
CS̄ 输入 片选信号,低电平有效
RD̄ 输入 读信号,低电平有效,接IOR
WR̄ 输入 写信号,低电平有效,接IOW
A₁, A₀ 输入 端口选择信号
PA₇~PA₀ 双向 A口8位数据线
PB₇~PB₀ 双向 B口8位数据线
PC₇~PC₀ 双向 C口8位数据线(可分高4位/低4位)

2.5 8255端口选择(A₁A₀编码)⭐

A₁ A₀ 选择端口 操作
0 0 端口 A 读/写A口数据
0 1 端口 B 读/写B口数据
1 0 端口 C 读/写C口数据
1 1 控制寄存器 只能写入控制字

2.6 8255寻址和基本操作表⭐

CS̄ RD̄ WR̄ A₁ A₀ 所选端口 传送方向
0 0 1 0 0 读A口 A口→数据总线
0 0 1 0 1 读B口 B口→数据总线
0 0 1 1 0 读C口 C口→数据总线
0 1 0 0 0 写A口 数据总线→A口
0 1 0 0 1 写B口 数据总线→B口
0 1 0 1 0 写C口 数据总线→C口
0 1 0 1 1 写控制寄存器 数据总线→控制寄存器

2.7 8255的3种工作方式⭐⭐⭐

方式 名称 说明
方式0 基本输入/输出方式 无条件传送或查询式传送
方式1 选通输入/输出方式 利用C口联络信号,A口/B口可查询或中断
方式2 双向传送方式 仅A口可用,方式1输入+输出的组合

端口可用方式

  • A口:方式0、方式1、方式2(三种都可以)
  • B口:方式0、方式1(两种)
  • C口:只能工作在方式0,常分为两个4位端口配合A/B口

2.8 方式0详解(基本输入/输出方式)⭐⭐⭐(考试重点)

2.8.1 方式0特点

  • 适用于简单的无条件输入/输出查询式输入/输出
  • 无条件传送:输入/输出数据随时准备好,无需握手信号
  • 查询式传送:需要应答信号,通常A口/B口作数据口,C口分两个4位端口分别作控制信号输出口和状态信号输入口

2.8.2 方式0工作状态组合(16种)⭐⭐⭐

序号 控制字(D₇~D₀) 十六进制 A口 C口高4位 B口 C口低4位
0 10000000 80H 输出 输出 输出 输出
1 10000001 81H 输出 输出 输出 输入
2 10000010 82H 输出 输出 输入 输出
3 10000011 83H 输出 输出 输入 输入
4 10001000 88H 输出 输入 输出 输出
5 10001001 89H 输出 输入 输出 输入
6 10001010 8AH 输出 输入 输入 输出
7 10001011 8BH 输出 输入 输入 输入
8 10010000 90H 输入 输出 输出 输出
9 10010001 91H 输入 输出 输出 输入
10 10010010 92H 输入 输出 输入 输出
11 10010011 93H 输入 输出 输入 输入
12 10011000 98H 输入 输入 输出 输出
13 10011001 99H 输入 输入 输出 输入
14 10011010 9AH 输入 输入 输入 输出
15 10011011 9BH 输入 输入 输入 输入

2.9 8255方式控制字格式⭐⭐⭐

1
2
3
4
5
6
 D₇    D₆    D₅    D₄    D₃    D₂    D₁    D₀
┌────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ 1 │ D₆ │ D₅ │ D₄ │ D₃ │ D₂ │ D₁ │ D₀ │
└────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
↑ A组控制 B组控制
特征位

D₇ = 1:方式控制字的特征标志位(必须为1)

A组控制(D₆D₅D₄D₃)

功能 编码
D₆D₅ A口工作方式 00=方式0,01=方式1,1×=方式2
D₄ A口输入/输出 1=输入,0=输出
D₃ C口高4位(PC₇~PC₄)输入/输出 1=输入,0=输出

B组控制(D₂D₁D₀)

功能 编码
D₂ B口工作方式 0=方式0,1=方式1
D₁ B口输入/输出 1=输入,0=输出
D₀ C口低4位(PC₃~PC₀)输入/输出 1=输入,0=输出

控制字速记口诀:

方式0控制字 = 1 0 0 X X X X X

  • D₇=1(特征位)
  • D₆D₅=00(A口方式0)
  • D₄=A口方向(1输入/0输出)
  • D₃=C口高4位方向
  • D₂=0(B口方式0)
  • D₁=B口方向
  • D₀=C口低4位方向

2.10 C口置位/复位控制字⭐⭐

1
2
3
4
5
6
 D₇    D₆    D₅    D₄    D₃    D₂    D₁    D₀
┌────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ 0 │ × │ × │ × │ D₃ │ D₂ │ D₁ │ D₀ │
└────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
↑ ↑ ↑
特征位=0 选择位 置位/复位

D₇ = 0:C口置位/复位控制字的特征标志位

D₃D₂D₁:选择C口的哪一位

D₃ D₂ D₁ 选择位
0 0 0 PC₀
0 0 1 PC₁
0 1 0 PC₂
0 1 1 PC₃
1 0 0 PC₄
1 0 1 PC₅
1 1 0 PC₆
1 1 1 PC₇

D₀:置位/复位控制

  • D₀ = 1:置位(使对应位输出高电平)
  • D₀ = 0:复位(使对应位输出低电平)

⚠️ 注意:置位/复位控制字只能用于C口作为输出时的位操作!


2.11 方式1简述(选通输入/输出方式)

方式1主要功能

  • A口、B口可工作于查询式或中断式I/O
  • A组:A口8位数据 + C口3位联络信号
  • B组:B口8位数据 + C口3位联络信号
  • 中断请求触发器INTE由C口相应位置位/复位控制

方式1输出时C口联络信号

信号 引脚 功能
OBF̄ 输出 输出缓冲器满,低电平有效,通知外设取数据
ACK̄ 输入 外设应答信号,低电平有效
INTR 输出 中断请求,高电平有效

方式1输入时C口联络信号

信号 引脚 功能
STB̄ 输入 输入选通信号,低电平有效
IBF 输出 输入缓冲器满,高电平有效
INTR 输出 中断请求,高电平有效

2.12 方式2简述(双向传送方式)

  • 仅A口可工作在方式2
  • A口可同时作为输入口和输出口(但不能同时进行)
  • 使用C口5根引脚:PC₃~PC₇
  • B口只能工作在方式0或方式1
  • C口剩余3位(PC₂~PC₀)可作为输入/输出线或B口方式1的控制线

三、考试重点总结⭐⭐⭐

3.1 必须掌握的核心内容

  1. 8255方式控制字的编写

    • 特征位D₇=1
    • A口/B口方式选择
    • 各口输入/输出方向设定
    • C口高低4位方向设定
  2. 8255方式0的16种工作状态组合

    • 能根据需求快速确定控制字
    • 常见配置:全输出(80H)、全输入(9BH)、A口输出B口输入(82H)等
  3. C口置位/复位控制字

    • 特征位D₇=0
    • 选择要操作的C口位
    • 置位(D₀=1)或复位(D₀=0)
  4. 8255端口寻址

    • A₁A₀编码:00=A口,01=B口,10=C口,11=控制寄存器
    • 与CS̄、RD̄、WR̄配合完成读写操作
  5. 8253方式控制字

    • SC₁SC₀选择计数器
    • RL₁RL₀设定读/写格式
    • M₂M₁M₀选择工作方式
    • BCD选择计数进制

3.2 常见考试题型

题型1:根据要求写控制字

例:A口输出、B口输入、C口高4位输入、C口低4位输出,方式0

1
2
3
4
5
6
7
8
9
10
11
12
控制字 = 1 0 0 1 0 0 1 0 = 92H
│ │ │ │ │ │ │ └─ C口低4位=0(输出)
│ │ │ │ │ │ └─── B口=0(输出) → 这里错了!
│ │ │ │ │ └───── B口方式=0(方式0)
│ │ │ │ └─────── C口高4位=1(输入)
│ │ │ └───────── A口=0(输出)
│ │ └─────────── A口方式=00(方式0)
│ └───────────── 方式0
└───────────────── 特征位=1

正确:1 0 0 1 0 0 0 1 = 91H
A口输出(0), C口高4位输入(1), B口方式0(0), B口输入(1), C口低4位输入(1)

题型2:初始化编程

例:8255端口地址200H~203H,A口输出、B口输入、C口全输出

1
2
3
4
; 初始化8255
MOV AL, 82H ; 控制字:方式0,A口输出,B口输入,C口输出
OUT 203H, AL ; 写入控制寄存器
; 注意:控制寄存器地址 = 基地址 + 3 = 200H + 3 = 203H

题型3:C口置位/复位操作

例:使PC₃输出高电平

1
2
MOV  AL, 07H          ; D₇=0(特征),D₃D₂D₁=011(PC₃),D₀=1(置位)
OUT 203H, AL ; 写入控制寄存器

题型4:方式0综合应用

例:A口接LED(输出),B口接开关(输入),C口低4位接开关(输入),C口高4位接LED(输出)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
; 初始化
MOV AL, 92H ; 方式0,A口输出,B口输入,C口高4位输出,低4位输入
OUT PORT_CTRL, AL ; 写控制寄存器

; 读B口开关状态,输出到A口LED
IN AL, PORT_B ; 读B口
OUT PORT_A, AL ; 输出到A口

; 读C口低4位开关状态,输出到C口高4位LED
IN AL, PORT_C ; 读C口(包含高低4位)
AND AL, 0FH ; 只取低4位
MOV CL, 4
SHL AL, CL ; 左移4位到高4位
OUT PORT_C, AL ; 输出到C口

3.3 易错点提醒⚠️

  1. 控制字写入端口地址:控制寄存器地址 = 基地址 + 3(A₁A₀=11)
  2. 方式控制字特征位:D₇=1是方式控制字,D₇=0是C口置位/复位控制字
  3. 端口方向不能搞混:输入=1,输出=0(容易记反!)
  4. C口的两重性
    • C口可以整体读写(A₁A₀=10时)
    • C口也可以按位置位/复位(通过控制字)
    • 读C口时读到的是引脚状态,与控制字设定的方向无关
  5. 方式0下C口不能按位操作:方式0下C口作为整体数据口使用
  6. 8253控制字中SC₁SC₀=11是非法选择,不是选所有计数器
  7. 8253计数初值0对应最大计数值:二进制时65536,BCD时10000
  8. RESET信号:8255复位后所有口设为输入方式(控制字为9BH)
  9. 输入输出端口指令
    • 输入:IN AL, 端口地址(从外设读数据到CPU)
    • 输出:OUT 端口地址, AL(从CPU写数据到外设)
    • 不要用MOV指令代替IN/OUT!

四、8253与8255对比记忆

对比项 8253 8255
功能 定时/计数 并行I/O
端口数 3个计数器 + 1个控制寄存器 3个数据端口 + 1个控制寄存器
数据宽度 16位计数器 8位数据端口
控制字特征位 无(通过SC₁SC₀区分) D₇=1方式控制字,D₇=0置位/复位
方式数 6种工作方式 3种工作方式
可编程性 选择计数器、方式、初值、进制 选择各口方向、工作方式
A₁A₀=11 写控制寄存器 写控制寄存器