198. 隐含寻址的 Php

注册隐含寻址的 PHP。

198 / 356 · tests/chapter_01_cpu/test_198_PHP_implied.py

前置条件:第 197 步已添加 `php。在本步骤中,只修改 emulator/cpu/opcodes.py,导入 php 并在 OPCODE_TABLE` 中注册它。

本步骤存在的原因

PHP 直接从 CPU 状态中取得 P 和 S。因此操作码 $08 没有操作数,可以直接分发给 `php(cpu)`。

建议实现

from emulator.cpu.instructions import php

OPCODE_TABLE = {
    # existing entries
    0x08: php,
}

不变量:保留已有的映射;把 $08 精确映射到 `php` 函数对象;不使用寻址包装函数或操作数读取;只消耗一个操作码字节,并保留第 197 步的栈/状态语义。

常见误解:$08 之后的字节并不是状态数据;PHP 压入的是当前实时的 P。

范围之外:PHP 的行为属于第 197 步,PLP 从第 199 步开始。对 PHP 压栈字节的改动不属于本次操作码注册步骤。

运行本课

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