L3·10^5 – 10^7

寄存器

Register / Sequential Logic

核心抽象状态

引入时钟和触发器,电路从'无记忆'变成'有状态'。

学习进度:
What

寄存器是能够存储 1-bit 信息的时序逻辑电路。核心组件是触发器(Flip-Flop),包括 D 触发器、JK 触发器等。多个触发器组合构成寄存器文件(Register File),用于存储中间计算结果。时钟信号同步所有状态变化,确保电路在确定的时间点更新。时序逻辑(Sequential Logic)与组合逻辑(Combinational Logic)的根本区别在于:时序逻辑的输出不仅取决于当前输入,还取决于历史状态。

Why

加法器等组合逻辑电路没有记忆——每次输入相同,输出就相同。但计算需要'记住'中间结果:循环计数器、数组索引、函数返回值。寄存器引入'状态'概念,使电路能够存储信息、执行循环、实现控制流。没有寄存器,就没有程序计数器、栈指针、通用寄存器——也就没有可编程的计算机。

How

程序员通过变量使用寄存器的抽象。CPU 的通用寄存器(如 x86 的 RAX、RBX)是直接可编程的存储单元。理解寄存器有助于理解:为什么寄存器访问比内存快 100 倍;为什么编译器要做寄存器分配;为什么并发编程中'可见性'是个问题(每个 CPU 核心有自己的寄存器)。

Bottom-up:由下层如何构建

本层建立在以下层级之上:

Top-down:向上暴露什么接口

状态存储时钟同步时序逻辑

Programmer View:程序员视角

我能操作吗?

通过变量间接使用。汇编语言可直接操作寄存器(如 MOV RAX, 1)。高级语言由编译器自动分配寄存器。

成本模型

指标量级备注
访问延迟~0.3-1 ns寄存器文件访问,最快存储
数量16-32 个通用寄存器x86-64 有 16 个 64-bit 寄存器
容量8-64 bytes per register取决于寄存器宽度

常见陷阱

  • !寄存器溢出:当变量太多无法全部放入寄存器时,编译器会'溢出'到内存(栈),性能下降
  • !可见性问题:多核 CPU 每个核心有自己的寄存器,一个核心修改变量后,其他核心不会立即看到(需要内存屏障)