098. Lsr 零页寻址
添加 LSR Zero Page。
第 98 / 356 · tests/chapter_01_cpu/test_098_LSR_zero_page.py
在这一步中,通过第一个带地址的操作码暴露测试 095 中的内存 lsr。
文件与符号
emulator/cpu/opcodes.py: imported lsr, lsr_zero_page, OPCODE_TABLE[0x46]为什么需要这一步
由于测试 095 已经定义了内存 lsr,这次改动引入了它的第一个带地址操作码,并使操作数解码与指令行为保持分离。
本步骤的建议实现
# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lsr
def lsr_zero_page(cpu: CPU):
addr = zero_page(cpu)
lsr(cpu, addr)
OPCODE_TABLE = {
# existing entries unchanged
0x46: lsr_zero_page,
}重要不变量
zero_page(cpu)消耗一个操作数,并生成 $0000-$00FF 范围内的地址lsr执行读取/修改/写回,并替换 C/Z/N- 这条两字节指令使 PC 前进两字节
- A 保持不变
常见误解
对于 46 10,操作数 0x10 指定的是 RAM[$0010];它不是被移位的值。
本步骤不涉及
- 测试 099-101 中的变址与绝对寻址 LSR 形式
- 对
zero_page或lsr的改动 - 周期精确的总线行为
运行本课
uv run pytest tests/chapter_01_cpu/test_098_LSR_zero_page.py -v