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