173. Bcs 相对寻址

将 BCS 接入其相对寻址操作码。

173 / 356 · tests/chapter_01_cpu/test_173_BCS_relative.py

前置条件:步骤 172 已导入 `relative 并接通了 BCC。在这一步中,向 emulator/cpu/opcodes.py` 添加以下内容:

from emulator.cpu.instructions import bcs

def bcs_relative(cpu: CPU):
    offset = relative(cpu)
    bcs(cpu, offset)

OPCODE_TABLE[0xB0] = bcs_relative

将导入项和表项合并进已有的分组导入与表字面量中。

这一步存在的原因

寻址逻辑仍留在操作码层,而步骤 165 的 `instructions.bcs` 负责与之互补的 Carry 置位判断。

不变量:`0xB0 映射到 bcs_relative(cpu)`;带符号操作数始终会被消费;Carry 置位时从操作数之后的 PC 出发分支,Carry 清零时该 PC 保持不变。标志位和内存都不受影响。常见误解:BCS 意味着 Carry 置位,而不是 Carry 清零,并且该处理函数不应重复做符号转换。

不在本步范围内:BEQ/BNE/BPL/BMI/BVC/BVS 的操作码接线留待步骤 174-179;JMP 寻址是步骤 180。

运行本课

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