第 9 章:分支跳转指令
学习目标
- 实现分支指令
- 实现跳转指令
- 理解 PC 更新
9.1 思考:程序如何跳转?
没有跳转,程序只能顺序执行。有了跳转,才有 if、while、函数调用!
9.2 条件分支
beq x1, x2, label # if (x1 == x2) goto label
case 0x63: // BRANCH
if (src1 == src2) {
cpu.pc += d.imm;
} else {
cpu.pc += 4;
}
break;
问题:为什么是 += 而不是 = ?
因为是相对跳转!
9.3 无条件跳转
jal x1, label # x1 = pc+4; pc = pc + offset