Skip to content

指令格式与操作类型

考情分析

指令格式和操作码扩展是 408 指令系统的基础,常以选择题或大题第一小问出现。零地址指令的使用场景和三地址指令的操作流程要能准确描述。

指令的基本结构

一条指令由两部分组成:

操作码(OP)+地址码
  • 操作码:指定操作类型(加法、移位、跳转等),位数决定可以表示的指令条数
  • 地址码:指定操作数的来源和结果的去处

按地址码个数分类

三地址指令

OP  A1, A2, A3

含义:(A1) OP (A2)A3

例:ADD R1, R2, R3(R1 + R2 → R3)

  • 三个操作数地址均显式指定
  • 指令长,但不破坏源操作数

二地址指令

OP  A1, A2

含义:(A1) OP (A2)A1(结果存回第一个操作数)

例:ADD R1, R2(R1 + R2 → R1)

  • 最常用的格式,x86 等 CISC 架构广泛使用
  • 会破坏源操作数 A1

一地址指令

OP  A1

含义:(ACC) OP (A1)ACC(隐含使用累加器 ACC)

例:ADD X(ACC + X → ACC)

  • 隐式操作数是累加器,无需在指令中指定
  • 早期累加器架构(如 8080)广泛使用

零地址指令

OP

两种情况:

  1. 无需操作数NOP(空操作)、HLT(停机)
  2. 操作数隐含在栈顶:堆栈型机器中,操作数从栈顶自动弹出,结果压回栈顶

例:后缀表达式计算机,ADD 弹出栈顶两个数相加后压回。

按操作类型分类

类别典型指令说明
数据传送MOV, LOAD, STORE寄存器与存储器之间的数据移动
算术运算ADD, SUB, MUL, DIV整数/浮点运算
逻辑运算AND, OR, NOT, XOR按位逻辑操作
移位操作SHL, SHR, ROL, ROR算术/逻辑/循环移位
转移指令JMP, JZ, JNZ, CALL, RET改变程序流
输入输出IN, OUTI/O 操作
特权指令中断、停机等只能在核心态执行

指令格式设计

定长操作码

所有指令的操作码位数相同。

  • 简单,便于硬件译码(直接查表)
  • 灵活性差,不同类型指令地址码位数一致

变长操作码(扩展操作码)

不同指令的操作码位数不同,短操作码对应地址多的指令,长操作码对应地址少的指令。

详见「指令设计(操作码扩展)」篇。

交互可视化

加载可视化中...

指令字长

  • 单字长指令:一条指令占一个机器字
  • 半字长指令:操作简单,压缩码空间
  • 双字长指令:操作数需要更多位(如包含立即数或长地址)

注意区分:

  • 机器字长:CPU 一次能处理的数据位数(ALU 位宽)
  • 指令字长:一条指令的二进制长度
  • 存储字长:存储器每个单元的位数

三者可以相同,也可以不同。

考点清单

  • 三地址:OP A1, A2, A3(A1 OP A2 → A3)
  • 二地址:OP A1, A2(A1 OP A2 → A1,破坏A1)
  • 一地址:隐含累加器 ACC
  • 零地址:NOP/HLT,或堆栈操作
  • 操作码位数 n → 最多表示 2n 条指令
  • 机器字长 ≠ 指令字长 ≠ 存储字长,三者独立

真题练习

相关真题(8题)

2026Q16选择题2分

ISA规定的内容与微架构实现的区分

2026Q17选择题2分

不同指令类型对PC的影响

2025Q16选择题2分

ISA规定内容与微架构实现的区分

2024Q13选择题2分

CPU直接执行的指令类型辨析

2022Q18选择题2分

ISA规定的内容辨析

2021Q17选择题2分

对汇编语言程序员可见的寄存器

2011Q17选择题2分

无符号数比较大于转移的标志位条件

2010Q18选择题2分

对汇编语言程序员可见与透明的寄存器