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