078. Dec 绝对寻址

接入 DEC 绝对寻址(`0xCE`)。

78 / 356 · tests/chapter_01_cpu/test_078_DEC_absolute.py

在本步骤中,在第 076-077 课的 DEC 原语和零页寻址形式之后,添加 emulator/cpu/opcodes.py:dec_absoluteOPCODE_TABLE[0xCE]

本步骤存在的原因

addressing_modes.absolute 解码小端有效地址,然后复用 instructions.dec 完成变更和标志位处理。

emulator/cpu/opcodes.py 中的建议实现:

def dec_absolute(cpu: CPU):
    addr = absolute(cpu)
    dec(cpu, addr)

在现有的 OPCODE_TABLE 中添加这条完全一致的条目:

0xCE: dec_absolute,

不变量:先消耗低位字节再消耗高位字节,共两个操作数字节;CE 00 02 解析为 $0200;PC 前进到下一条三字节指令;DEC 将内存字节环绕到 8 位,并只更新 Zero 和 Negative。

常见误解:$00 $02 并不是地址 $0002;6502 的绝对寻址操作数是小端格式,因此实际指向 $0200

范围之外:绝对-X 的 DEC(dec_absolute_x,操作码 0xDE)属于第 079 课。

运行本课

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