157. CPX 零页寻址
添加 CPX 零页操作码 ``0xE4``。
第 157 / 356 · tests/chapter_01_cpu/test_157_CPX_zero_page.py
此步骤存在的原因
零页寻址的 CPX 区分了紧凑的内存地址与立即数值,并将取到的字节传给现有的比较原语。
在此步骤中,`cpx 和立即数寻址方式已经存在,向 emulator/cpu/opcodes.py` 添加:
def cpx_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
cpx(cpu, value)
OPCODE_TABLE = {
...
0xE4: cpx_zero_page,
}`emulator/cpu/addressing_modes.py::zero_page 读取单字节地址;处理函数必须在调用 instructions.cpx` 之前读取该地址处的内容。只有 C/Z/N 会改变;X 和内存保持不变,操作码加操作数使 PC 前进两个字节。
常见误解:与立即数寻址的 CPX 不同,这里的操作数字节指的是一个内存位置,而不是被比较的值本身。超出范围:CPX 绝对寻址(158)以及所有 CPY 相关工作(159-162)。
运行本课
uv run pytest tests/chapter_01_cpu/test_157_CPX_zero_page.py -v