099. Lsr 零页,X 寻址

添加 LSR Zero Page,X。

99 / 356 · tests/chapter_01_cpu/test_099_LSR_zero_page_x.py

在这一步中,为测试 098 中的 Zero Page LSR 形式添加 X 变址。

文件与符号

emulator/cpu/opcodes.py: lsr_zero_page_x, OPCODE_TABLE[0x56]

为什么需要这一步

这次改动通过将已有的 zero_page_x 解析器与内存 lsr 组合,添加了带变址的零页 LSR;它没有引入新的移位语义。

本步骤的建议实现

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

OPCODE_TABLE = {
    # existing entries unchanged
    0x56: lsr_zero_page_x,
}

重要不变量

  • 有效地址计算在零页内环绕为 8 位
  • 只消耗一个操作数字节,因此包含操作码在内 PC 前进两字节
  • lsr 负责内存写入以及 C/Z/N 的变化
  • X 用于选定目标地址,其本身不会被修改

常见误解

基址 0xFE 加上 X=0x03 指向的是 $0001,而不是 $0101。

本步骤不涉及

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

运行本课

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