169. 指令 bmi
实现“负数时分支”行为。
第 169 / 356 · tests/chapter_01_cpu/test_169_instruction_bmi.py
为什么需要这一步
“负数(minus)”意味着此前某次运算结果所置位的负数标志,因此 BMI 只读取该状态,而不重新计算它。
在这一步中,只需添加以下实现
`emulator/cpu/instructions.py::bmi`::
def bmi(cpu: CPU, offset: int):
if cpu.flags.get_negative_flag():
cpu.pc = (cpu.pc + offset) & 0xFFFFBMI 把已经解码好的带符号位移应用到其操作数之后的 PC 上,并将目标地址掩码限制在 16 位以内。
不变量:负数标志置位时发生分支,负数标志清零时 PC 保持不变;标志位、其他寄存器和内存均不受影响。常见误解:BMI 不检查 `offset` 的符号,也不通过运算来确定负数标志。
超出范围:BVC/BVS 属于第 170-171 课。导入到 `emulator/cpu/opcodes.py`、相对寻址处理函数以及操作码表项属于第 172-179 课。
运行本课
uv run pytest tests/chapter_01_cpu/test_169_instruction_bmi.py -v