第 6 章:指令执行
学习目标
- 理解取指-译码-执行循环
- 实现指令执行引擎
- 掌握 PC 更新
6.1 思考:CPU 是如何工作的?
想象 CPU 是一个永不停歇的工人:
while (true) {
1. 取指令 (Fetch)
2. 译码 (Decode)
3. 执行 (Execute)
4. 更新 PC
}
这就是著名的 取指-译码-执行循环!
6.2 取指令
uint32_t inst_fetch() {
uint32_t inst = mem_read(cpu.pc, 4);
return inst;
}
问题:为什么是 4 字节?
因为 RISC-V 的指令长度是 32 位(4 字节)!
6.3 执行引擎
void cpu_exec_once() {
// 1. 取指
uint32_t inst = inst_fetch();
// 2. 译码
Decode d = decode(inst);
// 3. 执行
switch (d.opcode) {
case 0x13: exec_I_type(d); break; // addi, ...
case 0x33: exec_R_type(d); break; // add, sub, ...
// ...
}
// 4. 更新 PC
cpu.pc += 4;
}
问题:PC 总是 +4 吗?
不是!跳转指令会改变 PC。