091. Asl 零页寻址

添加 ASL 零页寻址模式。

91 / 356 · tests/chapter_01_cpu/test_091_ASL_zero_page.py

在这一步中,添加第一个带地址的 ASL 形式。测试 088-090 是内存与累加器行为以及累加器分派的前置条件。

文件与符号

emulator/cpu/opcodes.py: asl_zero_page, OPCODE_TABLE[0x06]

为什么需要这一步

测试 088-090 已经建立了 instructions.aslinstructions.asl_a 以及累加器操作码。这次改动通过第一个带地址的形式暴露内存实现,而不在处理函数中重复移位或标志位行为。

本步骤的建议实现

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

OPCODE_TABLE = {
    # existing entries unchanged
    0x06: asl_zero_page,
}

重要不变量

  • zero_page(cpu) 消耗一个操作数字节,因此整条指令共两字节
  • 该操作数是一个地址;asl 在该地址上执行读取/修改/写回
  • 原第 7 位设置 Carry;Zero 和 Negative 由掩码后的结果决定
  • A 保持不变

常见误解

对于 06 10,0x10 并不会被直接移位,它选定的是 RAM[$0010]。

本步骤不涉及

  • 测试 092-094 中的 ASL Zero Page,X 以及绝对寻址形式
  • 从测试 095 开始的 LSR
  • 周期时序以及读取/修改/写回总线周期的精确性

运行本课

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