157. CPX 零页寻址

添加 CPX 零页操作码 ``0xE4``。

157 / 356 · tests/chapter_01_cpu/test_157_CPX_zero_page.py

此步骤存在的原因

零页寻址的 CPX 区分了紧凑的内存地址与立即数值,并将取到的字节传给现有的比较原语。

在此步骤中,`cpx 和立即数寻址方式已经存在,向 emulator/cpu/opcodes.py` 添加:

def cpx_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    cpx(cpu, value)

OPCODE_TABLE = {
    ...
    0xE4: cpx_zero_page,
}

`emulator/cpu/addressing_modes.py::zero_page 读取单字节地址;处理函数必须在调用 instructions.cpx` 之前读取该地址处的内容。只有 C/Z/N 会改变;X 和内存保持不变,操作码加操作数使 PC 前进两个字节。

常见误解:与立即数寻址的 CPX 不同,这里的操作数字节指的是一个内存位置,而不是被比较的值本身。超出范围:CPX 绝对寻址(158)以及所有 CPY 相关工作(159-162)。

运行本课

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