106. Rol zero page x 变址零页
接入 ROL Zero Page,X(操作码 ``0x36``)。
第 106 / 356 · tests/chapter_01_cpu/test_106_ROL_zero_page_x.py
在本步骤中,在第 105 课的基础上只扩展变址零页适配器和分派条目。
生产代码位置中的完整示例实现
`emulator/cpu/opcodes.py::rol_zero_page_x`::
def rol_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
rol(cpu, addr)`emulator/cpu/opcodes.py::OPCODE_TABLE`::
0x36: rol_zero_page_x,本步骤存在的原因
复用已有的寻址辅助函数,避免在指令原语中重复实现回绕策略。
不变量:消耗一个操作数字节;有效地址为 `(operand + cpu.x) & 0xFF;PC 最终为起始位置+2;rol 只修改该字节,C/Z/N 行为与第 102 课一致。因此基址 0xFE 加上 X 0x03 指向 $0001`。
常见误解:零页变址不会溢出到 `$0101`,也不是 16 位的绝对变址;必须按 8 位回绕。
不在本步骤范围内:绝对寻址模式是第 107-108 课,ROR 从第 109 课开始,周期精确的变址读/改/写时序是之后的工作。
运行本课
uv run pytest tests/chapter_01_cpu/test_106_ROL_zero_page_x.py -v