121. 绝对,X AND

添加 AND absolute,X 操作码 ``0x3D``。

121 / 356 · tests/chapter_01_cpu/test_121_AND_absolute_x.py

此步骤存在的原因

程序需要对以完整基址加 X 寻址的类似表格的内存执行 AND;此步骤将该有效地址计算与共享的 AND 行为连接起来。

在此步骤中,由于 AND 语义和未索引的 absolute 处理程序已经存在,请在 `emulator/cpu/opcodes.py` 中恰好添加以下增量代码:

def and_absolute_x(cpu: CPU):
    addr = absolute_x(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x3D: and_absolute_x,
}

`emulator/cpu/addressing_modes.py::absolute_x 获取小端序的基址字,然后加上 cpu.x。处理程序读取解析出的地址,并将其值传递给 instructions.and_a`。A 与 Z/N 会改变;X、Carry/Overflow 及内存保持不变;操作码加字使 PC 前进三个字节。

常见误解:X 是对解码后的地址进行索引,而不是对任一操作数字节或已加载的值进行索引。不在本步骤范围内:AND absolute,Y 与间接寻址模式(第 122-124 课),以及第 125-145 课中的 ORA/EOR/BIT 相关工作。

运行本课

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