117. AND для непосредственной адресации
предоставить AND с непосредственной адресацией как код операции ``0x29``.
Урок 117 из 356 · tests/chapter_01_cpu/test_117_AND_immediate.py
На этом шаге используйте инструкцию из урока 116 и добавьте ее импорт, обработчик непосредственного режима и запись в таблице кодов операций в `emulator/cpu/opcodes.py`.
Зачем нужен этот шаг
Непосредственная форма делает только что введенный примитив AND исполняемым с литеральным операндом и устанавливает его первую интеграцию с таблицей кодов операций.
Предлагаемая реализация
from emulator.cpu.instructions import (..., and_a)
def and_immediate(cpu: CPU):
and_a(cpu, immediate(cpu))
OPCODE_TABLE = {
...
0x29: and_immediate,
}`emulator/cpu/addressing_modes.py::immediate вызывает CPU.fetch_byte и возвращает этот байт как значение. and_a` сохраняет A & value и изменяет только Z/N, поэтому Carry и Overflow остаются инвариантными; код операции и операнд увеличивают PC на два байта, и память не изменяется.
Заблуждение: непосредственный режим не возвращает адрес, поэтому лишний `cpu.bus.read` интерпретировал бы литерал как указатель. Вне области задачи: обработчики AND от нулевой страницы до indirect,Y (уроки 118-124) и работа над ORA/EOR/BIT в уроках 125-145.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_117_AND_immediate.py -v