055. Adc 零页
将 ADC 零页寻址(操作码 $65)接入 CPU 分发。
第 55 / 356 · tests/chapter_01_cpu/test_055_ADC_zero_page.py
要更新的文件
emulator/cpu/opcodes.py要创建/更新的符号
opcodes.adc_zero_page
OPCODE_TABLE[$65]为什么需要这一步
与立即数寻址不同,zero_page(cpu) 会把操作数字节解析为一个地址。该处理函数必须先读取该地址处的值,再把值交给现有的 adc 指令。
完整示例实现
# emulator/cpu/opcodes.py
def adc_zero_page(cpu):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
adc(cpu, value)
OPCODE_TABLE = {
# ...existing entries...
0x65: adc_zero_page,
}重要不变量
- 单字节操作数是 $0000-$00FF 范围内的地址
- 恰好读取一个数据值并传给
adc - PC 总共前进两个字节
- 地址解析仍保留在操作码层
常见误区
不要把零页地址本身传给 adc;ADC 相加的是存储在该地址处的字节。
范围之外
- 变址、绝对与间接的 ADC 寻址模式
- 对
zero_page或adc的修改 - 周期计数
运行本课
uv run pytest tests/chapter_01_cpu/test_055_ADC_zero_page.py -v