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