首页/计算机组成原理/指令系统/指令系统设计 🔗 在 Obsidian 中打开
计算机组成原理 · 指令系统

指令系统设计

重要度 ⭐⭐⭐⭐指令系统CISCRISC寻址方式
速查
ISA 是软硬件接口:指令格式 + 数据类型 + 寻址方式 + 寄存器组织 + 中断机制。寻址方式决定访问次数:立即/寄存器 0 次、直接/变址等 1 次、间接 2 次。基址 OS 设、变址 用户设。

基本概念

指令系统(Instruction Set Architecture, ISA)是软件和硬件之间的接口,定义了程序员(或编译器)可见的机器资源。

ISA 包括:

  • 指令格式:操作码 + 地址码
  • 数据类型:整数、浮点、字符等
  • 寻址方式:操作数的获取方式
  • 寄存器组织:通用寄存器数量、用途
  • 中断机制:异常处理方式

指令格式分类

按地址码个数分类

指令格式示例说明
三地址指令OP A1, A2, A3A3 = A1 OP A2
二地址指令OP A1, A2A1 = A1 OP A2
一地址指令OP A1ACC = ACC OP A1
零地址指令OP如 NOP、RET

定长指令 vs 变长指令

  • 定长指令:所有指令长度相同,取指和译码简单(CISC 中少见)
  • 变长指令:指令长度不同,编码灵活但取指复杂

常见寻址方式

寻址方式有效地址说明
立即寻址操作数在指令中速度快,灵活性低
直接寻址$EA = A$地址码直接给出
间接寻址$EA = (A)$地址码指向的内存单元存 EA
寄存器寻址$EA = R$操作数在寄存器中
寄存器间接$EA = (R)$寄存器中存的是地址
基址寻址$EA = (BR) + A$基址寄存器 + 偏移
变址寻址$EA = (IX) + A$变址寄存器 + 偏移
相对寻址$EA = (PC) + A$PC + 偏移,用于跳转
堆栈寻址$EA$ = 栈顶PUSH/POP 操作

CISC vs RISC

CISC(复杂指令集计算机)

代表:x86 架构(Intel/AMD)。特点:指令数量多(数百条)、指令长度不固定、寻址方式多、指令功能复杂、大多数指令多个时钟周期完成、微程序控制。

RISC(精简指令集计算机)

代表:ARM、MIPS、RISC-V。特点:指令数量少(几十到上百条)、指令长度固定、寻址方式少、指令功能简单、大多数指令 1 个时钟周期完成、硬布线控制、Load/Store 架构。

对比总结

特性CISCRISC
指令数量多(>200)少(<100)
指令长度可变固定
寻址方式多(>10 种)少(<5 种)
访存指令多种指令可访存仅 Load/Store
通用寄存器较少较多(>32)
流水线难以优化容易实现
控制方式微程序硬布线
代码密度较低
编译器复杂度

手算示例

例 1:指令格式设计

某机有 256 个操作码、64 个寄存器,采用定长指令字 32 位:

操作码位数 = ⌈log₂256⌉ = 8 位
寄存器编号位数 = ⌈log₂64⌉ = 6 位

三地址指令(寄存器型):
  操作码(8) + R1(6) + R2(6) + R3(6) = 26 位,剩余 6 位可扩展
二地址指令(寄存器 + 立即数):
  操作码(8) + R1(6) + 立即数(18)
  立即数范围:-131072 ~ 131071

例 2:基址寻址和变址寻址的区别

基址寻址($EA = BR + A$):BR 由操作系统设置、用户不可修改,A 可改;用途为程序重定位、多道程序。

变址寻址($EA = IX + A$):IX 由用户设置,A 由指令给出(常为数组首地址);用途为数组访问、循环。

例 3:相对寻址计算

$PC = 0x1000$,指令 `JMP +0x20`:

EA = PC + 0x20 = 0x1000 + 0x20 = 0x1020
注意:执行时 PC 已更新为下一条指令地址
若指令长度 2B,则 PC = 0x1002
EA = 0x1002 + 0x20 = 0x1022

例 4:操作码扩展

定长指令字 16 位、4 位基本操作码,设计 15 三地址 + 15 二地址 + 15 一地址 + 16 零地址指令:

三地址:4 位 OP + 4+4+4 = 16 位,取 15 种(留 1111 扩展)
二地址:1111 + 4 位 OP + 4+4,取 15 种(留 1111_1111)
一地址:1111_1111 + 4 位 OP + 4,取 15 种
零地址:1111_1111_1111 + 4 位 OP,16 种

指令系统设计原则

  1. 完备性:指令类型齐全
  2. 规整性:对称、均匀、数据类型一致
  3. 正交性:操作码和寻址方式独立
  4. 效率:常用指令执行快
  5. 兼容性:向后兼容

记忆卡片

CISC 和 RISC 的核心区别?
CISC 指令复杂多样,RISC 指令简单统一。记忆:CISC = 一条指令做很多事;RISC = 很多指令各做一件事。
为什么 RISC 更适合流水线?
固定指令长度 + 单周期执行 + Load/Store 架构 → 流水线更容易设计,冒险更少。记忆:规则的东西流水线喜欢。
基址寻址和变址寻址的区别?
基址 = OS 设基址(重定位);变址 = 用户设变址(数组)。记忆:基址管「在哪」,变址管「偏移多少」。
操作码扩展的本质?
用短指令留出的编码空间来编码长指令的操作码。记忆:短的省空间给长的用。

交互动画 · 寻址方式选型

指令中的地址码字段 访存次数:
选择寻址方式,查看有效地址 EA 与访存次数
点击上方按钮开始
示意图:上方橙色 = 操作码、绿色 = 地址码;下方绿色格子表示需要访问内存的次数(0/1/2 次)。

相关知识点

cisc-and-risc instruction-length-and-opcode

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。