120. 绝对寻址 AND

添加 AND 绝对寻址操作码 ``0x2D``。

120 / 356 · tests/chapter_01_cpu/test_120_AND_absolute.py

在这一步中,使用 `and_a`、它的操作码导入以及第 116-119 课中较简单的模式,只添加绝对寻址的处理函数和表条目。

为什么需要这一步

绝对寻址模式让 AND 能够读取整个 CPU 地址空间,并验证了小端地址解码与逻辑运算之间的分离。

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

def and_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x2D: and_absolute,
}

`emulator/cpu/addressing_modes.py::absolute 通过 CPU.fetch_word 得到一个小端字。因此 2D 00 02 会读取 $0200 处的值并传给 instructions.and_a`。A 和 Z/N 发生变化;Carry/Overflow 和内存保持不变;操作码加上这个字使 PC 前进三个字节。

误解澄清:操作数字是一个地址,而不是值,其字节顺序也不是大端。之后暂不涉及的内容:AND 绝对,X、绝对,Y、(间接,X) 和 (间接),Y 属于第 121-124 课;ORA/EOR/BIT 属于第 125-145 课。

运行本课

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