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 位地址空间。
不变量:进位清零时,会把正数、零或负数的 `offset 以 0x10000` 为模加到 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