066. SBC 绝对寻址
添加 SBC 绝对寻址。
第 66 / 356 · tests/chapter_01_cpu/test_066_SBC_absolute.py
要更新的文件
emulator/cpu/opcodes.py要添加/更新的符号
opcodes.sbc_absolute and OPCODE_TABLE[0xED]为什么需要这一步
本课将 SBC 连接到现有的小端 16 位绝对地址上,遵循与其他内存操作码相同的“解析-读取-委托”边界。
完整示例实现
# emulator/cpu/opcodes.py
def sbc_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xED: sbc_absolute,
}重要不变量
absolute消耗两个操作数字节并返回 16 位地址- 处理函数从该地址读取一个字节
- 只有
sbc会更改 A 和算术标志 - 执行这条三字节指令会使 PC 前进三个字节
常见误解
这两个操作数字节按小端顺序构成一个地址;它们不是要减去的数值,也不应在这个包装器中被再次组装。
范围之外
- 绝对变址和间接的 SBC 包装器
- 对绝对寻址或 SBC 算术的更改
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_066_SBC_absolute.py -v