指令系统
一、指令系统基础概念
计算机层级结构
- 6级模型:应用语言机器 → 高级语言机器 → 汇编语言机器 → 操作系统机器 → 传统机器语言机器 → 微程序机器。
- 设计起点:从中间(软硬件交界面)开始设计,ISA是软硬件交互的核心。
指令集体系结构(ISA)
- 定义:硬件与软件的接口规范,包括指令集、指令格式、寻址方式、数据类型等。
- 核心要素:
- 指令集:操作集合(操作码+操作数+结果)及错误处理(如溢出)。
- 指令格式:变长指令(灵活但译码复杂) vs 定长指令(译码简单,RISC常用)。
- 与微架构(μArch)区别:
- ISA是规范(软件可见),μArch是硬件实现(如流水线、Cache,软件不可见)。
- 关键说明:Page 6指出"Cache是否属于Architecture"存疑(实际属于μArch)。
指令与微架构
- 指令:信息处理的原子单位,改变机器状态(如寄存器、内存值)。
- 微架构:根据指令改变处理器状态(如执行
ADD后更新寄存器)。
二、指令系统演化
- 历史阶段:
累加器(EDSAC)→ 累加器+索引寄存器 → GPR通用寄存器 → CISC复杂指令集(VAX)→ RISC精简指令集(MIPS/SPARC/RISC-V)。 - 关键转折:RISC因CISC指令利用率低(20%指令占80%运行时间)兴起。
三、寻址技术
编址方式
- 编址单位:字节编址(主流)、字编址、位编址、块编址。
- 字节编址问题(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指令(历史方案)。
定位方式
- 静态定位:程序装入时确定物理地址。
- 动态定位:执行时按需确定地址(支持虚存)。
- 关键区别:动态定位支持运行时地址重定位(如页表机制)。
寻址方式
- 七种基本类型:
寻址方式 示例 立即数 ADD R1, #5直接寻址 LOAD R1, [0x100]寄存器间接 LOAD R1, [R2]寄存器相对 LOAD R1, [R2+4]基址变址 LOAD R1, [R2+R3]相对基址变址 LOAD R1, [R2+R3+8] - 编码方法:
- 操作码隐含寻址方式(适合Load-Store结构)。
- 专用寻址字段(灵活但增加指令长度)。
- 七种基本类型:
四、指令优化设计
操作码优化
- 哈夫曼编码:高频指令用短码,低频用长码(最小化平均码长)。
- 公式:信息熵 $H = -\sum p_i \log_2 p_i$(理论最短平均码长)。
- 扩展操作码:定长与哈夫曼的折中(如2-4扩展:高频指令2位,低频用4位)。
- 等长扩展码:如15/15/15法(便于分级译码)。
- 定长操作码:RISC采用(牺牲空间换译码速度)。
- 哈夫曼编码:高频指令用短码,低频用长码(最小化平均码长)。
指令字格式优化
- 可变地址字段:高频指令支持更多操作数(如
ADD R1,R2,R3)。 - 三种编码格式:
类型 特点 适用场景 可变长 操作码+地址描述符+地址码 CISC(操作类型多) 固定长 统一操作码字段 RISC(译码简单) 混合型 多长度指令并存 平衡密度与复杂度
- 可变地址字段:高频指令支持更多操作数(如
五、CISC vs RISC发展
CISC方向
- 目标:增强指令功能(面向目标程序/高级语言/操作系统)。
- 方法:
- 用硬件加速高频指令(如循环控制指令替代3条指令)。
- 缩小高级语言与机器语言的语义差距(如
MAC乘加指令)。
- 问题:指令利用率低(20%指令占80%时间)。
RISC方向
- 设计原则:
- 精简指令(仅高频指令),Load-Store结构(仅Load/Store访存)。
- 定长指令+流水线+硬连线控制。
- 实例:
- RISC I(31条指令,性能超CISC 3-4倍)。
- RISC-V(开源模块化设计,支持RV32I/RV64I等)。
- 设计原则:
六、数据类型与操作
数据类型表示
- 原则:缩短运行时间、减少CPU-内存通信量。
- 操作数类型指定:
- 操作码指定(常见,如MIPS分整数/浮点指令)。
- 标志符(硬件解释类型,少用因动态开销大)。
- 操作数大小:
类型 大小 表示方式 整数 8/16/32/64位 补码 浮点数 32位(单)/64位(双) IEEE 754 十进制 压缩BCD(4位/数字) 非压缩(字符串)
数据操作指令
- 四类指令:
- 数据传送(
LOAD/STORE)。 - 算术运算(定点/浮点加减乘除)。
- 逻辑运算(与/或/移位)。
- 程序控制(分支/跳转/调用)。
- 数据传送(
- 四类指令:
七、RISC-V实例分析
- 设计理念:开源、简洁、模块化(RV32I+扩展)。
- 指令集结构:
- 基础指令集:RV32I(32位)、RV64I(64位)。
- 扩展指令集:M(乘除)、A(原子操作)、F/D(浮点)、C(压缩指令)。
- 设计准:
- 完备性:指令足够编写任何程序。
- 规则性:对称性(所有寄存器平等)、均匀性(操作支持所有数据类型)。
- 有效性:高执行效率(如正交编码)。
- 兼容性:向上兼容(旧程序在新硬件运行)。
- 代码密度:
- RISC-V(RV32GC)代码密度优于ARM/MIPS/x86(同功能程序字节数更少)。
八、指令序列对功耗的影响
- 功耗因素:
- 复杂指令 > 简单指令(如乘除 > 加减)。
- 内存访问 > 寄存器操作(因总线活动)。
- SIMD/浮点指令产热更高。
- 电压与温度:
- 功耗剧变导致电压波动(DVFS技术调节)。
- 多核/高负载指令 → 温度升高(局部热点)。