164. 指令 bcc

实现“进位清零时分支”行为。

164 / 356 · tests/chapter_01_cpu/test_164_instruction_bcc.py

为什么需要这一步

第 163 课已经返回了带符号的位移,并使 PC 停留在下一条指令处。BCC 只负责进位清零的判断以及目标地址的加法运算。

在这一步中,请在 `emulator/cpu/instructions.py::bcc` 中恰好添加以下实现:

def bcc(cpu: CPU, offset: int):
    if not cpu.flags.get_carry_flag():
        cpu.pc = (cpu.pc + offset) & 0xFFFF

该掩码保留了 CPU 的 16 位地址空间。

不变量:进位清零时,会把正数、零或负数的 `offset0x10000` 为模加到 PC 上;进位置位时 PC 保持不变。标志位、除 PC 以外的寄存器以及内存均不受影响。常见误解:BCC 表示进位*清零*,并且该指令函数内部绝不能自行读取操作数或做符号转换。

超出范围:BCS/BEQ/BNE/BPL/BMI/BVC/BVS 属于第 165-171 课。将分支函数导入 `emulator/cpu/opcodes.py`、相对寻址处理函数以及操作码表项属于第 172-179 课。

运行本课

uv run pytest tests/chapter_01_cpu/test_164_instruction_bcc.py -v