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