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