193. 指令 pha
实现 PHA 行为。
第 193 / 356 · tests/chapter_01_cpu/test_193_instruction_pha.py
在本步骤中,只修改 `emulator/cpu/instructions.py,添加 pha(cpu)。栈页起始地址为 STACK_BASE = 0x0100`。
本步骤存在的原因
PHA 把 A 复制到 6502 的硬件栈上。入栈操作先写入当前的 $0100 | S 槽位,然后再递减这个 8 位栈指针。
建议实现
cpu.bus.write(0x0100 | cpu.s, cpu.a)
cpu.s = (cpu.s - 1) & 0xFF把这些语句放入 `def pha(cpu: CPU) 中;用模块级常量 STACK_BASE = 0x0100` 代替字面量效果是等价的。
不变量:只压入 A;先写入再递减;把 S 按 8 位环绕处理;A 和所有状态标志保持不变。
常见误解:先递减 S 并不能实现 6502 的入栈操作;这样写入的是下一个空闲槽位,而不是当前的栈槽位。
范围之外:导入/注册操作码 $48 属于第 194 步。PLA、PHP、PLP、TXS 和 TSX 属于后续的第 195-204 步,这里不得添加。
运行本课
uv run pytest tests/chapter_01_cpu/test_193_instruction_pha.py -v