175. Bne 相对寻址

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

175 / 356 · tests/chapter_01_cpu/test_175_BNE_relative.py

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

from emulator.cpu.instructions import bne

def bne_relative(cpu: CPU):
    offset = relative(cpu)
    bne(cpu, offset)

OPCODE_TABLE[0xD0] = bne_relative

将导入项和表项合并进它们已有的分组形式中。

这一步存在的原因

操作码层负责消费并解码位移量,然后把 Zero 清零的判断交给步骤 167 的 `instructions.bne`。

不变量:`0xD0` 总是消费一个操作数字节;Zero 清零时把带符号的偏移量应用到操作数之后的 PC 上,Zero 置位时该 PC 保持不变。该处理函数不改变任何标志位或内存。常见误解:BNE 不执行比较操作,并且未跳转的分支不能让 PC 停在其操作数上。

不在本步范围内:BPL/BMI/BVC/BVS 的操作码接线在步骤 176-179 中完成。下一个寻址模式功能——间接寻址 JMP——是步骤 180。

运行本课

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