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