031. Ldx непосредственный
Добавление LDX непосредственный ($A2).
Урок 31 из 356 · tests/chapter_01_cpu/test_031_LDX_immediate.py
Файл для изменения
emulator/cpu/opcodes.pyРасположения
opcodes import of ldx
opcodes.ldx_immediate
opcodes.OPCODE_TABLE[$A2]Почему этот шаг существует
Тест 030 ввёл инструкцию ldx на уровне значений. Этот урок связывает её первую кодировку машинного кода, извлекая непосредственный операнд и делегируя поведение регистра и флагов уже существующей инструкции.
Полная примерная реализация
# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lda, sta, ldx
def ldx_immediate(cpu: CPU):
ldx(cpu, immediate(cpu))
OPCODE_TABLE = {
# Preserve existing entries.
0xA2: ldx_immediate,
}Важные инварианты
- $A2 отображается на ldx_immediate
- непосредственная адресация извлекает ровно один байт, поэтому вся инструкция увеличивает PC на два
- сам байт операнда загружается в X; он не используется как адрес
ldxпо-прежнему отвечает за обновление флагов Zero и Negative
Распространённое заблуждение
Не читайте память по числовому значению операнда. A2 42 загружает в X само значение $42.
Вне рамок
- кодировки LDX в режимах нулевая страница, нулевая страница,Y и абсолютный
- изменения в immediate или ldx
- тайминг циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_031_LDX_immediate.py -v