地址码字段用于指定操作数的存放地址。根据地址码的个数,指令可分为以下几种结构。地址码的解析方式由 寻址技术 决定。

四地址指令

结构:OP | A1 | A2 | A3 | A4

  • A1, A2:操作数地址。
  • A3:结果存放地址。
  • A4:下一条指令的地址。
  • 现状:仅存在于设计者的草稿纸上,实际系统中通过硬件简化。

三地址指令

结构:OP | A1 | A2 | A3

  • 简化:取消 A4,由 CPU 内部的专用寄存器 程序计数器 (PC) 自动指向下一条指令(通常为 PC+1,这里的“1”指一条指令的长度)。 重点
  • 访存次数:执行一条三地址指令通常需要访问 4 次 内存(取指令、取 A1、取 A2、存 A3)。 重点
  • 特点:代码可读性好,指令条数少,但单条指令较长。

二地址指令

结构:OP | A1 | A2

  • 简化:取消 A3,结果通常存回 A1(目的操作数地址)。
  • 访存次数:通常仍需访问 4 次 内存(取指令、取 A1、取 A2、存回 A1)。
  • 特点:会破坏源操作数(A1 的原始内容被覆盖)。

一地址指令

结构:OP | A1

  • 简化:隐含第二个操作数,通常存放在 CPU 内部的 累加寄存器 (ACC) 中。
  • 访存次数:仅需访问 2 次 内存(取指令、取 A1),结果存回 ACC。 重点
  • 特点:访存次数减少,但代码可读性较差,指令条数多。

零地址指令

结构:OP

  • 特点:不给出操作数地址。
  • 应用:通常与 堆栈 (Stack) 结构配合使用,遵循后进先出 (LIFO) 原则。

结构对比实例

计算

  • 三地址指令:需 5 条指令,访存次数较少,代码短,可读性强。
  • 二地址指令:需 7 条指令(需额外的数据移动),总访存次数增加。
  • 一地址指令:需 9 条指令,访存次数减少(因为使用了 ACC),但指令条数最多,可读性最差。
  • 结论:三地址指令在程序长度和便利性上有优势;一地址指令在减少硬件复杂度和单条指令访存上有优势。