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