054. Adc 立即数

将 ADC 立即数寻址(操作码 $69)接入 CPU 分发。

54 / 356 · tests/chapter_01_cpu/test_054_ADC_immediate.py

要更新的文件

emulator/cpu/opcodes.py

要创建/更新的符号

opcodes.adc_immediate
OPCODE_TABLE[$69]
the `adc` instruction import

为什么需要这一步

测试 053 提供的是作用于已解析值的算术运算。立即数寻址模式自行提供下一个程序字节,因此该处理函数把 immediate(cpu) 的返回值直接传给 adc

完整示例实现

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import ..., adc

def adc_immediate(cpu):
    value = immediate(cpu)
    adc(cpu, value)

OPCODE_TABLE = {
    # ...existing entries...
    0x69: adc_immediate,
}

重要不变量

  • 该处理函数只接受 cpu
  • 立即数寻址模式恰好消耗一个操作数字节
  • PC 总共前进两个字节:操作码加操作数
  • 该处理函数把所有算术运算和标志位变更都委托给 adc

常见误区

不要把立即数字节当作地址再去读一次总线;immediate(cpu) 已经返回操作数的值。

范围之外

  • 所有访问内存的 ADC 操作码
  • adc 或寻址辅助函数的修改
  • 周期计数

运行本课

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