167. 指令 bne

实现“不相等时分支”行为。

167 / 356 · tests/chapter_01_cpu/test_167_instruction_bne.py

为什么需要这一步

零标志清零记录了之前某次运算的不相等结果,因此 BNE 可以直接分支,而无需再次进行比较。

在这一步中,请恰好添加以下实现

`emulator/cpu/instructions.py::bne`::

def bne(cpu: CPU, offset: int):
    if not cpu.flags.get_zero_flag():
        cpu.pc = (cpu.pc + offset) & 0xFFFF

该函数把带符号位移应用到已经前进过的 PC 上,并将目标地址限制在 16 位以内。

不变量:零标志清零时发生分支,包括发生回绕的下溢或溢出情形;零标志置位时 PC 保持不变。标志位、其他寄存器和内存均保持不变。常见误解:BNE 检测的是零标志,而不是负数标志,并且它不进行比较运算,也不自行读取操作数。

超出范围:BPL/BMI/BVC/BVS 属于第 168-171 课。分支操作码的导入、处理函数及表项被推迟到第 172-179 课。

运行本课

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