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