166. 指令 beq

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

166 / 356 · tests/chapter_01_cpu/test_166_instruction_beq.py

为什么需要这一步

比较指令以及其他更早的指令都用零标志置位来表示相等,因此 BEQ 只需读取这一已有条件并应用带符号偏移量。

在这一步中,紧接在 BCC 和 BCS 之后,请恰好添加

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

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

偏移量会被应用到操作数之后的 PC 上,掩码运算保证了 16 位的回绕。

不变量:零标志置位时发生分支,零标志清零时 PC 保持不变;这两条路径都不会改变标志位、其他寄存器或内存。常见误解:BEQ 本身不进行数值比较,也不会置位零标志;它只是使用之前已有的状态。

超出范围:BNE 以及其余的分支语义属于第 167-171 课。操作码导入、相对寻址处理函数以及表项要等到第 172-179 课。

运行本课

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