156. CPX 立即数寻址

将 CPX 立即数寻址暴露为操作码 ``0xE0``。

156 / 356 · tests/chapter_01_cpu/test_156_CPX_immediate.py

此步骤存在的原因

立即数寻址的 CPX 首次通过 CPU 执行以字面值方式暴露该比较操作,不涉及数据内存查找。

在此步骤中,在课程 155 创建该指令之后,在 `emulator/cpu/opcodes.py` 中做以下添加:

from emulator.cpu.instructions import (..., cpx)

def cpx_immediate(cpu: CPU):
    cpx(cpu, immediate(cpu))

OPCODE_TABLE = {
    ...
    0xE0: cpx_immediate,
}

`emulator/cpu/addressing_modes.py::immediate 直接返回 CPU.fetch_byte()` 作为被比较的值。CPX 只改变 C/Z/N;X、内存和溢出标志保持不变,操作码加操作数使 PC 前进两个字节。

常见误解:立即数字节是一个值,而不是需要读取总线的地址。超出范围:CPX 零页和绝对寻址(157-158),以及所有 CPY 符号和操作码(159-162)。

运行本课

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