175. Bne с относительной адресацией
подключить BNE к её относительному опкоду.
Урок 175 из 356 · tests/chapter_01_cpu/test_175_BNE_relative.py
Предварительное условие: на шаге 174 был подключён BEQ. На этом шаге добавьте эти фрагменты в `emulator/cpu/opcodes.py`:
from emulator.cpu.instructions import bne
def bne_relative(cpu: CPU):
offset = relative(cpu)
bne(cpu, offset)
OPCODE_TABLE[0xD0] = bne_relativeОбъедините импорт и элемент таблицы с их существующими сгруппированными формами.
Зачем нужен этот шаг
Слой опкодов считывает и декодирует смещение, а решение при сброшенном флаге нуля делегирует `instructions.bne` из шага 167.
Инварианты: `0xD0` всегда считывает один байт операнда; при сброшенном флаге нуля знаковое смещение применяется к PC после операнда, а при установленном флаге нуля этот PC остаётся неизменным. Обработчик не изменяет флаги и память. Заблуждение: BNE не выполняет сравнение, и невыполненный переход не должен оставлять PC на своём операнде.
Вне рамок этого шага: подключение опкодов BPL/BMI/BVC/BVS следует на шагах 176–179. Следующая возможность режимов адресации — косвенный JMP — это шаг 180.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_175_BNE_relative.py -v