151. CMP absolute,X

添加 CMP absolute,X 操作码 ``0xDD``。

151 / 356 · tests/chapter_01_cpu/test_151_CMP_absolute_x.py

此步骤存在的原因

Absolute,X 让 CMP 能够比较 A 与零页之外的索引表数据,同时把地址计算与比较语义分离开。

在此步骤中,课程 146-150 已经提供了 `cmp、其操作码导入以及此前的 CMP 寻址模式。将以下内容添加到 emulator/cpu/opcodes.py`:

def cmp_absolute_x(cpu: CPU):
    addr = absolute_x(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xDD: cmp_absolute_x,
}

`emulator/cpu/addressing_modes.py::absolute_x` 读取小端序基址字并加上 X;处理函数读取该有效地址,并将其值与 A 比较。只有 C/Z/N 会改变;A、X、内存和溢出标志保持不变,操作码加字使 PC 前进三个字节。

常见误解:X 用于索引已解码的地址,而不是任一操作数字节,且 X 本身不会被修改。超出范围:CMP absolute,Y 及间接寻址模式(课程 152-154),以及 CPX/CPY 相关工作(课程 155-162)。

运行本课

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