微机原理与接口技术-期末知识点汇总
微机原理与接口技术 — 知识点汇总
教材:《微机原理与接口技术(第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 逻辑电路基础 ❌ 不考
考试重点总结 ⭐
必考知识点
- 冯·诺依曼体系结构的五大要点(特别是"存储程序"概念)
- 五大部件及其功能(运算器、控制器、存储器、输入设备、输出设备)
- 以运算器为中心 vs 以存储器为中心的区别
- 计算机五代发展的时间线和逻辑元件
- 摩尔定律的内容
- 微型计算机的定义和组成
- CPU、主机、外设的概念区分
重要公式/规则
- 摩尔定律:每18个月,集成度翻一番,速度翻一番,价格降一半
- 计算机发展规律:大约每隔5年运算速度提高10倍,可靠性提高10倍,成本降低1/10,体积缩小1/10
易错点提醒 ⚠️
| 易错点 | 正确理解 |
|---|---|
| 冯·诺依曼计算机的中心 | 以运算器为中心(不是存储器) |
| 现代计算机的中心 | 以存储器为中心(不是运算器) |
| 程序和数据的存放 | 存放在同一存储器中(冯·诺依曼特点) |
| CPU的组成 | 运算器 + 控制器(不包括存储器) |
| 主机的组成 | CPU + 内存(不包括外设) |
| 第一台电子计算机 | 1946年ENIAC,不是第一台微型计算机 |
| 第一台微型计算机 | 1971年MCS-4(Intel 4004) |
知识框架图
1 | 计算机系统 |
整理自《微机原理与接口技术(第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进制数的通式:
其中:r称为基数(或基),n为整数位个数,m为小数位个数。
示例:
三、常用数制对照表(重要⭐)
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 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转换为十进制数
【例2.2】 把八进制数123.54转换为十进制数
(2)十进制数 → r进制数
整数部分:除r取余法(从下往上读)
将十进制整数除以基数r,得到商和余数;再将商除以r,又得到商和余数;继续直到商为0。第一次得到的余数为最低位,最后得到的余数为最高位。
【例2.3】 将十进制数25转换为二进制数
1 | 2 | 25 余数 |
所以
【例2.4】 将十进制数97转换为十六进制数
1 | 16 | 97 余数 |
所以
小数部分:乘r取整法(从上往下读)
用基数r乘以十进制小数,得到整数和小数部分;再用r乘以小数部分,继续直到小数部分为0或满足精度要求。每次得到的整数部分按先后顺序从左到右排列。
【例2.5】 将十进制小数0.8125转换为二进制小数
1 | 0.8125 × 2 = 1.6250 整数部分 1 ←最高位 |
所以
⚠️ 易错点:
- 整数部分:除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采用独立编址方式。
考试重点与易错点总结
一、数制转换(最高频考点⭐⭐⭐)
- r进制→十进制:按位权展开求和
- 十进制整数→r进制:除r取余,余数从下往上读
- 十进制小数→r进制:乘r取整,整数从上往下读
- 二进制↔八进制:每3位一组互转
- 二进制↔十六进制:每4位一组互转
二、CISC vs RISC(常考对比题⭐⭐)
| 对比项 | CISC | RISC |
|---|---|---|
| 指令数量 | 多(数百条) | 少 |
| 指令长度 | 不等 | 尽可能相等 |
| 执行时间 | 不等 | 尽可能相同 |
| 寻址方式 | 复杂 | 简化 |
| 代表架构 | x86(Intel/AMD) | ARM、MIPS、PowerPC |
三、常见易错点
- 汇编语言与机器语言一一对应,不是与高级语言一一对应
- 编译是全部翻译,解释是逐条翻译执行
- 除r取余法:第一次得到的余数是最低位,最后得到的是最高位
- 乘r取整法:第一次得到的整数是最高位,最后得到的是最低位
- 十进制数0.1转换为二进制是无限循环小数(0.0001100110011…)
- 每3位二进制对应1位八进制,每4位二进制对应1位十六进制
- 内存是易失性的(RAM断电丢失),外存是非易失性的
- ROM虽然属于内存,但具有非易失性,嵌入式系统中可做外存
四、重要公式
r进制数按位权展开通式:
二进制→十进制:
注意:本章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. 物理地址的形成⭐⭐⭐
物理地址计算公式:
或等价地:
实现方式:
- 8086 CPU有一个专门的20位地址加法器
- 当CPU寻址某个存储单元时:
- 将段地址左移4位(相当于乘以16)
- 再与16位偏移地址相加
- 形成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 | ┌─────────────────────────────────────────┐ |
BIU和EU的关系⭐⭐
- BIU和EU是既分工又合作的两个独立部件
- BIU负责存取指令和数据
- EU负责执行指令
- 两者的操作是并行的(流水线技术)
BIU和EU的操作原则
- 每当8086 CPU指令队列中有两个空字节时,BIU就会自动寻找空闲的总线周期进行预取指令操作,直到指令队列填满为止
- 当指令队列缓冲器中存有一条以上的指令时,EU就立即开始执行
- 每当EU执行一条转移、调用或返回指令后,BIU清空指令队列,并从转移后的当前地址取出指令送EU执行
1. 总线接口部件(BIU)⭐
主要功能:
- 预取指令序列:自动进行预取指令操作,按先后次序存入指令缓冲寄存器
- 存取数据:配合EU,从指定的内存单元或I/O端口中取出或存放数据
- 将访问主存的逻辑地址转换为实际的物理地址
组成部件:
| 部件 | 位数 | 功能 |
|---|---|---|
| 地址加法器 | 20位 | 段地址左移4位 + 偏移地址 = 20位物理地址 |
| 段寄存器 | 16位 × 4 | CS、DS、SS、ES,存放段地址 |
| 指令指针IP | 16位 | 存放下一条将要执行的指令在代码段中的偏移地址 |
| 指令队列缓冲器 | 6字节 | 缓存BIU取出的待执行指令,先进先出方式工作 |
| 总线控制逻辑 | — | 将CPU内部总线和系统总线相连 |
⚠️ 易错点:IP存放的是下一条将要执行的指令的偏移地址,不是当前指令的地址。
2. 执行部件(EU)⭐
主要功能:
- 从指令队列中取出指令代码,由EU控制器进行译码
- 对操作数进行算术和逻辑运算,将结果特征存入标志寄存器
- 需要与主存储器或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 | ┌─────────────────────────────────────────────────────┐ |
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端口进行一次访问所需要的时间 |
| 指令周期 | 一条指令从开始取指令到最后执行完毕所需的时间 |
关系: 一个指令周期由一个或若干个总线周期组成
时钟周期计算
例: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 |
可屏蔽中断响应过程:
- CPU在指令周期最后一个T状态采样INTR
- 若IF=1,CPU进入中断响应周期
- 8086发出两个连续中断响应信号(INTA)
- 外设通过数据总线送入中断类型码
- 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步):
- 外设→8259→INTR→CPU
- CPU检测IF标志,IF=1则响应
- CPU发出两个INTA脉冲
- 8259送中断类型码到数据总线
- CPU读取类型码,查向量表获取入口地址
- 保护断点(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₄:结束总线周期
考试重点总结
⭐⭐⭐ 必考知识点
- 物理地址计算:物理地址 = 段地址 × 10H + 偏移地址
- 寄存器结构:14个寄存器的分类和各寄存器功能
- BIU和EU的功能及并行工作原理
- 标志寄存器FLAGS:6个状态标志 + 3个控制标志的含义
- BHE与A₀的组合:不同数据类型的操作方式
⭐⭐ 重要知识点
- 存储器分段结构:为什么分段、分段规则、逻辑地址格式
- 数据存储类型:字节、字(规则字/非规则字)、双字
- 总线周期:4个T状态的功能、T_W的插入条件
- 默认段寄存器配对:SP→SS, BP→SS, SI→DS, DI→ES
⭐ 了解知识点
- 8086基本参数(16位数据总线、20位地址总线、1MB寻址)
- 存储器分块结构(高位字节块、低位字节块)
- 指令队列的工作原理(6字节、先进先出)
- IP寄存器的自动加1特性
❌ 不考范围
- 3.7.3 最大模式系统总线周期时序
- 最大工作模式
易错点提醒
- 物理地址公式:段地址 × 10H(十六进制),不是 × 10(十进制)
- 规则字 vs 非规则字:字地址是低字节地址,偶地址为规则字
- BHE信号:BHE=0表示选中高字节块(有效),不是BHE=1
- PF标志:只看低8位中1的个数,不是全部16位
- IF标志:只影响可屏蔽中断,不影响NMI和内部中断
- BP寻址:默认使用SS段寄存器,不是DS
- IP寄存器:程序员不能直接访问,存放的是下一条指令的偏移地址
- T₁状态:输出地址;T₂开始撤销地址
- TF标志:没有专用指令设置或清除
- 非规则字存取:需要两个总线周期
第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 AX、MUL BL - 无操作数指令:如
HLT、XLAT
⚠️ 易错点:8086规定,对于双操作数指令,不能两个操作数同为存储器操作数(串操作指令除外)。
二、8086寻址方式
寻址方式:形成指令地址或操作数地址的方式。
8086 CPU的寻址分为两类:
- 指令寻址方式:确定下一条将要执行指令地址的方法
- 数据寻址方式:形成操作数地址的方法
2.1 数据寻址方式
(1)立即寻址
定义:操作数包含在指令中,操作数(地址码)字段直接给出操作数本身。
汇编格式:
1 | 操作码 DST, 数字表达式 |
特点:
- 操作数是指令的一部分,不能修改
- 执行速度快
- 只能适用于操作数固定的情况
- 立即数只能用于源操作数,不能用于目标操作数
示例:
1 | MOV AX, 251 ; 将十进制数251送入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 | MOV AX, CX ; 将CX内容送入AX |
(3)存储器寻址
物理地址计算公式:
1 | 物理地址 = 段地址 × 10H + 段内偏移地址(有效地址EA) |
有效地址(EA):操作数在内存中的偏移地址
形式地址/DISP:指令地址码字段给出的地址
存储器寻址方式包括以下5种:
① 直接寻址
EA = DISP(位移量直接给出)
汇编格式:
1 | 地址表达式 |
默认段寄存器:DS
示例:
1 | MOV AX, [1000H] ; 物理地址 = DS × 10H + 1000H |
段超越前缀(访问其他段):
1 | MOV AL, ES:TABLE ; 使用ES段 |
② 寄存器间接寻址
EA = [BX] / [BP] / [SI] / [DI]
汇编格式:
1 | [基址寄存器名或变址寄存器名] |
默认段规则:
- 使用 BX、SI、DI → 默认在数据段(DS)
- 使用 BP → 默认在堆栈段(SS)
示例:
1 | MOV AX, [BX] ; 物理地址 = DS × 10H + BX |
用途:一般用于访问表格或字符串,通过修改寄存器内容访问下一数据项。
③ 寄存器相对寻址
EA = [BX] / [BP] / [SI] / [DI] + DISP
汇编格式:
1 | 位移量[基址寄存器名或变址寄存器名] |
默认段规则:同寄存器间接寻址
示例:
1 | MOV AX, 20H[SI] ; 物理地址 = DS × 10H + SI + 20H |
用途:用于表格或数组数据的访问操作,将首地址作为位移量,用寄存器记录下标。
④ 基址加变址寻址
EA = [BX] / [BP] + [SI] / [DI]
汇编格式:
1 | [基址寄存器名][变址寄存器名] |
示例:
1 | MOV AX, [BX][SI] ; 物理地址 = DS × 10H + BX + SI |
优点:两个寄存器内容都可修改,比寄存器相对寻址更灵活。
⑤ 相对基址加变址寻址
EA = [BX] / [BP] + [SI] / [DI] + DISP
汇编格式:
1 | 位移量[基址寄存器][变址寄存器] |
示例:
1 | 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 | 指令名 SHORT 目标地址标号 ; 段内短转移(8位位移量,范围-128~+127) |
特点:位移量不随程序加载位置改变,可实现程序重定位。
⚠️ 注意:条件转移指令的位移量只能是8位,无条件转移指令的位移量可以是8位或16位。
② 段内间接寻址
汇编格式:
1 | 指令名 16位寄存器名 |
执行过程:按指定寻址方式找到一个字,送入IP寄存器,CS不变。
③ 段间直接寻址
汇编格式:
1 | 指令名 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:寄存器、存储器或立即数
使用限制:
- 两个操作数不能同为存储器操作数
- CS不能作为目标操作数
- 段寄存器之间不能互相传送
- 立即数不能直接送入段寄存器
- MOV指令不影响标志位
应用示例:
1 | ; 立即数传送 |
注意: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 | IN AX, DX ; 输入 |
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=0REPE/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 | LOOP 标号 ; CX ← CX-1,若CX≠0则转移 |
(4)子程序调用与返回
1 | CALL 过程名 ; 调用子程序(压入返回地址,跳转到过程) |
段内CALL:只压入IP
段间CALL:压入CS和IP
(5)中断指令
1 | INT n ; 软中断,中断类型号n |
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 读程序技巧
- 确定寻址方式:根据操作数形式判断
- 计算物理地址:段地址×10H + EA
- 注意段寄存器默认规则:BX/SI/DI→DS,BP→SS
- 注意数据宽度:字节操作还是字操作
- 注意字节顺序: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 | NAME1 SEGMENT ; 段的起始 |
2.3 语句分类
- 指令语句:与机器指令一一对应
- 伪指令语句:在汇编过程中起作用,不生成目标代码
- 宏指令语句:预先定义的指令代码序列(考试不要求)
2.4 语句格式
1 | 指令语句:[标号:] 操作符 操作数 [; 注释] |
三、汇编语言中的数据(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 | COUNT EQU 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 表达式类型
- 数值表达式:
DATA1 DB 25,25H,10011010B - ? 表达式:表示不预置初值
DATA2 DB ?,? - 字符串表达式:
DATA4 DB 'AB','CD' - DUP表达式:
DATA3 DB 2 DUP(2 DUP(4),15)
DUP格式:N DUP (EXP),N为重复次数,EXP为表达式
3.2.3 变量的属性
- 段属性(SEGMENT):变量所在段的起始地址(16位)
- 偏移属性(OFFSET):变量与段起始地址之间的字节数
- 类型属性(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 标号的属性
- 段属性:标号的段地址总是在CS寄存器中
- 偏移属性:标号与所在段起始地址之间的字节数
- 类型属性:
- 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 | SCORE DW 30 DUP(0) |
4.5 合成运算符(修改属性运算符)
4.5.1 PTR运算符
格式:类型 PTR 表达式
- 类型可以是BYTE、WORD、DWORD、NEAR、FAR
1 | NUM DB 1,3,5,7 |
4.5.2 THIS运算符
格式:新符号名 EQU THIS 类型
1 | DNUM EQU THIS WORD |
五、伪指令(5.4)
5.1 符号定义伪指令
5.1.1 赋值伪指令EQU
格式:符号名 EQU 表达式
- 不允许重复定义
- 解除定义需用PURGE
5.1.2 等号伪指令=
- 允许重复定义
1 | EMP = 7 |
5.1.3 类型定义伪指令LABEL
格式:变量 LABEL 类型 或 标号 LABEL 类型
1 | DATW LABEL WORD |
5.1.4 解除定义伪指令PURGE
格式:PURGE 符号1,符号2,...,符号N
5.2 段定义伪指令
5.2.1 SEGMENT和ENDS
格式:
1 | 段名 SEGMENT [定位类型][组合类型]['类别'] |
定位类型:
| 类型 | 说明 |
|---|---|
| PARA | 默认,段起始地址是16的倍数 |
| PAGE | 段起始地址是256的倍数 |
| WORD | 段起始地址是偶数 |
| BYTE | 段可从任何地址开始 |
组合类型:
| 类型 | 说明 |
|---|---|
| NONE | 默认,各段独立 |
| PUBLIC | 同名同类别段链接成一个物理段 |
| STACK | 堆栈段 |
5.2.2 ASSUME伪指令
格式:ASSUME 段寄存器:段名[,段寄存器:段名,...]
⚠️ 重要:ASSUME只建立对应关系,不装入段地址,DS/ES/SS需用MOV指令装入
1 | ASSUME CS:CODE, DS:DATA |
5.3 过程定义伪指令(PROC和ENDP)
格式:
1 | 过程名 PROC [NEAR/FAR] |
- NEAR:段内调用(默认)
- FAR:段间调用
- 过程中至少应有一条RET指令
5.4 程序标题伪指令TITLE
格式:TITLE 文本
- 文本长度不超过6个字符
5.5 地址计数器$
- 在指令中:表示当前指令的首地址
- 在伪指令中:表示当前变量的位置
1 | JNE $ + 6 ; 转向地址是JNE指令首地址加6 |
六、程序基本结构设计
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 | PUSH AX ; SP←SP-2, (SP)←AX |
⚠️ 易错点:
- 堆栈操作都是字操作
- PUSH顺序:先减SP再存数据
- POP顺序:先取数据再加SP
八、系统功能调用(DOS中断)
8.1 调用格式
1 | MOV AH, 功能号 |
8.2 常用功能号
| 功能号 | 功能 |
|---|---|
| 01H | 键盘输入字符 |
| 02H | 显示字符 |
| 09H | 显示字符串 |
| 4CH | 程序终止 |
8.3 程序结束
1 | MOV AH, 4CH |
九、DEBUG调试(考试重点)
9.1 常用命令
| 命令 | 功能 |
|---|---|
| R | 显示/修改寄存器 |
| D | 显示内存内容 |
| E | 修改内存内容 |
| U | 反汇编 |
| T | 单步执行 |
| G | 运行程序 |
| A | 汇编命令 |
9.2 堆栈操作调试
⚠️ 考试重点:画出堆栈区和SP内容变化的过程示意图
十、考试重点与易错点
10.1 重点题型
- 读程序题:分析程序功能,追踪寄存器/内存变化
- 写程序题:根据要求编写完整汇编程序
- 堆栈操作题:PUSH/POP操作过程分析
10.2 易错点提醒
- 十六进制数:以A~F开头必须加0,如0FFFFH
- EQU vs =:EQU不允许重复定义,=允许
- ASSUME:只建立对应关系,不装入段地址
- PTR运算符:临时改变类型,不改变实际存储
- 堆栈操作:都是字操作,注意SP变化方向
- TYPE运算符:标号返回-1(NEAR)或-2(FAR)
- DUP嵌套:
2 DUP(2 DUP(4),15)需正确计算
10.3 程序模板
1 | DATA SEGMENT |
附录:常用伪指令速查表
| 伪指令 | 功能 | 格式示例 |
|---|---|---|
| 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. 存储器容量
- 微型计算机以**字节(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 | CPU |
设计目标: 解决容量、速度、成本三者之间的矛盾
- 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的读/写过程
读出过程:
- 地址码A₀~A₁₁加到地址输入端
- 经X、Y译码器译码,选中存储单元
- 数据出现在I/O电路输入端
- 送读/写控制信号(R/写=1或RD=0)和片选信号(CS=0)
- 输出缓冲寄存器三态门打开,数据送到DB上
写入过程:
- 地址码加到地址输入端,选中存储单元
- 将要写入的数据放在DB上
- 加片选信号CS=0和写入信号R/写=0或WR=0
- 三态门使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 连接需要完成的任务
- 地址线连接:CPU地址总线 → 存储器地址输入
- 数据线连接:CPU数据总线 ↔ 存储器数据I/O
- 控制线连接:读/写信号(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 容量计算
例: 组成64K×8位存储器,使用8K×8位芯片
5.2 地址范围计算
起始地址: 所有片选信号有效时的最小地址
结束地址: 所有片选信号有效时的最大地址
例: 8K×8位芯片,A₀~A₁₂用于片内寻址
- 起始地址:0000H(A₁₅~A₁₃=000)
- 结束地址:1FFFH(A₁₅~A₁₃=000,A₁₂~A₀全1)
5.3 片选信号产生
全译码: 高位地址全部参加译码
部分译码: 部分高位地址参加译码
线选法: 单根地址线直接作为片选
六、考试重点与易错点
⭐ 考试重点
- 存储器分类:RAM/ROM/SRAM/DRAM的特点与区别
- SRAM工作原理:六管存储元电路、读/写过程
- 常用芯片:Intel 2114(1K×4)、Intel 6264(8K×8)的引脚与功能
- 存储器扩展:位扩展、字扩展、字位同时扩展的连接方法
- 地址译码:全译码、部分译码、线选法的原理与应用
- 容量与地址范围计算
⚠️ 易错点提醒
-
SRAM vs DRAM:
- SRAM:用触发器,不需刷新,速度快,集成度低
- DRAM:用电容,需要刷新,速度慢,集成度高
-
片选信号:
- 低电平有效(CS=0选中)
- 位扩展时CS可直接接地
- 字扩展时CS由译码器控制
-
地址线数量:
- 1K = 2¹⁰ → 10根地址线
- 8K = 2¹³ → 13根地址线
- 64K = 2¹⁶ → 16根地址线
-
扩展方法选择:
- 字长不够 → 位扩展
- 字数不够 → 字扩展
- 两者都不够 → 字位同时扩展
-
地址重叠问题:
- 线选法:必然有重叠
- 部分译码:可能有重叠
- 全译码:无重叠
📝 典型例题类型
- 画出存储器与CPU连接图
- 计算芯片数量和地址范围
- 设计地址译码电路
- 分析存储器系统的容量
- 确定各芯片的片选信号连接方式
七、常用芯片速查表
| 芯片型号 | 容量 | 结构 | 地址线 | 数据线 | 特殊说明 |
|---|---|---|---|---|---|
| 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 | 系统总线 |
1.3 I/O端口的类型
| 端口类型 | 功能 | 特点 |
|---|---|---|
| 数据端口 | 缓冲CPU与外设间的数据 | 分输入/输出两种 |
| 状态端口 | 存放外设或接口状态 | CPU可读取查询 |
| 控制端口 | 接收CPU命令 | 控制接口和设备动作 |
1.4 端口的编址方式
| 编址方式 | 特点 |
|---|---|
| I/O与内存统一编址 | I/O端口占用内存地址空间,用访存指令访问 |
| I/O端口单独编址 | I/O端口有独立地址空间,用IN/OUT指令访问 |
二、输入/输出的基本方法
2.1 I/O控制方式分类
1 | I/O控制方式 |
2.2 各方式适用场景
| 方式 | 适用设备 | 特点 |
|---|---|---|
| 程序查询 | 低速外设 | 简单但CPU效率低 |
| 中断控制 | 低/中速外设 | CPU与外设并行工作 |
| DMA | 高速外设 | 数据直接在内存与外设间传送 |
| 通道方式 | 高速外设 | 专用I/O处理器 |
| 外围处理机 | 高速外设 | 独立处理机管理I/O |
三、程序控制方式
3.1 无条件传送方式(立即传送/同步传送)
基本原理
- 假设外设已处于就绪状态
- 程序不必查询外设状态,直接执行I/O指令
- 适用于状态很少变化的简单外设
适用设备
| 类型 | 示例 |
|---|---|
| 输入设备 | 按键、开关 |
| 输出设备 | LED数码管、交通信号灯、继电器 |
接口电路特点
1 | 输入方向:外设 → 三态缓冲器 → 数据总线 |
| 传送方向 | 接口器件 | 原因 |
|---|---|---|
| 输入 | 三态缓冲器 | 输入数据保持时间长于CPU处理时间 |
| 输出 | 锁存器 | 外设速度慢,需保持数据一段时间 |
工作过程
输入操作(IN指令):
- 地址总线送端口地址 → 地址译码器
- 选通信号 M/IO=0,读信号 RD有效
- 三态缓冲器被选通,数据进入数据总线
输出操作(OUT指令):
- 地址总线送端口地址 → 地址译码器
- M/IO=0,写信号 WR=0
- 输出锁存器被选中,数据保存并输出给外设
⚠️ 注意事项
- 数据传送不能太频繁,确保每次传送外设都就绪
- 主要用于控制CPU与低速I/O接口的信息交换
【例7.1】无条件传送示例
1 | ; 两个共阴极LED接在D0和D7,地址0000H |
3.2 程序查询方式(条件传送方式)
基本原理
- CPU通过程序不断查询外设状态
- 状态不符合要求时CPU等待
- 状态符合要求时才进行I/O操作
工作流程
1 | ┌─────────────┐ |
状态标志说明
| 传送方向 | 状态标志 | 含义 |
|---|---|---|
| 输入 | READY=1 | 外设数据已准备好 |
| 输出 | BUSY=0 | 外设空闲,可接收数据 |
输入接口电路工作过程
- 外设数据准备好后,发送选通信号
- 选通信号作用:
- 将外设数据送入接口锁存器
- 使D触发器置1,READY=1
- CPU查询状态寄存器,检测READY位
- READY=1时,执行IN指令读取数据
- 读取后READY自动清0
输出接口电路工作过程
- CPU执行OUT指令,数据送入数据锁存器
- D触发器输出1,使状态寄存器BUSY=1
- 外设从接口取走数据后,发送ACK信号
- ACK使D触发器清0,BUSY=0
- CPU可开始下一次数据输出
【例7.2】程序查询方式程序
1 | ; 数据输入端口地址:52H |
程序查询方式评价
| 优点 | 缺点 |
|---|---|
| 能较好协调外设与CPU定时关系 | CPU需不断查询标志位 |
| CPU和外设操作通过状态同步 | 占用CPU大量时间 |
| 硬件结构比较简单 | CPU效率较低 |
| 无实时响应能力 |
四、中断方式
4.1 中断的意义
中断技术是现代计算机系统中非常重要的技术,主要解决CPU与各种速度外设之间的速度匹配问题。
4.2 中断技术的优点
(1)同步操作
- CPU运算速度:微秒级
- 外设运行速度:毫秒级(即使是磁盘)
- 速度矛盾:快速CPU与慢速外设
中断解决方案:
1 | 外设需要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 | MOV DX, 端口地址 ; 设置I/O端口地址 |
7.2 程序查询方式程序阅读
1 | ; 典型模式 |
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 程序阅读题
- 识别传送方式:看是否有状态查询(TEST/JZ)或直接I/O
- 确定端口地址:注意IN/OUT指令中的地址
- 分析状态位:理解TEST指令的掩码含义
- 跟踪程序流程:注意循环和条件跳转
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 | ┌──────────────┬───────────────┬──────────────┐ |
- 数据总线缓冲器:双向三态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 | D₇ D₆ D₅ D₄ D₃ D₂ D₁ D₀ |
| 位 | 字段 | 说明 |
|---|---|---|
| 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初始化编程要点
初始化步骤:
- 写入方式控制字(写入控制寄存器端口,A₁A₀=11)
- 写入计数初值(写入对应计数器端口)
- 若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 | MOV AL, 10110110B ; 方式3,通道2,二进制,先低后高 |
【例8.2】 通道0,方式1,初值2350H,十进制,端口40H~43H:
1 | MOV AL, 33H ; 计数器0,方式1,十进制,先低后高 |
1.11 8253读操作
方法一:暂停计数读取
- 先使GATE=0或关闭CLK暂停计数
- 写入控制字设定读/写方式,然后用IN指令读取
方法二:锁存读(“飞读”)
- 写入锁存命令字(SC₁SC₀ 00 XXXX),将当前计数值锁存到锁存器
- 然后用IN指令读取,不影响计数器工作
1 | ; 锁存读取通道1的16位计数值 |
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 | CPU接口 内部逻辑 外设接口 |
关键组成:
- 数据总线缓冲器:三态双向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 | D₇ D₆ D₅ D₄ D₃ D₂ D₁ D₀ |
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 | D₇ D₆ D₅ D₄ D₃ D₂ D₁ D₀ |
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 必须掌握的核心内容
-
8255方式控制字的编写
- 特征位D₇=1
- A口/B口方式选择
- 各口输入/输出方向设定
- C口高低4位方向设定
-
8255方式0的16种工作状态组合
- 能根据需求快速确定控制字
- 常见配置:全输出(80H)、全输入(9BH)、A口输出B口输入(82H)等
-
C口置位/复位控制字
- 特征位D₇=0
- 选择要操作的C口位
- 置位(D₀=1)或复位(D₀=0)
-
8255端口寻址
- A₁A₀编码:00=A口,01=B口,10=C口,11=控制寄存器
- 与CS̄、RD̄、WR̄配合完成读写操作
-
8253方式控制字
- SC₁SC₀选择计数器
- RL₁RL₀设定读/写格式
- M₂M₁M₀选择工作方式
- BCD选择计数进制
3.2 常见考试题型
题型1:根据要求写控制字
例:A口输出、B口输入、C口高4位输入、C口低4位输出,方式0
1 | 控制字 = 1 0 0 1 0 0 1 0 = 92H |
题型2:初始化编程
例:8255端口地址200H~203H,A口输出、B口输入、C口全输出
1 | ; 初始化8255 |
题型3:C口置位/复位操作
例:使PC₃输出高电平
1 | MOV AL, 07H ; D₇=0(特征),D₃D₂D₁=011(PC₃),D₀=1(置位) |
题型4:方式0综合应用
例:A口接LED(输出),B口接开关(输入),C口低4位接开关(输入),C口高4位接LED(输出)
1 | ; 初始化 |
3.3 易错点提醒⚠️
- 控制字写入端口地址:控制寄存器地址 = 基地址 + 3(A₁A₀=11)
- 方式控制字特征位:D₇=1是方式控制字,D₇=0是C口置位/复位控制字
- 端口方向不能搞混:输入=1,输出=0(容易记反!)
- C口的两重性:
- C口可以整体读写(A₁A₀=10时)
- C口也可以按位置位/复位(通过控制字)
- 读C口时读到的是引脚状态,与控制字设定的方向无关
- 方式0下C口不能按位操作:方式0下C口作为整体数据口使用
- 8253控制字中SC₁SC₀=11是非法选择,不是选所有计数器
- 8253计数初值0对应最大计数值:二进制时65536,BCD时10000
- RESET信号:8255复位后所有口设为输入方式(控制字为9BH)
- 输入输出端口指令:
- 输入:
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 | 写控制寄存器 | 写控制寄存器 |
