166. Инструкция beq

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

Урок 166 из 356 · tests/chapter_01_cpu/test_166_instruction_beq.py

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

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

На этом шаге, следом за BCC и BCS, добавьте в точности

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

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

Смещение применяется к PC после операнда, а маска сохраняет циклический перенос в 16-битном диапазоне.

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

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

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

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