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