指令系统

一、指令系统基础概念

  1. 计算机层级结构

    • 6级模型:应用语言机器 → 高级语言机器 → 汇编语言机器 → 操作系统机器 → 传统机器语言机器 → 微程序机器。
    • 设计起点:从中间(软硬件交界面)开始设计,ISA是软硬件交互的核心。
  2. 指令集体系结构(ISA)

    • 定义:硬件与软件的接口规范,包括指令集、指令格式、寻址方式、数据类型等。
    • 核心要素
      • 指令集:操作集合(操作码+操作数+结果)及错误处理(如溢出)。
      • 指令格式:变长指令(灵活但译码复杂) vs 定长指令(译码简单,RISC常用)。
    • 与微架构(μArch)区别
      • ISA是规范(软件可见),μArch是硬件实现(如流水线、Cache,软件不可见)。
      • 关键说明:Page 6指出"Cache是否属于Architecture"存疑(实际属于μArch)。
  3. 指令与微架构

    • 指令:信息处理的原子单位,改变机器状态(如寄存器、内存值)。
    • 微架构:根据指令改变处理器状态(如执行ADD后更新寄存器)。

二、指令系统演化

  • 历史阶段
    累加器(EDSAC)→ 累加器+索引寄存器 → GPR通用寄存器 → CISC复杂指令集(VAX)→ RISC精简指令集(MIPS/SPARC/RISC-V)。
  • 关键转折:RISC因CISC指令利用率低(20%指令占80%运行时间)兴起。

三、寻址技术

  1. 编址方式

    • 编址单位:字节编址(主流)、字编址、位编址、块编址。
    • 字节编址问题(Page 10):
      • 地址浪费(32位机浪费2位)、存储空间浪费、大端/小端问题。
    • 大小端(Endianness)
      • 大端(Big Endian):高位字节存低地址(如SPARC)。
      • 小端(Little Endian):低位字节存低地址(如x86)。
      • 影响:数据存储(如0x12345678在内存的排列)、文件格式(JPEG大端/BMP小端)、网络通信(需统一为网络字节序NBO)。
    • 零地址空间
      • 3个空间(寄存器/主存/I/O独立编址)→ 2个空间(主存与I/O统一编址)→ 1个空间(寄存器/I/O/主存连续编址)。
    • I/O设备编址
      • 内存映射I/O(现代主流) vs 专用I/O指令(历史方案)。
  2. 定位方式

    • 静态定位:程序装入时确定物理地址。
    • 动态定位:执行时按需确定地址(支持虚存)。
    • 关键区别:动态定位支持运行时地址重定位(如页表机制)。
  3. 寻址方式

    • 七种基本类型
      寻址方式 示例
      立即数 ADD R1, #5
      直接寻址 LOAD R1, [0x100]
      寄存器间接 LOAD R1, [R2]
      寄存器相对 LOAD R1, [R2+4]
      基址变址 LOAD R1, [R2+R3]
      相对基址变址 LOAD R1, [R2+R3+8]
    • 编码方法
      • 操作码隐含寻址方式(适合Load-Store结构)。
      • 专用寻址字段(灵活但增加指令长度)。

四、指令优化设计

  1. 操作码优化

    • 哈夫曼编码:高频指令用短码,低频用长码(最小化平均码长)。
      • 公式:信息熵 $H = -\sum p_i \log_2 p_i$(理论最短平均码长)。
    • 扩展操作码:定长与哈夫曼的折中(如2-4扩展:高频指令2位,低频用4位)。
    • 等长扩展码:如15/15/15法(便于分级译码)。
    • 定长操作码:RISC采用(牺牲空间换译码速度)。
  2. 指令字格式优化

    • 可变地址字段:高频指令支持更多操作数(如ADD R1,R2,R3)。
    • 三种编码格式
      类型 特点 适用场景
      可变长 操作码+地址描述符+地址码 CISC(操作类型多)
      固定长 统一操作码字段 RISC(译码简单)
      混合型 多长度指令并存 平衡密度与复杂度

五、CISC vs RISC发展

  1. CISC方向

    • 目标:增强指令功能(面向目标程序/高级语言/操作系统)。
    • 方法
      • 用硬件加速高频指令(如循环控制指令替代3条指令)。
      • 缩小高级语言与机器语言的语义差距(如MAC乘加指令)。
    • 问题:指令利用率低(20%指令占80%时间)。
  2. RISC方向

    • 设计原则
      • 精简指令(仅高频指令),Load-Store结构(仅Load/Store访存)。
      • 定长指令+流水线+硬连线控制。
    • 实例
      • RISC I(31条指令,性能超CISC 3-4倍)。
      • RISC-V(开源模块化设计,支持RV32I/RV64I等)。

六、数据类型与操作

  1. 数据类型表示

    • 原则:缩短运行时间、减少CPU-内存通信量。
    • 操作数类型指定
      • 操作码指定(常见,如MIPS分整数/浮点指令)。
      • 标志符(硬件解释类型,少用因动态开销大)。
    • 操作数大小
      类型 大小 表示方式
      整数 8/16/32/64位 补码
      浮点数 32位(单)/64位(双) IEEE 754
      十进制 压缩BCD(4位/数字) 非压缩(字符串)
  2. 数据操作指令

    • 四类指令
      • 数据传送(LOAD/STORE)。
      • 算术运算(定点/浮点加减乘除)。
      • 逻辑运算(与/或/移位)。
      • 程序控制(分支/跳转/调用)。

七、RISC-V实例分析

  1. 设计理念:开源、简洁、模块化(RV32I+扩展)。
  2. 指令集结构
    • 基础指令集:RV32I(32位)、RV64I(64位)。
    • 扩展指令集:M(乘除)、A(原子操作)、F/D(浮点)、C(压缩指令)。
  3. 设计准
    • 完备性:指令足够编写任何程序。
    • 规则性:对称性(所有寄存器平等)、均匀性(操作支持所有数据类型)。
    • 有效性:高执行效率(如正交编码)。
    • 兼容性:向上兼容(旧程序在新硬件运行)。
  4. 代码密度
    • RISC-V(RV32GC)代码密度优于ARM/MIPS/x86(同功能程序字节数更少)。

八、指令序列对功耗的影响

  1. 功耗因素
    • 复杂指令 > 简单指令(如乘除 > 加减)。
    • 内存访问 > 寄存器操作(因总线活动)。
    • SIMD/浮点指令产热更高。
  2. 电压与温度
    • 功耗剧变导致电压波动(DVFS技术调节)。
    • 多核/高负载指令 → 温度升高(局部热点)。

指令系统
https://blog.xiaoaojianghu.fun/posts/a78497ca.html
作者
wst
发布于
2025年6月10日
许可协议