ScholarGate
助手

指令格式与编码

指令格式定义了每条机器指令在二进制中的布局——操作码、寄存器字段和立即数——决定了程序存储的紧凑程度以及硬件解码的便捷性。

用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
下载幻灯片
Learn & explore
视频即将推出

Definition

指令格式是机器指令中位字段的预定义排列,用于编码其操作和操作数;指令编码是将指令映射到这些二进制模式的方案。

Scope

本主题涵盖指令的二进制表示:定长与变长编码、指定操作、源寄存器和目的寄存器以及立即数的字段,以及代码密度与解码简易性之间的权衡。它包括RISC-V的R/I/S/B/U/J类型等代表性格式族。它不包括操作数寻址模式的选择(寻址模式)以及更广泛的RISC/CISC设计理念(RISC和CISC)。

Core questions

  • 指令编码必须包含哪些字段才能指定操作及其操作数?
  • 定长和变长编码如何在解码简易性与代码密度之间进行权衡?
  • 立即数和大型常量如何在有限的指令位中进行编码?
  • 规则编码如何简化流水线指令解码?

Key concepts

  • 操作码字段
  • 寄存器指定字段
  • 立即数字段
  • 定长与变长编码
  • 代码密度
  • 解码规律性
  • 指令格式族(R/I/S/B/U/J)

Mechanisms

每条指令都分为若干位字段:操作码选择操作,寄存器字段命名操作数,立即数字段保存常量或地址偏移量。定长格式(如RISC-V)保持所有指令宽度相同,并一致地放置字段,从而使解码简单快速;变长格式(如x86)为提高密度而紧密打包指令,但代价是解码更复杂。

Clinical relevance

编码选择对处理器产生连锁效应:规则的定长格式支持简单、快速的解码器,使深度流水线成为可能,而密集的变长格式则减少了指令内存流量。编译器和汇编器必须精确地针对这些格式,指令集扩展必须适应现有的编码空间。

History

早期的指令集使用不规则、手工调整的编码以节省稀缺的内存。20世纪80年代的RISC运动倾向于统一的定长格式,以简化解码和流水线,而x86等CISC指令集则保留了密集的变长编码。现代开放式指令集架构(ISA),如RISC-V,规范了清晰、可扩展的格式族。

Key figures

  • David A. Patterson
  • John L. Hennessy

Related topics

Seminal works

  • patterson2020
  • hennessy2019

Frequently asked questions

为什么RISC指令集使用定长编码?
定长指令允许处理器在不首先解码长度的情况下定位下一条指令并提取其字段,这简化并加速了取指和解码阶段,并使深度流水线比变长编码更容易实现。
如果指令只有固定数量的位宽,如何处理大型常量?
立即数字段是有限的,因此大型常量是分段构建的——例如,一个加载高位立即数指令设置高位,随后的指令添加低位——或者将常量放置在内存中并加载。

Methods for this concept

Related concepts