指令格式举例

本文主要用 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. 指令字长可变(1~6 字节)
  2. 地址格式分类(零地址、一地址、二地址)及对应指令示例
  • 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 架构的典型特征 → 灵活、强大、但解码复杂


❗ 注意事项 & 常见误区

  1. "地址格式" ≠ "寻址方式"

    • 地址格式是按操作数个数分(零/一/二地址)
    • 寻址方式是按如何计算有效地址分(直接、间接、基址、变址等)
  2. 字节数计算要准确

    • 例如 ADD AX, [3048H] 是 4 字节:操作码(1) + ModR/M(1) + 偏移(2)
  3. 段间 vs 段内调用

    • 段内只改 IP,段间改 CS:IP → 影响堆栈保存内容
  4. 立即数大小决定字节数

    • 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 时代

相关推荐
今儿敲了吗2 小时前
32| 伐木
数据结构·笔记·学习·算法
日更嵌入式的打工仔2 小时前
FIQ 与 IRQ
arm开发·笔记
左左右右左右摇晃2 小时前
SpringBoot 自动装配原理
笔记
iFeng的小屋2 小时前
【2026最新xhs爬虫】用Python批量爬取关键词笔记,异步下载高清图片!
笔记·爬虫·python
今天你TLE了吗2 小时前
JVM学习笔记:第五章——堆内存
java·jvm·笔记·后端·学习
火红色祥云2 小时前
Python机器学习入门与实战_笔记
笔记·python·机器学习
IT19952 小时前
Java文档阅读笔记-AI LangChain4j - Single User Chat Memory with AI Services
笔记
每天都要加加油王得坤2 小时前
langchain学习笔记
笔记·学习·langchain
左左右右左右摇晃3 小时前
SpringBoot 实现「新增班级 + 批量关联教师」多对多业务实战
笔记