本文主要用 IBM360、Intel x86 的指令集作为例子。


这张图片展示的是 IBM System/360 计算机的指令格式(Instruction Format),属于计算机组成原理或体系结构课程中的经典内容。它详细列出了 IBM 360 架构中五种主要的指令格式:RR、RX、RS、SI、SS,并说明了每种格式的字段划分、位数分配以及对应的寻址方式和操作类型。
IBM360 总体说明
- IBM System/360 是 IBM 在 1964 年推出的一系列大型机,其设计影响深远,奠定了现代计算机体系结构的基础。
- 所有指令长度固定为 32位(4字节),但根据功能不同,内部字段划分不同。
- 每种格式都以 OP(操作码) 开头,占8位(1字节),用于指定要执行的操作(如加法、跳转等)。
- 其余字段用于指定操作数(寄存器、内存地址、立即数等)。
🔍 各指令格式详解
1️⃣ RR 格式 ------ Register-Register(寄存器 - 寄存器)
| OP (8) | R₁ (4) | R₂ (4) |
- 用途:两个操作数都在寄存器中。
- 示例指令 :
AR R1, R2(将 R2 加到 R1) - 寻址方式:直接寄存器寻址。
- 特点:最短、最快,因为不涉及内存访问。
- 标注:"二地址 R-R" → 表示有两个操作数,都是寄存器。
2️⃣ RX 格式 ------ Register-Indexed(寄存器 + 变址)
| OP (8) | R₁ (4) | X (4) | B (4) | D (12) |
- 用途:一个操作数在寄存器 R₁,另一个在内存,通过"基址+变址+位移"计算地址。
- 地址计算公式 :
有效地址 = [B] + [X] + D[B]:基址寄存器内容[X]:变址寄存器内容D:12位位移量(有符号)
- 示例指令 :
A R1, D(X,B)(将内存位置的值加到 R1) - 标注:"二地址 R-M"、"基址加变址寻址"
✅ 这是最常用的格式之一,支持灵活的内存访问。
3️⃣ RS 格式 ------ Register-Storage(寄存器 - 存储)
| OP (8) | R₁ (4) | R₃ (4) | B (4) | D (12) |
- 用途:类似 RX,但第二个操作数是寄存器 R₃(而不是变址寄存器 X),常用于加载/存储多个寄存器或字符串操作。
- 地址计算 :
有效地址 = [B] + D - 示例指令 :
LM R1,R3,D(B)(从内存加载多个寄存器) - 标注:"三地址 R-M"、"基址寻址"
⚠️ 注意:虽然叫"三地址",但实际上只有两个操作数(R₁ 和 内存),第三个字段 R₃ 是辅助寄存器(比如用于循环计数或掩码)。
4️⃣ SI 格式 ----- Storage-Immediate(存储 - 立即数)
| OP (8) | I (8) | B (4) | D (12) |
- 用途:一个操作数是8位立即数 I,另一个是内存单元。
- 地址计算 :
有效地址 = [B] + D - 示例指令 :
MVI D(B), I(将立即数 I 存入内存位置) - 标注:"立即数 -- M"、"基址寻址"
💡 常用于初始化内存变量或设置标志位。
5️⃣ SS 格式 ----- Storage-Storage(存储 - 存储)
| OP (8) | L (8) | B₁ (4) | D₁ (12) | B₂ (4) | D₂ (12) |
- 用途:两个操作数都在内存中,常用于字符串操作或块数据传输。
- L 字段:长度字段(8位),表示操作的数据长度(如字符个数)。
- 地址1 :
[B₁] + D₁ - 地址2 :
[B₂] + D₂ - 示例指令 :
MVCL R1,R2(移动字符长串)、CLC(比较字符) - 标注:"二地址 M-M"、"基址寻址"
🧩 这是最复杂的格式,总长仍为32位,但包含两个完整的内存地址和一个长度字段,适合处理可变长度数据。
📊 对比总结表
| 格式 | 操作数类型 | 地址计算方式 | 典型应用 | 字段数 |
|---|---|---|---|---|
| RR | 寄存器 - 寄存器 | 无 | 算术逻辑运算 | 3 |
| RX | 寄存器 - 内存 | [B] + [X] + D | 通用内存访问 | 5 |
| RS | 寄存器 - 内存 | [B] + D | 多寄存器加载/存储 | 5 |
| SI | 立即数 - 内存 | [B] + D | 初始化内存 | 4 |
| SS | 内存 - 内存 | [B₁]+D₁, [B₂]+D₂ + 长度 L | 字符串/块操作 | 6 |
🎯 教学意义
这张图常用于讲解:
- 指令集架构(ISA)的设计思想
- 如何平衡指令长度、灵活性与硬件复杂度
- 寻址方式的多样性(直接、基址、变址、立即数等)
- CISC(复杂指令集)的特点:IBM 360 是典型的 CISC 架构,指令格式多样,功能强大,但解码复杂。
❗ 注意事项
- 所有字段位数加起来必须等于32位(验证一下:RR=8+4+4=16?不对!等等...)
⚠️ 重要纠正:
实际上,IBM 360 的指令是 按字节编址 ,每条指令长度为 2字节、4字节或6字节,不是全部32位!
但在本图中,所有格式都被画成 32位(4字节),这是为了教学简化,统一展示字段分布。实际中:
- RR:2字节(16位)→ OP(8)+R1(4)+R2(4)
- RX/RS/SI:4字节(32位)
- SS:6字节(48位)→ 但图中只画了前4字节?不,图中 SS 格式确实是6字段共 8+8+4+12+4+12 = 48位!
✅ 所以这张图其实是 混合了真实结构与教学简化:
- RR 应该是16位,但图中画成32位是为了对齐其他格式。
- SS 是48位,图中完整画出。
- 其他是32位。
👉 因此,在学习时要注意:IBM 360 指令长度可变,并非全是32位。这张图是为了便于对比而做的标准化呈现。
✅ 总结
这张图清晰地展示了 IBM 360 架构如何通过不同的指令格式来支持丰富的操作类型和寻址模式,体现了早期大型机设计的精巧与实用性。理解这些格式有助于掌握:
- 指令编码的基本方法
- 寻址机制的实现
- CISC 架构的核心特征
- 历史架构对现代 CPU 的影响(如 x86 也继承了类似的复杂指令格式)
如果你正在学习《计算机组成原理》或《体系结构》,这张图是非常经典的考点!
📌 建议记忆口诀:
"RR快,RX灵,RS多,SI简,SS长。"
------ 分别对应速度、灵活性、多功能、简单性、大数据处理能力。
希望这个讲解对你彻底理解 IBM 360 指令格式有所帮助!如有具体指令例子或想深入某一种格式,欢迎继续提问 😊
Intel 8086 详细讲解

