039. Stx 绝对寻址

添加 STX 绝对寻址($8E)。

39 / 356 · tests/chapter_01_cpu/test_039_STX_absolute.py

要更新的文件

emulator/cpu/opcodes.py

位置

opcodes.stx_absolute
opcodes.OPCODE_TABLE[$8E]

为什么需要这一步

本课添加 STX 的完整 16 位目标形式。既有的 absolute 辅助函数解码小端序地址,而 stx 仍只负责写入 X。

完整示例实现

# emulator/cpu/opcodes.py
def stx_absolute(cpu: CPU):
    addr = absolute(cpu)
    stx(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x8E: stx_absolute,
}

重要不变式

  • $8E 映射到 stx_absolute
  • absolute 先消耗低位字节,再消耗高位字节,并返回目标地址
  • 地址本身被传给 stx,由它通过总线写入 X
  • 整条指令使 PC 前进 3 字节,且不修改标志

常见误区

8E 00 02 将 X 存储到 $0200;该操作数是一个小端序的目标地址,不是要加载到 X 的值,也不是大端序地址。

超出范围

  • 带变址的绝对寻址 STX 编码,它们不属于受支持的 STX 集合
  • 对 absolute 或 stx 的改动
  • 周期时序

运行本课

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