168. 指令 bpl
实现“正数时分支”行为。
第 168 / 356 · tests/chapter_01_cpu/test_168_instruction_bpl.py
为什么需要这一步
在 6502 的术语中,“正数(plus)”意味着现有的负数标志处于清零状态,因此 BPL 是根据该标志进行选择,而不是检查偏移量或 PC 本身。
在这一步中,在 BNE 之后,请恰好添加
`emulator/cpu/instructions.py::bpl`::
def bpl(cpu: CPU, offset: int):
if not cpu.flags.get_negative_flag():
cpu.pc = (cpu.pc + offset) & 0xFFFF该函数把已解码的带符号偏移量应用到操作数之后的 PC 上,并把结果掩码限制在 16 位地址空间内。
不变量:负数标志清零时发生分支;负数标志置位时 PC 保持不变。没有任何标志位、其他寄存器或内存发生变化。常见误解:BPL 并不检测 PC 或 `offset` 是否为正数,也不会重新计算负数标志。
超出范围:BMI/BVC/BVS 属于第 169-171 课。操作码导入、相对寻址处理函数及表项属于第 172-179 课。
运行本课
uv run pytest tests/chapter_01_cpu/test_168_instruction_bpl.py -v