145. Bit 绝对寻址

添加 BIT absolute 操作码 ``0x2C``。

145 / 356 · tests/chapter_01_cpu/test_145_BIT_absolute.py

此步骤存在的原因

绝对寻址 BIT 将这种仅涉及标志位的测试扩展到整个地址空间,并验证其两字节操作数会被解码为小端序内存地址。

在此步骤中,在第 143-144 课确立了 BIT 语义及其操作码导入之后,请在 `emulator/cpu/opcodes.py` 中准确添加以下内容:

def bit_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    bit(cpu, value)

OPCODE_TABLE = {
    ...
    0x2C: bit_absolute,
}

`emulator/cpu/addressing_modes.py::absolute 使用 CPU.fetch_word` 解码小端序地址。 处理函数执行一次总线读取,而 BIT 只消耗该值。 Z/N/V 可能改变;A、Carry、X、Y 和内存保持不变;操作码加字使 PC 前进三个字节。

常见误解:`2C 02 20 测试的并不是字面值 $2002`;它读取的是该地址,任何属于总线的副作用仍是总线行为。 超出范围:CMP 及其各比较操作码从第 146 课开始。

运行本课

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