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
  • immediate 恰好获取一个字节,因此整条指令使 PC 前进 2 字节
  • 操作数字节本身被加载到 X;它不会被用作地址
  • ldx 仍负责更新 Zero 和 Negative

常见误区

不要按操作数的数值去读取内存。A2 42 将 $42 本身加载到 X。

超出范围

  • 零页寻址、零页Y变址和绝对寻址的 LDX 编码
  • 对 immediate 或 ldx 的改动
  • 周期时序

运行本课

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