100. Lsr 绝对寻址

添加 LSR Absolute。

100 / 356 · tests/chapter_01_cpu/test_100_LSR_absolute.py

在这一步中,通过已有的 16 位绝对寻址解析器暴露内存 LSR。

文件与符号

emulator/cpu/opcodes.py: lsr_absolute, OPCODE_TABLE[0x4E]

为什么需要这一步

在完成零页形式之后,这次改动通过已有的 16 位 absolute 解析器暴露内存 LSR,同时保留指令层的实现。

本步骤的建议实现

# emulator/cpu/opcodes.py
def lsr_absolute(cpu: CPU):
    addr = absolute(cpu)
    lsr(cpu, addr)

OPCODE_TABLE = {
    # existing entries unchanged
    0x4E: lsr_absolute,
}

重要不变量

  • absolute(cpu) 先解码低字节再解码高字节
  • 两个操作数字节使这成为一条三字节指令
  • lsr 读取并写回有效地址,并替换 C/Z/N
  • A 与索引寄存器保持不变

常见误解

对于 4E 00 02,小端目标地址是 $0200,而不是 $0002。

本步骤不涉及

  • 测试 101 中的 LSR Absolute,X
  • 对绝对寻址或 LSR 行为的改动
  • 周期时序与跨页行为

运行本课

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