051. Опкоды передачи регистров

Зарегистрировать четыре инструкции передачи как опкоды с неявной адресацией.

Урок 51 из 356 · tests/chapter_01_cpu/test_051_transfer_opcodes.py

Файл для обновления

emulator/cpu/opcodes.py

Символы для обновления

the instruction import and OPCODE_TABLE

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

Операции передачи из теста 050 уже имеют ту же форму с одним аргументом, которую CPU.step ожидает от записи в таблице опкодов. У инструкций с неявной адресацией нет операнда для декодирования, поэтому промежуточный обработчик опкода не добавил бы никакого поведения.

Полный пример реализации

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import (
    lda, sta, ldx, stx, ldy, sty, tax, txa, tay, tya,
)

OPCODE_TABLE = {
    # ...the existing load/store entries...
    0xAA: tax,
    0x8A: txa,
    0xA8: tay,
    0x98: tya,
}

Важные инварианты

  • каждый опкод напрямую отображается на свою функцию-инструкцию
  • CPU.step потребляет только опкод, продвигая PC на один байт
  • поведение передачи и обновления флагов Zero/Negative остаётся на уровне инструкций

Распространённое заблуждение

Не создавайте обёртки вида tax_implied и не извлекайте операнд; эти четыре инструкции используют неявную адресацию и уже соответствуют контракту диспетчеризации.

Вне рамок задачи

  • рефакторинг FlagsHandler, вводимый в тесте 052
  • ADC и его обработчики опкодов
  • учёт циклов

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

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