200. 隐含寻址的 Plp

注册隐含寻址的 PLP。

200 / 356 · tests/chapter_01_cpu/test_200_PLP_implied.py

前置条件:第 199 步已添加 `plp。在本步骤中,只修改 emulator/cpu/opcodes.py,导入 plp 并添加它的 OPCODE_TABLE` 条目。

本步骤存在的原因

PLP 从由 S 选定的栈中取得数值。操作码 $28 没有操作数,必须直接分发给 `plp(cpu)`。

建议实现

from emulator.cpu.instructions import plp

OPCODE_TABLE = {
    # existing entries
    0x28: plp,
}

不变量:保留所有已有的映射;把 $28 精确映射到 `plp`;不使用寻址方式包装函数;只消耗操作码字节;保留第 199 步中先替换后屏蔽的语义。

常见误解:$28 之后的字节是下一条指令,而不是待恢复的状态字节;状态只能来自递增后的栈槽位。

范围之外:PLP 的行为属于第 199 步。TXS/TSX 属于第 201-204 步。这里不得提前引入之后的 Break/ONE 相关行为。

运行本课

uv run pytest tests/chapter_01_cpu/test_200_PLP_implied.py -v