027. Sta 间接X寻址

添加变址间接的STA($81,写作 `(d,X)`)。

27 / 356 · tests/chapter_01_cpu/test_027_STA_indirect_x.py

需要更新的文件

emulator/cpu/opcodes.py

位置

opcodes.sta_indirect_x
opcodes.OPCODE_TABLE[$81]

为什么需要这一步

测试020为加载指令建立了 (d,X) 指针解析方式。本课复用同样的最终地址计算作为存储目标,使指针机制保持在 sta 指令之外。

完整示例实现

# emulator/cpu/opcodes.py
def sta_indirect_x(cpu) -> None:
    address = indirect_x(cpu)
    sta(cpu, address)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x81: sta_indirect_x,
}

重要不变量

  • 在解引用之前,X先对零页指针位置进行索引
  • 指针位置的选取以及其高字节的读取都在零页内回绕
  • 指针得到的16位结果就是写入目标
  • $81 消耗一个操作数字节,且不更新标志位

常见误解

不要把X加到最终的指针值上。在 (d,X) 中,X选择的是指针的读取位置,而 sta 是把A写入该指针所指向的地址。

不在本课范围内

  • 对indirect_x或sta的修改
  • 间接,Y方式的STA
  • 周期时序

运行本课

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