187. RTS 隐含寻址

接入隐含寻址的 RTS 操作码 $60。

187 / 356 · tests/chapter_01_cpu/test_187_RTS_implied.py

前置条件:第 186 步已提供 `rts。在本步骤中,在 emulator/cpu/opcodes.py` 中添加其导入以及直接的表映射:

from emulator.cpu.instructions import rts

OPCODE_TABLE = {
    # existing entries...
    0x60: rts,
}

操作码

0x60 -> RTS

目标

把操作码 0x60 添加到 OPCODE_TABLE 中。

学习指引

RTS 使用隐含寻址。这意味着该操作码没有操作数字节。该指令所需的全部信息都来自 CPU 栈。

示例

60 -> RTS

执行步骤

1. CPU.step() fetches opcode 0x60.
2. OPCODE_TABLE dispatches directly to rts(cpu).
3. RTS pulls the return address from the stack.
4. RTS sets PC to pulled_address + 1.

常见错误

不要为 RTS 取操作数字节。它是一条隐含寻址指令。

本步骤存在的原因

`CPU.step 已经消费了唯一的操作码字节,而 rts` 从栈上获取其返回字,因此不需要包装函数或寻址方式。不变量:$60 直接映射到该单参数函数;分发过程不消费 $8001;RTS 单独完成两次出栈操作以及 PC 更新。常见误解:并非每个操作码都需要一个具名的处理函数。

本步骤范围之外:标志位辅助函数与 BRK 属于第 188-190 步;RTI 与操作码 $40 属于第 191-192 步。

运行本课

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