122. 绝对,Y AND

添加 AND absolute,Y 操作码 ``0x39``。

122 / 356 · tests/chapter_01_cpu/test_122_AND_absolute_y.py

此步骤存在的原因

这为 absolute,X 提供了以 Y 索引的对应形式,使 AND 能够使用任一索引寄存器,而无需重复其累加器与标志位语义。

在此步骤中,在第 121 课的 absolute,X 之后,仅需在 `emulator/cpu/opcodes.py` 中添加以下处理程序及注册代码:

def and_absolute_y(cpu: CPU):
    addr = absolute_y(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x39: and_absolute_y,
}

`emulator/cpu/addressing_modes.py::absolute_y 先获取小端序的基址字,再加上 cpu.y。解析出的内存值被传入已存在的 instructions.and_a`;A 与 Z/N 会改变,而 Y、Carry/Overflow 及内存保持不变。操作码与字共消耗三个字节。

常见误解:absolute,Y 并不是 zero-page,Y,也不会将索引范围限制在零页内。不在本步骤范围内:AND (indirect,X)/(indirect),Y(第 123-124 课)以及第 125-145 课中新增的 ORA/EOR/BIT。

运行本课

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