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) & 0xFFFFEl 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