161. Cpy 零页寻址
添加 CPY 零页寻址操作码 ``0xC4``。
第 161 / 356 · tests/chapter_01_cpu/test_161_CPY_zero_page.py
为什么需要这一步
零页 CPY 将其操作数解释为一个紧凑的内存地址,并通过共享的 CPY 原语,将 Y 与从该地址读取到的字节进行比较。
在这一步中,第 159-160 课已经提供了 `instructions.cpy、其操作码导入以及立即数 CPY。请在 emulator/cpu/opcodes.py` 中恰好添加以下内容:
def cpy_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
cpy(cpu, value)
OPCODE_TABLE = {
...
0xC4: cpy_zero_page,
}`emulator/cpu/addressing_modes.py::zero_page 将这一字节的操作数当作地址来使用;处理函数随后读取该地址,并把标志位语义委托给 emulator/cpu/instructions.py::cpy`。
不变量:Y 和内存保持不变;CPY 仅更新 C/Z/N,操作码加操作数使 PC 前进两个字节。常见误解:该操作数并不是与 Y 比较的值本身,它只是标识出包含该值的零页字节地址。
超出范围:CPY 绝对寻址 `0xCC` 属于第 162 课。CMP/CPX 以及 CPY 立即数寻址属于第 146-160 课。
运行本课
uv run pytest tests/chapter_01_cpu/test_161_CPY_zero_page.py -v