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