Chapter 01 · live execution chamber
从一行代码到电信号
int c = a + b; — 这一行到底发生了什么? 这一章不只解释它,而是把这条指令放进一个可暂停的 CPU 观察舱里。
source / asm / machine
hover 任一行同步高亮。橙色边线 = PC 当前指向的机器指令。
datapath under microscope
data signal control signal active unit
TRACE FRAME INSPECTOR
RV32IFRAME · ENTITY · SIGNAL · EVENTPH-COD §4.2-4.4
工程细节
一行 C ≠ 一条指令
上面是理想情况——a、b 已经在寄存器里。真实场景里,int c = a + b; 可能展开为:
lw a1, -16(s0) # 从栈读 a lw a2, -20(s0) # 从栈读 b add a3, a1, a2 # 计算 sw a3, -24(s0) # 写回栈上的 c
一行 C → 4 条指令。这就是为什么 代码行数 ≠ 指令数 ≠ 周期数。
为什么 x0 永远是 0
RISC-V 把 x0 硬连为 0(写 x0 会被丢弃),目的是让"清零""无条件跳转" "比较立即数"这类操作不必专门设计新指令。 例如 li a1, 3 实际就是 addi a1, x0, 3。
单周期 vs 真实 CPU
本章用单周期模型——每条指令固定 5 拍完成。这是教学起点, 但真实 CPU 用流水线让多条指令并行(Ch03),用乱序执行打破程序顺序(Ch04)。 单周期 CPI = 1 是流水线的上限,流水线 IPC > 1 是乱序的目标。