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