099. Lsr 零页,X 寻址
添加 LSR Zero Page,X。
第 99 / 356 · tests/chapter_01_cpu/test_099_LSR_zero_page_x.py
在这一步中,为测试 098 中的 Zero Page LSR 形式添加 X 变址。
文件与符号
emulator/cpu/opcodes.py: lsr_zero_page_x, OPCODE_TABLE[0x56]为什么需要这一步
这次改动通过将已有的 zero_page_x 解析器与内存 lsr 组合,添加了带变址的零页 LSR;它没有引入新的移位语义。
本步骤的建议实现
# emulator/cpu/opcodes.py
def lsr_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
lsr(cpu, addr)
OPCODE_TABLE = {
# existing entries unchanged
0x56: lsr_zero_page_x,
}重要不变量
- 有效地址计算在零页内环绕为 8 位
- 只消耗一个操作数字节,因此包含操作码在内 PC 前进两字节
lsr负责内存写入以及 C/Z/N 的变化- X 用于选定目标地址,其本身不会被修改
常见误解
基址 0xFE 加上 X=0x03 指向的是 $0001,而不是 $0101。
本步骤不涉及
- 测试 100-101 中的 LSR Absolute 与 Absolute,X
- 对寻址或 LSR 行为的改动
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_099_LSR_zero_page_x.py -v