学习目标

  • 实现分支指令
  • 实现跳转指令
  • 理解 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

下一步

第 10 章:内存管理

更新时间: