031. Ldx 立即寻址
添加 LDX 立即寻址($A2)。
第 31 / 356 · tests/chapter_01_cpu/test_031_LDX_immediate.py
要更新的文件
emulator/cpu/opcodes.py位置
opcodes import of ldx
opcodes.ldx_immediate
opcodes.OPCODE_TABLE[$A2]为什么需要这一步
测试 030 引入了值层面的 ldx 指令。本课通过获取字面操作数,并把寄存器和标志行为委托给这条既有指令,为它接入第一个机器码编码。
完整示例实现
# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lda, sta, ldx
def ldx_immediate(cpu: CPU):
ldx(cpu, immediate(cpu))
OPCODE_TABLE = {
# Preserve existing entries.
0xA2: ldx_immediate,
}重要不变式
- $A2 映射到 ldx_immediate
- immediate 恰好获取一个字节,因此整条指令使 PC 前进 2 字节
- 操作数字节本身被加载到 X;它不会被用作地址
ldx仍负责更新 Zero 和 Negative
常见误区
不要按操作数的数值去读取内存。A2 42 将 $42 本身加载到 X。
超出范围
- 零页寻址、零页Y变址和绝对寻址的 LDX 编码
- 对 immediate 或 ldx 的改动
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_031_LDX_immediate.py -v