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