033. Ldx 零页Y变址
添加 LDX 零页Y变址($B6)。
第 33 / 356 · tests/chapter_01_cpu/test_033_LDX_zero_page_y.py
要更新的文件
emulator/cpu/opcodes.py位置
opcodes.ldx_zero_page_y
opcodes.OPCODE_TABLE[$B6]为什么需要这一步
测试 029 引入了带回绕的零页Y变址地址辅助函数。本课将它与一次内存读取和既有的 ldx 指令相结合,让该辅助函数第一次得到操作码层面的使用。
完整示例实现
# emulator/cpu/opcodes.py
def ldx_zero_page_y(cpu: CPU):
addr = zero_page_y(cpu)
value = cpu.bus.read(addr)
ldx(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xB6: ldx_zero_page_y,
}重要不变式
- $B6 映射到 ldx_zero_page_y
- 变址使用的是 Y,而不是 X
- 基地址加 Y 的结果在总线读取之前回绕到 8 位
- 消耗一个操作数字节,且 X 和标志的更新由 ldx 负责
常见误区
LDX 的目标寄存器并不会决定变址寄存器:这个编码使用 Y,且 $FF,Y 在 Y=$01 时读取的是 $0000 而不是 $0100。
超出范围
- 修改 zero_page_y 或 ldx
- 绝对寻址的 LDX 编码
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_033_LDX_zero_page_y.py -v