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