177. Bmi с относительной адресацией

подключить BMI к её относительному опкоду.

Урок 177 из 356 · tests/chapter_01_cpu/test_177_BMI_relative.py

Предварительное условие: на шаге 176 был подключён BPL. На этом шаге добавьте эти фрагменты в `emulator/cpu/opcodes.py`:

from emulator.cpu.instructions import bmi

def bmi_relative(cpu: CPU):
    offset = relative(cpu)
    bmi(cpu, offset)

OPCODE_TABLE[0x30] = bmi_relative

Объедините импорт и сопоставление с существующими в файле сгруппированными формами.

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

`relative отвечает за декодирование операнда, тогда как instructions.bmi` из шага 169 интерпретирует «минус» как установленный флаг знака и применяет смещение.

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

Вне рамок этого шага: подключение опкодов BVC и BVS — это шаги 178 и 179. Косвенная адресация JMP начинается с шага 180.

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

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