跳转至

指令系统

概述

指令系统是计算机所能执行的全部指令的集合,它表征了计算机的基本功能,是计算机硬件和软件的主要界面。指令系统的设计直接影响计算机的性能和效率。

指令的基本格式

指令的组成

一条指令通常由两部分组成:

指令格式

操作码(OP) 地址码(Ad)
指明操作类型 指明操作数地址

操作码的设计

1. 定长操作码

定长操作码

操作码长度固定,便于译码,但浪费编码空间。

特点:

  • 操作码长度固定
  • 译码简单,速度快
  • 编码空间利用率低
  • 适用于指令数量较少的情况

示例:

Text Only
操作码长度: 4位
可表示指令数: 2^4 = 16条

2. 变长操作码

变长操作码

操作码长度可变,节省编码空间,但译码复杂。

特点:

  • 操作码长度可变
  • 编码空间利用率高
  • 译码复杂,速度较慢
  • 适用于指令数量较多的情况

扩展技术:

  • 操作码扩展技术
  • 频率优先的编码方法

地址码的设计

根据地址码的数量,指令可以分为以下几种格式:

1. 四地址指令

格式: OP A1 A2 A3 A4

功能: (A1) OP (A2) → A3, 下条指令地址为A4

特点:

  • 直观,易于理解
  • 指令长度长
  • 程序无法自动顺序执行

2. 三地址指令

格式: OP A1 A2 A3

功能: (A1) OP (A2) → A3

特点:

  • 常见的指令格式
  • 指令长度适中
  • PC自动提供下条指令地址

示例:

Text Only
ADD R1, R2, R3    // R3 = R1 + R2
SUB A, B, C       // C = A - B

3. 二地址指令

格式: OP A1 A2

功能: (A1) OP (A2) → A1

特点:

  • 指令长度较短
  • 一个操作数被覆盖
  • 广泛应用

示例:

Text Only
ADD R1, R2    // R1 = R1 + R2
MOV A, B      // A = B

4. 一地址指令

格式: OP A1

功能: (ACC) OP (A1) → ACC

特点:

  • 指令长度短
  • 需要累加器(ACC)
  • 适用于累加器型机器

示例:

Text Only
1
2
3
LOAD A    // ACC = (A)
ADD B     // ACC = ACC + (B)
STORE C   // (C) = ACC

5. 零地址指令

格式: OP

功能: 用于堆栈操作

特点:

  • 指令长度最短
  • 操作数隐含在堆栈中
  • 适用于堆栈型机器

示例:

Text Only
1
2
3
PUSH A    // 将A压入堆栈
POP B     // 从堆栈弹出送B
ADD       // 栈顶两元素相加

寻址方式

寻址方式

寻址方式是指确定操作数有效地址的方法。

1. 立即寻址

操作数在指令中

格式: OP #data

特点:

  • 操作数直接在指令中
  • 执行速度快
  • 操作数固定,灵活性差

示例:

Text Only
MOV R1, #100    // R1 = 100
ADD R2, #5      // R2 = R2 + 5

2. 直接寻址

指令给出操作数的直接地址

EA = Ad

特点:

  • 有效地址在指令中
  • 寻址简单
  • 地址空间受限

示例:

Text Only
LOAD 1000    // ACC = M[1000]
STORE 2000   // M[2000] = ACC

3. 间接寻址

指令给出操作数地址的地址

EA = M[Ad]

特点:

  • 有效地址在存储器中
  • 寻址灵活
  • 需要多次访存

示例:

Text Only
LOAD @1000    // ACC = M[M[1000]]

4. 寄存器寻址

操作数在寄存器中

EA = Ri

特点:

  • 操作数在寄存器中
  • 执行速度快
  • 无需访存

示例:

Text Only
MOV R1, R2    // R1 = R2
ADD R1, R3    // R1 = R1 + R3

5. 寄存器间接寻址

寄存器给出操作数地址

EA = M[Ri]

特点:

  • 有效地址在寄存器中
  • 比间接寻址快
  • 适合指针操作

示例:

Text Only
LOAD (R1)    // ACC = M[R1]

6. 相对寻址

相对于PC的寻址

EA = (PC) + Ad

特点:

  • 有效地址 = PC + 位移量
  • 适合转移指令
  • 程序浮动方便

示例:

Text Only
JMP +10    // PC = PC + 10

7. 基址寻址

相对于基址寄存器的寻址

EA = (BR) + Ad

特点:

  • 有效地址 = 基址 + 位移量
  • 适合多道程序设计
  • 实现程序重定位

示例:

Text Only
LOAD 100(RB)    // ACC = M[RB + 100]

8. 变址寻址

相对于变址寄存器的寻址

EA = (IX) + Ad

特点:

  • 有效地址 = 变址 + 形式地址
  • 适合数组操作
  • 便于循环处理

示例:

Text Only
LOAD 1000(IX)    // ACC = M[IX + 1000]

指令系统的设计原则

CISC与RISC

指令系统设计有两种主要流派:

CISC (Complex Instruction Set Computer)

特点:

  • 指令系统复杂
  • 指令功能强大
  • 指令长度可变
  • 寻址方式多样
  • 微程序控制

代表: x86系列

优点:

  • 指令功能强
  • 目标代码短
  • 兼容性好

缺点:

  • 指令系统复杂
  • 执行效率低
  • 难以优化

RISC (Reduced Instruction Set Computer)

特点:

  • 指令系统简单
  • 指令功能单一
  • 指令长度固定
  • 寻址方式简单
  • 硬布线控制

代表: ARM, MIPS, RISC-V

优点:

  • 指令系统简单
  • 执行效率高
  • 易于优化
  • 适合流水线

缺点:

  • 指令功能弱
  • 目标代码长
  • 编译器要求高

参考资料