094. Asl 绝对,X 寻址

添加 ASL Absolute,X。

94 / 356 · tests/chapter_01_cpu/test_094_ASL_absolute_x.py

在这一步中,用 Absolute,X 完成 ASL 寻址序列。

文件与符号

emulator/cpu/opcodes.py: asl_absolute_x, OPCODE_TABLE[0x1E]

为什么需要这一步

这是最后一个 ASL 寻址方面的改动。它将已有的 absolute_x 解析器与此前引入的内存 asl 实现组合在一起。

本步骤的建议实现

# emulator/cpu/opcodes.py
def asl_absolute_x(cpu: CPU):
    addr = absolute_x(cpu)
    asl(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x1E: asl_absolute_x,
}

重要不变量

  • 先解码小端 16 位基址,再加上 X
  • 指令仍为三字节;X 是寄存器,而不是另一个操作数
  • asl 在有效地址上负责读取/修改/写回以及标志位更新
  • 累加器保持不变

常见误解

对于 X=0x04 时的 1E 00 02,应将 X 加到 $0200 上,而不是加到任何一个操作数字节上。

本步骤不涉及

  • 测试 095-101 引入的 LSR
  • 修改 absolute_xasl
  • 跨页与读取/修改/写回周期时序

运行本课

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