042. Ldy 立即数

添加 LDY 立即数寻址($A0)。

42 / 356 · tests/chapter_01_cpu/test_042_LDY_immediate.py

要更新的文件

emulator/cpu/opcodes.py

位置

opcodes import of ldy
opcodes.ldy_immediate
opcodes.OPCODE_TABLE[$A0]

为什么需要这一步

核心指令 ldy 已经负责寄存器和标志位行为。本课通过取出一个字面操作数并将该值传递给 ldy,来连接它的第一种编码。

完整示例实现

# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import immediate
from emulator.cpu.instructions import ldy


def ldy_immediate(cpu: CPU):
    ldy(cpu, immediate(cpu))


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA0: ldy_immediate,
}

重要不变量

  • $A0 映射到 ldy_immediate
  • 立即数寻址正好取出一个操作数字节,操作码之后 PC 前进一位
  • 操作数本身被加载;它不会被当作内存地址处理
  • ldy 仍然负责更新 Zero 和 Negative

常见误区

不要用立即数字节的数值去读取总线。对于 A0 42,Y 会直接获得 $42。

范围之外

  • LDY 的零页、变址和绝对寻址编码
  • STY 操作码处理函数
  • 周期时序

运行本课

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