115. 绝对,X ROR
用绝对,X 操作码 ``0x7E`` 完成 ROR。
第 115 / 356 · tests/chapter_01_cpu/test_115_ROR_absolute_x.py
在这一步中,在第 114 课的基础上,只在 `emulator/cpu/opcodes.py` 中添加 Absolute,X 的处理函数和表条目。
为什么需要这一步
这一步通过先解出完整的小端基址再加上 X,再旋转所选内存字节,从而完成了 ROR 的寻址覆盖。
建议实现
def ror_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
ror(cpu, addr)
OPCODE_TABLE = {
...
0x7E: ror_absolute_x,
}`emulator/cpu/addressing_modes.py::absolute_x 取出小端 16 位基址,然后加上 cpu.x。因此 X 为 0x04 时,7E 00 02 会通过 instructions.ror 对 $0204 进行读/改/写。A 保持不变,C/Z/N 保留 ROR 的语义,PC 前进三个字节。与零页,X 不同,绝对,X 不会在 $00FF` 处回绕。
误解澄清:X 是对解码出的地址做变址,而不是对操作数字节或加载出的值做变址。本课不涉及的内容:周期数/跨页时序,以及从第 116 课开始的全部 AND 工作;本课之后没有再添加更多的 ROR 模式。
运行本课
uv run pytest tests/chapter_01_cpu/test_115_ROR_absolute_x.py -v