032. Ldx 零页寻址
添加 LDX 零页寻址($A6)。
第 32 / 356 · tests/chapter_01_cpu/test_032_LDX_zero_page.py
要更新的文件
emulator/cpu/opcodes.py位置
opcodes.ldx_zero_page
opcodes.OPCODE_TABLE[$A6]为什么需要这一步
在立即寻址的 LDX 之后,本课添加第一个基于内存的 LDX 编码。处理函数将既有的零页地址计算、一次总线读取和既有的 ldx 值操作组合起来。
完整示例实现
# emulator/cpu/opcodes.py
def ldx_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
ldx(cpu, value)
OPCODE_TABLE = {
# Preserve existing entries.
0xA6: ldx_zero_page,
}重要不变式
- $A6 映射到 ldx_zero_page
- zero_page 获取一个操作数字节并返回一个位于 $00 页的地址
- 处理函数读取该地址,并把得到的值传给 ldx
- 整条指令使 PC 前进 2 字节,且 ldx 更新标志
常见误区
不要把零页地址直接传给 ldx;LDX 加载的是存储在该地址处的字节。
超出范围
- 变址和绝对寻址的 LDX 编码
- 对 zero_page 或 ldx 的改动
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_032_LDX_zero_page.py -v