073. Inc 零页,X

接入 INC 零页,X(`0xF6`)。

73 / 356 · tests/chapter_01_cpu/test_073_INC_zero_page_x.py

在本步骤中,使用第 071-072 课中的 instructions.inc 和 INC 导入,然后只添加 emulator/cpu/opcodes.py:inc_zero_page_xOPCODE_TABLE[0xF6]

本步骤存在的原因

索引寻址辅助函数,而非指令本身,负责 X 的加法运算和零页环绕。

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

def inc_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    inc(cpu, addr)

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

0xF6: inc_zero_page_x,

不变量:zero_page_x(cpu) 消耗一个字节,加上 cpu.x,并将有效地址环绕限制在 $0000-$00FF 范围内;PC 前进到下一条两字节指令;inc 执行内存变更,并只更新 Z/N。

常见误解:不要把 operand + X 当作不受限制的 16 位地址来计算;当 X=1 时,$FF,X 指向 $0000,而不是 $0100

范围之外:绝对寻址和绝对-X 的 INC 处理函数及其映射是第 074-075 课的内容。

运行本课

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