162. Cpy 绝对寻址
添加 CPY 绝对寻址操作码 ``0xCC``。
第 162 / 356 · tests/chapter_01_cpu/test_162_CPY_absolute.py
为什么需要这一步
绝对寻址 CPY 将 Y 与 CPU 内存中任意位置的字节进行比较,并验证这两字节操作数被解码为小端序地址。
在这一步中,在第 159-161 课提供了 `cpy 及其立即数和零页处理函数之后,请在 emulator/cpu/opcodes.py` 中恰好添加以下内容:
def cpy_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
cpy(cpu, value)
OPCODE_TABLE = {
...
0xCC: cpy_absolute,
}`emulator/cpu/addressing_modes.py::absolute 通过 CPU.fetch_word 读取一个小端序地址;因此 CC 00 02 会通过 instructions.cpy 将 Y 与从 $0200` 读取到的字节进行比较。
不变量:Y 和内存保持不变;只有 C/Z/N 发生变化,操作码加两字节操作数使 PC 前进三个字节。常见误解:`00 02 并不是要比较的字面值 0x0002`,也不是大端序地址。
超出范围:相对寻址和分支指令从第 163 课开始。
运行本课
uv run pytest tests/chapter_01_cpu/test_162_CPY_absolute.py -v