025. Sta 绝对X寻址

添加绝对,X的STA($9D)。

25 / 356 · tests/chapter_01_cpu/test_025_STA_absolute_x.py

需要更新的文件

emulator/cpu/opcodes.py

位置

opcodes.sta_absolute_x
opcodes.OPCODE_TABLE[$9D]

为什么需要这一步

本课把已经过测试的 absolute_x 地址计算应用到存储操作上。操作码层负责选择X索引;sta 依然与寻址方式无关。

完整示例实现

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


OPCODE_TABLE = {
    # Preserve existing entries.
    0x9D: sta_absolute_x,
}

重要不变量

  • 两个操作数字节先组成基址,再加上X
  • 使用的是完整的索引后地址;索引不会按零页方式回绕
  • 处理函数存储A,并消耗三个指令字节
  • STA不更新标志位

常见误解

绝对,X不会把相加结果掩码为八位。那条回绕规则属于零页,X方式,而不属于 $hhhh,X

不在本课范围内

  • 绝对,Y以及间接寻址的STA操作码
  • 跨页周期行为
  • 对absolute_x或sta的修改

运行本课

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