147. Cmp immediate

добавить опкод CMP immediate ``0xC9``.

Урок 147 из 356 · tests/chapter_01_cpu/test_147_CMP_immediate.py

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

Непосредственная форма первой делает CMP доступной через выполнение CPU, сравнивая A с литеральным байтом, при этом вся логика флагов сравнения остаётся в общем примитиве.

На этом шаге урок 146 уже добавляет `cmp. Поскольку это первый опкод CMP, добавьте его импорт и ровно следующий обработчик/запись в таблице в emulator/cpu/opcodes.py`:

from emulator.cpu.instructions import (..., cmp)

def cmp_immediate(cpu: CPU):
    cmp(cpu, immediate(cpu))

OPCODE_TABLE = {
    ...
    0xC9: cmp_immediate,
}

`addressing_modes.immediate` возвращает извлечённое значение операнда напрямую, поэтому чтения из памяти данных не происходит. C/Z/N могут измениться; A, Overflow, X, Y и память неизменны; опкод и операнд продвигают PC на два байта.

Заблуждение: непосредственный CMP не рассматривает свой операнд как адрес и не сохраняет результат вычитания. Вне рамок урока: режимы CMP с обращением к памяти — уроки 148–154; CPX и CPY — последующие уроки.

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

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