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