158. CPX 绝对寻址
添加 CPX 绝对寻址操作码 ``0xEC``。
第 158 / 356 · tests/chapter_01_cpu/test_158_CPX_absolute.py
此步骤存在的原因
绝对寻址的 CPX 将比较操作扩展到 CPU 内存中的任意字节,同时把小端序地址解码保留在 CPX 原语之外。
在此步骤中,通过向 `emulator/cpu/opcodes.py` 准确添加以下内容来完成 CPX:
def cpx_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
cpx(cpu, value)
OPCODE_TABLE = {
...
0xEC: cpx_absolute,
}`emulator/cpu/addressing_modes.py::absolute 通过 CPU.fetch_word 获取一个小端序字;因此 EC 00 02 会将 X 与 $0200` 处的值比较。只有 C/Z/N 会改变;X、内存和溢出标志保持不变,操作码加字使 PC 前进三个字节。
常见误解:操作数字是一个地址,而不是一个 16 位的被比较值。超出范围:CPY 指令及其三个操作码(课程 159-162)。
运行本课
uv run pytest tests/chapter_01_cpu/test_158_CPX_absolute.py -v