这张图片是关于 Intel 8086 微处理器指令系统的基础讲解,属于计算机组成原理或汇编语言课程中的经典内容。它重点介绍了 8086 指令的两个核心特性:
- 指令字长可变(1~6 字节)
- 地址格式分类(零地址、一地址、二地址)及对应指令示例
- Intel 8086 是 1978 年推出的 16 位微处理器,是 x86 架构的开端。
- 它采用 CISC(复杂指令集) 设计,指令长度不固定,从 1 到 6 字节不等。
- 支持多种寻址方式和操作数类型(寄存器、立即数、内存),因此指令编码灵活但复杂。
(1) 指令字长:1 ~ 6 个字节
✅ 关键点:8086 指令长度不是固定的!
这与前面讲的 IBM 360 类似,但 8086 更"自由"------根据操作数和操作码不同,指令长度动态变化。
示例对比:
➤ INC AX ------ 1 字节
- 含义:将寄存器 AX 的值加 1。
- 为什么只有 1 字节?
- 操作码本身隐含了操作对象(AX)。
- 不需要额外指定操作数地址或数据。
- 编码紧凑高效。
➤ MOV WORD PTR[0204], 0138H ------ 6 字节
- 含义 :将立即数
0138H存入内存地址0204H处的一个字(2 字节)。 - 为什么需要 6 字节?
- 第 1 字节:操作码(MOV)
- 第 2 字节:ModR/M 字节(指定操作数为内存 + 立即数)
- 第 3~4 字节:偏移地址
0204H(16 位) - 第 5~6 字节:立即数
0138H(16 位)
💡 注意:
WORD PTR是汇编语法,告诉 assembler 要操作的是"字"(2 字节),而不是字节。
(2) 地址格式分类
这是按操作数个数对指令进行分类的方法,常用于教学分析:
| 类型 | 说明 | 示例 | 字节数 | 特点 |
|---|---|---|---|---|
| 零地址 | 无操作数 | NOP | 1 | 最简单,仅执行空操作 |
| 一地址 | 一个操作数 | CALL 段间/段内调用 | 3~5 | 用于控制转移 |
| 二地址 | 两个操作数 | ADD AX, BX / [3048H] 等 | 2~4 | 最常见,算术/logic 运算 |
🔹 零地址指令:NOP
asm
NOP ; No Operation
- 功能:什么都不做,常用于延时、占位、对齐。
- 编码 :单字节
90H - 用途:调试、填充、同步等。
🔹 一地址指令:CALL(子程序调用)
➤ CALL 段内调用 ------ 3 字节
- 含义:在同一代码段内跳转到子程序。
- 结构 :
- 第 1 字节:操作码
- 第 2~3 字节:相对偏移量(16 位有符号数)
- 特点:只需保存 IP(指令指针),不需保存 CS(代码段寄存器)。
➤ CALL 段间调用 ------ 5 字节
- 含义:跨段调用子程序(改变 CS:IP)。
- 结构 :
- 第 1 字节:操作码
- 第 2~3 字节:目标偏移地址(IP)
- 第 4~5 字节:目标段地址(CS)
- 特点:需同时保存和恢复 CS 和 IP,开销更大。
🧠 小知识:现代 x86 中,"段"的概念已弱化,但在 8086 时代非常重要!
🔹 二地址指令:ADD(加法)
这类指令有两个操作数:目的操作数 和 源操作数。
➤ ADD AX, BX ------ 2 字节(寄存器 - 寄存器)
- 含义:AX = AX + BX
- 编码 :
- 第 1 字节:操作码 + ModR/M(指示两个寄存器)
- 无需额外数据
- 最快:因为都在 CPU 内部,无需访问内存。
➤ ADD AX, 3048H ------ 3 字节(寄存器 - 立即数)
- 含义:AX = AX + 3048H
- 编码 :
- 第 1 字节:操作码
- 第 2~3 字节:立即数
3048H
- 注意:这里立即数是 16 位,所以占 2 字节。
➤ ADD AX, [3048H] ------ 4 字节(寄存器 - 存储器)
- 含义:AX = AX + 内存地址 3048H 处的内容
- 编码 :
- 第 1 字节:操作码
- 第 2 字节:ModR/M(指示操作数为直接内存地址)
- 第 3~4 字节:偏移地址
3048H
- 最慢:需要访问内存,可能涉及总线周期。
⚠️ 注意:这里的
[3048H]表示"取该地址的内容",而不是地址本身。
📊 总结对比表
| 指令类型 | 示例 | 操作数来源 | 字节数 | 速度 | 应用场景 |
|---|---|---|---|---|---|
| 零地址 | NOP | 无 | 1 | 最快 | 占位、延时 |
| 一地址 | CALL 段内 | 相对偏移 | 3 | 快 | 子程序调用 |
| CALL 段间 | 绝对段+偏移 | 5 | 较慢 | 跨段调用 | |
| 二地址 | ADD AX, BX | 寄存器 - 寄存器 | 2 | 最快 | 高速运算 |
| ADD AX, 3048H | 寄存器 - 立即数 | 3 | 快 | 常量加法 | |
| ADD AX, [3048H] | 寄存器 - 内存 | 4 | 慢 | 访问变量/数组元素 |
🎯 教学意义
这张图帮助学生理解:
✅ 指令长度为何可变 → 因为操作数类型和数量不同
✅ 如何通过地址格式分类指令 → 便于分析和设计 CPU 解码逻辑
✅ 不同寻址方式的代价差异 → 寄存器 > 立即数 > 内存
✅ x86 CISC 架构的典型特征 → 灵活、强大、但解码复杂
❗ 注意事项 & 常见误区
-
"地址格式" ≠ "寻址方式"
- 地址格式是按操作数个数分(零/一/二地址)
- 寻址方式是按如何计算有效地址分(直接、间接、基址、变址等)
-
字节数计算要准确
- 例如
ADD AX, [3048H]是 4 字节:操作码(1) + ModR/M(1) + 偏移(2)
- 例如
-
段间 vs 段内调用
- 段内只改 IP,段间改 CS:IP → 影响堆栈保存内容
-
立即数大小决定字节数
- 8 位立即数 → 1 字节;16 位立即数 → 2 字节
记忆口诀
"零地 NOP 一字节,一地 CALL 分三段;
二地 ADD 看 operand,寄存最快内存慢。"
与 IBM 360 对比(延伸思考)
| 特性 | IBM 360 | Intel 8086 |
|---|---|---|
| 指令长度 | 固定 2/4/6 字节 | 可变 1~6 字节 |
| 地址格式 | RR/RX/RS/SI/SS | 零/一/二地址 |
| 寻址方式 | 基址+变址+位移 | 直接、寄存器、立即数等 |
| 架构风格 | 大型机 CISC | 微处理器 CISC |
| 影响 | 奠定大型机标准 | 开创 x86 PC 时代 |