030. Ldx指令

添加核心LDX指令。

30 / 356 · tests/chapter_01_cpu/test_030_instruction_ldx.py

需要更新的文件

emulator/cpu/instructions.py

位置

instructions.ldx, beside lda and sta

为什么需要这一步

LDX开启了下一个加载指令家族,同时保留了LDA所确立的指令/操作码边界。核心指令接收一个已经解析好的值,将其存入X,并应用与 lda 相同的Zero/Negative规则。

完整示例实现

# emulator/cpu/instructions.py
def ldx(cpu, value) -> None:
    cpu.x = value
    cpu._update_zero_and_negative_flags(cpu.x)

重要不变量

  • ldx接收的是一个值,而不是地址
  • X接收该值,而A和Y保持不变
  • 当值恰好为 $00 时置位Zero,否则清零
  • Negative镜像第7位,当第7位为零时清零

常见误解

不要在 ldx 内部获取操作数或读取总线;寻址与内存访问应由操作码处理函数在调用本指令之前完成。

不在本课范围内

  • 所有LDX操作码处理函数以及操作码表条目
  • 零页,Y与某个操作码的集成
  • 后续的FlagsHandler重构

运行本课

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