167. Инструкция bne

реализовать поведение ветвления при неравенстве.

Урок 167 из 356 · tests/chapter_01_cpu/test_167_instruction_bne.py

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

Сброшенный флаг нуля фиксирует неравный результат предыдущей операции, поэтому BNE может выполнить ветвление без ещё одного сравнения.

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

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

def bne(cpu: CPU, offset: int):
    if not cpu.flags.get_zero_flag():
        cpu.pc = (cpu.pc + offset) & 0xFFFF

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

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

Вне рамок этого шага: BPL/BMI/BVC/BVS — уроки 168-171. Импорты кодов операций ветвления, обработчики и записи таблицы отложены до уроков 172-179.

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

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