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