171. Instrucción bvs

implementar el comportamiento de Branch if Overflow Set.

Lección 171 de 356 · tests/chapter_01_cpu/test_171_instruction_bvs.py

En este paso, añade a `emulator/cpu/instructions.py::bvs`:

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

Por qué existe este paso

El paso 163 ya decodifica el desplazamiento con signo, y PC ya apunta a la siguiente instrucción cuando se ejecuta `bvs`. Por lo tanto, BVS solo comprueba Overflow y suma condicionalmente ese desplazamiento, enmascarando el resultado al espacio de direcciones de 16 bits de la CPU.

Invariantes: si Overflow está activado se toma el salto; si Overflow está desactivado, PC no cambia. No se modifica ninguna flag, registro ni memoria. Idea errónea habitual: BVS observa Overflow; no lo activa ni obtiene ni convierte el signo de un operando.

Fuera de alcance: importar `bvs en emulator/cpu/opcodes.py, crear su gestor de opcode relativo y registrar el opcode 0x70` corresponden al paso 179. Los pasos 172-178 conectan antes los demás opcodes de salto.

Ejecutar esta lección

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