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