169. Instrucción bmi

implementar el comportamiento de Branch if Minus.

Lección 169 de 356 · tests/chapter_01_cpu/test_169_instruction_bmi.py

Por qué existe este paso

"Minus" significa que el flag Negative de un resultado anterior está activado, por lo que BMI consume ese estado sin recalcularlo.

En este paso, añade únicamente esta implementación

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

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

BMI aplica el desplazamiento con signo ya decodificado al PC posterior a su operando, enmascarando el destino a 16 bits.

Invariantes: con Negative activado se toma el salto y con Negative despejado PC no se toca; los flags, otros registros y la memoria no cambian. Concepto erróneo: BMI no inspecciona el signo de `offset` ni realiza aritmética para establecer Negative.

Fuera de alcance: BVC/BVS son las lecciones 170-171. Las importaciones a `emulator/cpu/opcodes.py`, los manejadores relativos y las entradas de la tabla de opcodes pertenecen a las lecciones 172-179.

Ejecutar esta lección

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