114. 绝对寻址 ROR

添加 ROR 绝对寻址操作码 ``0x6E``。

114 / 356 · tests/chapter_01_cpu/test_114_ROR_absolute.py

在这一步中,使用之前课程中的指令与寻址导入,只在 `emulator/cpu/opcodes.py` 中添加绝对寻址的处理函数和表条目。

为什么需要这一步

ROR 需要一种完整地址的内存形式,使程序能够旋转零页之外的字节,同时复用同一个读-改-写指令原语。

建议实现

def ror_absolute(cpu: CPU):
    addr = absolute(cpu)
    ror(cpu, addr)

OPCODE_TABLE = {
    ...
    0x6E: ror_absolute,
}

`emulator/cpu/addressing_modes.py::absolute 调用 CPU.fetch_word,因此先解码低字节再解码高字节。6E 00 02 通过 instructions.ror$0200` 处的字节连同 Carry 一起旋转。从概念上看内存被读/改/写了一次,A 不变,C/Z/N 遵循旋转结果,操作码加上两字节操作数使 PC 前进三个字节。

误解澄清:`00 02 不是地址 $0002,其本身也不是要旋转的数据。本课不涉及的内容:加入 X(第 115 课)、修改 absolute,或者在处理函数里重新实现 ror`。

运行本课

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