178. Bvc 相对寻址

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

178 / 356 · tests/chapter_01_cpu/test_178_BVC_relative.py

前置条件:步骤 177 已接通 BMI。在这一步中,向 `emulator/cpu/opcodes.py` 添加以下内容:

from emulator.cpu.instructions import bvc

def bvc_relative(cpu: CPU):
    offset = relative(cpu)
    bvc(cpu, offset)

OPCODE_TABLE[0x50] = bvc_relative

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

这一步存在的原因

该处理函数解码一个带符号操作数,然后由步骤 170 的 `instructions.bvc` 做出 Overflow 清零时的分支判断。

不变量:操作码 `0x50` 始终会消费其操作数;Overflow 清零时从操作数之后的 PC 应用偏移量,Overflow 置位时 PC 停留在那里。不修改任何标志位或内存。常见误解:BVC 不会清除 Overflow,也不会从分支偏移量中推导出溢出结果;它只是观察当前标志位。

不在本步范围内:BVS 的操作码接线是步骤 179。间接寻址 JMP 紧随其后,是步骤 180。

运行本课

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