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