093. Asl 绝对寻址

添加 ASL Absolute。

93 / 356 · tests/chapter_01_cpu/test_093_ASL_absolute.py

在这一步中,将内存 ASL 扩展到已有的 16 位绝对寻址解析器。

文件与符号

emulator/cpu/opcodes.py: asl_absolute, OPCODE_TABLE[0x0E]

为什么需要这一步

这次改动将同样的内存 ASL 行为从零页地址扩展到已有的 16 位 absolute 解析器;指令语义保持不变。

本步骤的建议实现

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

OPCODE_TABLE = {
    # existing entries unchanged
    0x0E: asl_absolute,
}

重要不变量

  • absolute(cpu) 先消耗低字节再消耗高字节,并返回一个 16 位地址
  • 包含操作码在内,这条三字节指令使 PC 前进三字节
  • asl 读取并写回解析出的内存位置,并更新 C、Z、N
  • A 与 X 保持不变

常见误解

对于 0E 00 02,小端解码所指向的目标是 $0200,而不是 $0002。

本步骤不涉及

  • 测试 094 中的 ASL Absolute,X
  • 对绝对寻址或 ASL 语义的改动
  • 周期时序

运行本课

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