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) & 0xFFFFBMI применяет уже декодированное смещение со знаком к 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