035. Ldx 绝对Y变址
添加 LDX 绝对Y变址($BE)。
第 35 / 356 · tests/chapter_01_cpu/test_035_LDX_absolute_y.py
要更新的文件
emulator/cpu/opcodes.py位置
opcodes.ldx_absolute_y
opcodes.OPCODE_TABLE[$BE]为什么需要这一步
本课通过复用既有的绝对Y变址辅助函数,补全了现阶段可用的 LDX 操作码家族。与其他基于内存的形式一样,处理函数先解析并读取操作数,再把它的值传给 ldx。
完整示例实现
# emulator/cpu/opcodes.py
def ldx_absolute_y(cpu: CPU):
addr = absolute_y(cpu)
value = cpu.bus.read(addr)
ldx(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xBE: ldx_absolute_y,
}重要不变式
- $BE 映射到 ldx_absolute_y
- 小端序的基地址用 Y 而不是 X 进行变址
- 变址后地址处的字节被传给 ldx
- 消耗两个操作数字节,因此整条指令使 PC 前进 3 字节
常见误区
不要让绝对Y变址在 $00 页内回绕;与零页Y变址不同,它变址后的地址是一个 16 位结果。
超出范围
- 存储 X 和加载 Y 的指令
- 对 absolute_y 或 ldx 的改动
- 周期时序和跨页惩罚
运行本课
uv run pytest tests/chapter_01_cpu/test_035_LDX_absolute_y.py -v