169. Инструкция bmi

реализовать поведение ветвления при отрицательном результате.

Урок 169 из 356 · tests/chapter_01_cpu/test_169_instruction_bmi.py

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

"Минус" означает, что предыдущий результат установил флаг знака, поэтому BMI использует этот статус, не пересчитывая его.

На этом шаге добавьте только эту реализацию

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

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

BMI применяет уже декодированное смещение со знаком к PC после своего операнда, маскируя цель до 16 бит.

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

Вне рамок этого шага: BVC/BVS — уроки 170-171. Импорты в `emulator/cpu/opcodes.py`, обработчики относительной адресации и записи таблицы кодов операций относятся к урокам 172-179.

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

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