151. Cmp absolute x
добавить опкод CMP absolute,X ``0xDD``.
Урок 151 из 356 · tests/chapter_01_cpu/test_151_CMP_absolute_x.py
Зачем нужен этот шаг
Absolute,X позволяет CMP сравнивать A с индексированными таблицами за пределами нулевой страницы, оставляя вычисление адреса отдельным от семантики сравнения.
На этом шаге уроки 146-150 уже предоставляют `cmp, импорт его опкода и предыдущие режимы CMP. Добавьте следующее в emulator/cpu/opcodes.py`:
def cmp_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
cmp(cpu, value)
OPCODE_TABLE = {
...
0xDD: cmp_absolute_x,
}`emulator/cpu/addressing_modes.py::absolute_x` считывает слово в порядке little-endian и прибавляет X; обработчик читает значение по этому эффективному адресу и сравнивает его с A. Меняются только C/Z/N; A, X, память и Overflow не изменяются, а опкод вместе со словом сдвигают PC на три байта.
Заблуждение: X индексирует уже вычисленный адрес, а не какой-либо из байтов операнда, и сам не изменяется. Вне рамок: CMP absolute,Y и косвенные режимы (уроки 152-154), а также работа над CPX/CPY в уроках 155-162.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_151_CMP_absolute_x.py -v