063. SBC 立即寻址

添加 SBC 立即寻址。

63 / 356 · tests/chapter_01_cpu/test_063_SBC_immediate.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

the `sbc` import, opcodes.sbc_immediate, and OPCODE_TABLE[0xE9]

为什么需要这一步

这是核心 sbc 指令的第一个操作码包装器。立即寻址模式已经返回操作数值,因此这个包装器只需解析并委托。

完整示例实现

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import (
    lda, sta, ldx, stx, ldy, sty, tax, txa, tay, tya, adc, sbc,
)

def sbc_immediate(cpu: CPU):
    value = immediate(cpu)
    sbc(cpu, value)

OPCODE_TABLE = {
    # ... existing entries ...
    0xE9: sbc_immediate,
}

重要不变量

  • 操作码 $E9 映射到 sbc_immediate
  • immediate 恰好取出并返回一个操作数字节
  • 该返回值被直接传给 sbc
  • 执行这条两字节指令会使 PC 前进两个字节

常见误解

不要使用 immediate 的结果去读总线;与内存寻址辅助函数不同,它返回的是操作数值而不是地址。

范围之外

  • 所有内存寻址的 SBC 操作码包装器
  • 对核心 SBC 算术或标志的更改
  • 周期时序和十进制模式

运行本课

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