177. Bmi 相对寻址

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

177 / 356 · tests/chapter_01_cpu/test_177_BMI_relative.py

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

from emulator.cpu.instructions import bmi

def bmi_relative(cpu: CPU):
    offset = relative(cpu)
    bmi(cpu, offset)

OPCODE_TABLE[0x30] = bmi_relative

将导入项和映射项合并进文件已有的分组形式中。

这一步存在的原因

`relative 负责操作数解码,而步骤 169 的 instructions.bmi` 把“minus”解释为 Negative 置位,并应用该偏移量。

不变量:`0x30` 在跳转和未跳转两条路径上都会消费其操作数;Negative 置位时相对于操作数之后的 PC 分支,Negative 清零时 PC 停留在那里。不改变任何标志位或内存。常见误解:BMI 检测的是 Negative 状态位,而不是偏移量或任何寄存器在 Python 整数意义上的负值。

不在本步范围内:BVC 和 BVS 的操作码接线分别是步骤 178 和 179。间接寻址 JMP 从步骤 180 开始。

运行本课

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