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