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