166. Instrucción beq

implementar el comportamiento de Branch if Equal.

Lección 166 de 356 · tests/chapter_01_cpu/test_166_instruction_beq.py

Por qué existe este paso

Las comparaciones y otras instrucciones anteriores codifican la igualdad como Zero activado, por lo que BEQ solo lee esa condición existente y aplica el desplazamiento con signo.

En este paso, tras BCC y BCS, añade exactamente

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

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

El desplazamiento se aplica al PC posterior al operando, y la máscara preserva el ajuste (wrapping) de 16 bits.

Invariantes: con Zero activado se toma el salto y con Zero despejado PC permanece sin cambios; ninguno de los dos caminos cambia flags, otros registros o la memoria. Concepto erróneo: BEQ no compara valores por sí misma ni activa Zero; consume el estado previo.

Fuera de alcance: BNE y el resto de la semántica de saltos son las lecciones 167-171. Las importaciones de opcodes, los manejadores relativos y las entradas de tabla esperan a las lecciones 172-179.

Ejecutar esta lección

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