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