111. 累加器 ROR
将已实现的 ROR A 暴露为操作码 ``0x6A``。
第 111 / 356 · tests/chapter_01_cpu/test_111_ROR_accumulator.py
在这一步中,使用第 109-110 课中的 `ror 和 ror_a,只在 emulator/cpu/opcodes.py` 中添加累加器操作码的接入。
为什么需要这一步
ROR A 需要一个操作码表条目,程序才能通过正常的 CPU 执行到达该累加器原语,而不会错误地取操作数。
建议实现
from emulator.cpu.instructions import (..., ror_a)
OPCODE_TABLE = {
...
0x6A: ror_a,
}直接的表条目就是完整的示例实现:`CPU.step 已经取出了操作码,ror_a(cpu)` 不需要操作数解码器。它把 A 连同旧的 Carry 一起向右旋转,把旧 A 的第 0 位移入 Carry,根据 8 位结果更新 Zero/Negative,且不改动内存。因此这条单字节指令让 PC 恰好前进一个字节。
误解澄清:累加器模式不是寻址模式的包装器;添加 `ror_accumulator 处理函数或去取操作数都会多消耗一个字节。本课不涉及的内容:内存版本的处理函数/操作码 0x66、0x76、0x6E 和 0x7E` 属于第 112-115 课;AND 从第 116 课开始。
运行本课
uv run pytest tests/chapter_01_cpu/test_111_ROR_accumulator.py -v