162. Cpy 绝对寻址

添加 CPY 绝对寻址操作码 ``0xCC``。

162 / 356 · tests/chapter_01_cpu/test_162_CPY_absolute.py

为什么需要这一步

绝对寻址 CPY 将 Y 与 CPU 内存中任意位置的字节进行比较,并验证这两字节操作数被解码为小端序地址。

在这一步中,在第 159-161 课提供了 `cpy 及其立即数和零页处理函数之后,请在 emulator/cpu/opcodes.py` 中恰好添加以下内容:

def cpy_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    cpy(cpu, value)

OPCODE_TABLE = {
    ...
    0xCC: cpy_absolute,
}

`emulator/cpu/addressing_modes.py::absolute 通过 CPU.fetch_word 读取一个小端序地址;因此 CC 00 02 会通过 instructions.cpy 将 Y 与从 $0200` 读取到的字节进行比较。

不变量:Y 和内存保持不变;只有 C/Z/N 发生变化,操作码加两字节操作数使 PC 前进三个字节。常见误解:`00 02 并不是要比较的字面值 0x0002`,也不是大端序地址。

超出范围:相对寻址和分支指令从第 163 课开始。

运行本课

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