174. Beq 相对寻址

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

174 / 356 · tests/chapter_01_cpu/test_174_BEQ_relative.py

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

from emulator.cpu.instructions import beq

def beq_relative(cpu: CPU):
    offset = relative(cpu)
    beq(cpu, offset)

OPCODE_TABLE[0xF0] = beq_relative

导入项和映射项可以合并进已有的分组结构中。

这一步存在的原因

`relative 提供带符号的、操作数之后的位移量,而步骤 166 的 instructions.beq` 在已有的 Zero 标志置位时执行分支。

不变量:`0xF0 分派到单参数处理函数,无论 Zero 是否置位都会消费其操作数;从 0x8002 出发的 +5 会到达 0x8007`。不改变任何标志位或内存。常见误解:BEQ 本身并不比较数值,它只是观察由更早的操作所设置的 Zero 标志。

不在本步范围内:BNE/BPL/BMI/BVC/BVS 的操作码接线属于步骤 175-179;间接寻址 JMP 属于步骤 180。

运行本课

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