038. Stx 零页Y变址

添加 STX 零页Y变址($96)。

38 / 356 · tests/chapter_01_cpu/test_038_STX_zero_page_y.py

要更新的文件

emulator/cpu/opcodes.py

位置

opcodes.stx_zero_page_y
opcodes.OPCODE_TABLE[$96]

为什么需要这一步

本课复用测试 029 中首次引入的零页Y变址辅助函数,添加 STX 的零页变址编码。地址计算仍然与核心存储操作相分离。

完整示例实现

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


OPCODE_TABLE = {
    # Preserve existing entries.
    0x96: stx_zero_page_y,
}

重要不变式

  • $96 映射到 stx_zero_page_y
  • 对单字节操作数进行变址的是 Y,而不是 X
  • 基地址加 Y 在 $00 页内回绕
  • stx 写入的值是 X,且 Zero 和 Negative 保持不变

常见误区

被存储的寄存器并不会决定变址寄存器。STX $nn,Y 存储的是 X,但用 Y 来计算目标地址。

超出范围

  • 绝对寻址 STX
  • 对 zero_page_y 或 stx 的改动
  • 周期时序

运行本课

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