077. Dec 零页,X

接入 DEC 零页,X(`0xD6`)。

77 / 356 · tests/chapter_01_cpu/test_077_DEC_zero_page_x.py

在本步骤中,dec 已由第 076 课导入,只需添加 emulator/cpu/opcodes.py:dec_zero_page_xOPCODE_TABLE[0xD6]

本步骤存在的原因

把索引零页地址的计算委托给现有的寻址辅助函数,把内存变更委托给现有的 DEC 原语。

emulator/cpu/opcodes.py 中的建议实现:

def dec_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    dec(cpu, addr)

在现有的 OPCODE_TABLE 中添加这条完全一致的条目:

0xD6: dec_zero_page_x,

不变量:消耗一个操作数字节;基址加 X 在零页范围内于 $FF 处环绕;PC 前进到下一条两字节指令;DEC 写入一个 8 位结果,并只更新 Z/N。

常见误解:当 X=1 时,$FF,X 并不指向 $0100;在 DEC 运行之前,零页索引寻址会先解析出 $0000

范围之外:dec_absolute/0xCEdec_absolute_x/0xDE 是第 078-079 课的内容。

运行本课

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