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