171. Инструкция bvs

реализовать поведение перехода при установленном флаге переполнения.

Урок 171 из 356 · tests/chapter_01_cpu/test_171_instruction_bvs.py

На этом шаге добавьте `emulator/cpu/instructions.py::bvs`:

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

Зачем нужен этот шаг

Шаг 163 уже декодирует знаковое смещение, и к моменту выполнения `bvs` PC уже указывает на следующую инструкцию. Поэтому BVS лишь проверяет флаг переполнения и условно добавляет это смещение, маскируя результат до 16-разрядного адресного пространства CPU.

Инварианты: при установленном флаге переполнения переход выполняется; при сброшенном флаге переполнения PC остаётся неизменным. Ни один флаг, другой регистр или память не изменяются. Заблуждение: BVS лишь проверяет флаг переполнения; она не устанавливает его, не считывает операнд и не преобразует операнд в знаковый.

Вне рамок этого шага: импорт `bvs в emulator/cpu/opcodes.py, создание её обработчика относительного опкода и регистрация опкода 0x70` относятся к шагу 179. Шаги 172–178 сначала подключают остальные опкоды переходов.

Запустить этот урок

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