165. Инструкция bcs
реализовать поведение ветвления при установленном флаге переноса.
Урок 165 из 356 · tests/chapter_01_cpu/test_165_instruction_bcs.py
Зачем нужен этот шаг
Слой адресации уже потребил операнд и преобразовал его в знаковое значение, поэтому BCS лишь принимает решение по флагу переноса и применяет смещение к PC следующей инструкции.
На этом шаге, после BCC из урока 164, добавьте в точности
`emulator/cpu/instructions.py::bcs`::
def bcs(cpu: CPU, offset: int):
if cpu.flags.get_carry_flag():
cpu.pc = (cpu.pc + offset) & 0xFFFFМаскирование приводит и переполнение, и антипереполнение к циклическому переносу в 16-битном диапазоне.
Инварианты: при установленном флаге переноса ветвление выполняется; при сброшенном флаге переноса PC не изменяется. Флаги состояния, другие регистры и память не изменяются. Заблуждение: BCS не устанавливает флаг переноса и не выполняет ветвление при сброшенном флаге переноса; она лишь читает этот флаг.
Вне рамок этого шага: функции последующих инструкций ветвления — уроки 166-171; все импорты кодов операций ветвления, обработчики и записи таблицы — уроки 172-179.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_165_instruction_bcs.py -v