152. CMP absolute,Y

添加 CMP absolute,Y 操作码 ``0xD9``。

152 / 356 · tests/chapter_01_cpu/test_152_CMP_absolute_y.py

此步骤存在的原因

Absolute,Y 提供了通过 Y 进行索引的对应比较,同时复用共享的 CMP 行为。

在此步骤中,课程 151 已经添加了 absolute,X。将以下内容准确地添加到 `emulator/cpu/opcodes.py`:

def cmp_absolute_y(cpu: CPU):
    addr = absolute_y(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xD9: cmp_absolute_y,
}

`emulator/cpu/addressing_modes.py::absolute_y 读取小端序基址字,并在总线读取之前加上 Y。instructions.cmp` 只改变 C/Z/N;A、Y、内存和溢出标志保持不变,操作码加字使 PC 前进三个字节。

常见误解:Y 修改的是有效地址,而不是取到的值,且基址字节不是大端序。超出范围:CMP (indirect,X) 和 (indirect),Y(153-154),以及之后的 CPX/CPY(155-162)。

运行本课

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