148. Cmp 零页寻址

添加 CMP zero-page 操作码 ``0xC5``。

148 / 356 · tests/chapter_01_cpu/test_148_CMP_zero_page.py

此步骤存在的原因

CMP 必须既能将 A 与内存比较,也能与字面值比较;此形式解析一个紧凑的零页地址,并将取到的字节传递给公共的比较逻辑。

在此步骤中,第 146-147 课已经提供了 CMP 语义、导入以及立即数寻址的接入。 请在 `emulator/cpu/opcodes.py` 中准确添加以下内容:

def cmp_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    cmp(cpu, value)

OPCODE_TABLE = {
    ...
    0xC5: cmp_zero_page,
}

该操作数指明一个零页位置;与 A 比较的是该位置的总线值,而不是地址字节。 C/Z/N 可能改变;A、Overflow、X、Y 和内存保持不变;PC 前进两个字节。

常见误解:`C5 10 比较的对象是 RAM[$0010],而不是字面值 $10`。 超出范围:变址零页属于第 149 课,而更宽的/间接的 CMP 模式属于第 150-154 课。

运行本课

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