129. 绝对寻址 ORA
添加 ORA absolute 操作码 ``0x0D``。
第 129 / 356 · tests/chapter_01_cpu/test_129_ORA_absolute.py
此步骤存在的原因
absolute 形式的 ORA 通过解码一个完整的小端序地址并读取其值,再更新 A 与 Z/N,从而将该操作扩展到零页之外。
在此步骤中,由于 `or_a 以及 immediate/zero-page 处理程序均已存在,请在 emulator/cpu/opcodes.py` 中恰好添加以下内容:
def ora_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x0D: ora_absolute,
}`emulator/cpu/addressing_modes.py::absolute 通过 CPU.fetch_word 获取一个小端序字。因此 0D 00 02 会读取 $0200,并将该值发送给 instructions.or_a`。A 与 Z/N 会改变;Carry/Overflow 及内存保持不变;操作码加字使 PC 前进三个字节。
常见误解:该操作数是一个地址,而不是立即数,并且其低字节在前。不在本步骤范围内:经过索引的 absolute 与 indirect 的 ORA 寻址模式(第 130-133 课)。
运行本课
uv run pytest tests/chapter_01_cpu/test_129_ORA_absolute.py -v