037. Stx 零页寻址

添加 STX 零页寻址($86)。

37 / 356 · tests/chapter_01_cpu/test_037_STX_zero_page.py

要更新的文件

emulator/cpu/opcodes.py

位置

opcodes import of stx
opcodes.stx_zero_page
opcodes.OPCODE_TABLE[$86]

为什么需要这一步

测试 036 添加了地址层面的 stx 操作。本课通过解析一个零页目标地址,并把该地址传给 stx,为它接入第一个编码。

完整示例实现

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lda, sta, ldx, stx


def stx_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    stx(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x86: stx_zero_page,
}

重要不变式

  • $86 映射到 stx_zero_page
  • zero_page 消耗一个操作数字节并返回一个位于 $00 页的地址
  • 传给 stx 的是地址,而不是该地址当前的内容
  • 整条指令使 PC 前进 2 字节,且标志保持不变

常见误区

不要在调用 stx 之前从已解析的地址读取内容;STX 是把 X 写入该目标地址。

超出范围

  • 零页Y变址和绝对寻址的 STX 编码
  • 对 zero_page 或 stx 的改动
  • 周期时序

运行本课

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