174. Beq с относительной адресацией
подключить BEQ к её относительному опкоду.
Урок 174 из 356 · tests/chapter_01_cpu/test_174_BEQ_relative.py
Предварительное условие: на шаге 173 был подключён BCS. На этом шаге добавьте следующее в `emulator/cpu/opcodes.py`:
from emulator.cpu.instructions import beq
def beq_relative(cpu: CPU):
offset = relative(cpu)
beq(cpu, offset)
OPCODE_TABLE[0xF0] = beq_relativeИмпорт и сопоставление можно объединить с существующими сгруппированными структурами.
Зачем нужен этот шаг
`relative предоставляет знаковое смещение относительно PC после операнда, а instructions.beq` из шага 166 выполняет переход, когда установлен существующий флаг нуля.
Инварианты: `0xF0 передаёт управление обработчику с одним аргументом и считывает свой операнд независимо от того, установлен флаг нуля или нет; +5 от 0x8002 приводит к 0x8007`. Флаги и память не изменяются. Заблуждение: BEQ сама не сравнивает значения; она лишь проверяет флаг нуля, установленный предыдущей операцией.
Вне рамок этого шага: подключение опкодов BNE/BPL/BMI/BVC/BVS относится к шагам 175–179; косвенная адресация JMP относится к шагу 180.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_174_BEQ_relative.py -v