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