024. Sta absolute
Добавление STA с абсолютной адресацией ($8D).
Урок 24 из 356 · tests/chapter_01_cpu/test_024_STA_absolute.py
Файл для обновления
emulator/cpu/opcodes.pyРасположения
opcodes.sta_absolute
opcodes.OPCODE_TABLE[$8D]Зачем нужен этот шаг
Теперь STA нужен полный 16-битный адрес назначения. Урок повторно использует absolute и sta, демонстрируя, что изменение ширины операнда относится к адресации, а не к самой инструкции записи.
Полная реализация примера
# emulator/cpu/opcodes.py
def sta_absolute(cpu) -> None:
address = absolute(cpu)
sta(cpu, address)
OPCODE_TABLE = {
# Preserve existing entries.
0x8D: sta_absolute,
}Важные инварианты
- absolute потребляет сначала младший, затем старший байт
- полученный 16-битный адрес передаётся напрямую в sta
- $8D продвигает PC на три байта, включая опкод
- сохранение A не изменяет Zero и Negative
Распространённое заблуждение
Два байта операнда кодируют один адрес назначения в формате little-endian; это не два значения для записи, и их нельзя читать как big-endian.
Вне рамок
- индексированные опкоды STA с абсолютной адресацией
- изменения в absolute или sta
- тайминги циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_024_STA_absolute.py -v