149. Cmp 零页X寻址
添加 CMP zero-page,X 操作码 ``0xD5``。
第 149 / 356 · tests/chapter_01_cpu/test_149_CMP_zero_page_x.py
此步骤存在的原因
变址零页 CMP 支持紧凑的表查找,并确认在读取比较值之前,加 X 的运算会在零页内回绕。
在此步骤中,仅以第 146-148 课为基础,请在 `emulator/cpu/opcodes.py` 中准确添加以下内容:
def cmp_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
value = cpu.bus.read(addr)
cmp(cpu, value)
OPCODE_TABLE = {
...
0xD5: cmp_zero_page_x,
}`addressing_modes.zero_page_x 在总线读取之前计算 (operand + X) & 0xFF`。 C/Z/N 可能改变;A、Overflow、X、Y 和内存保持不变;操作码加操作数使 PC 前进两个字节。
常见误解:索引越过 `$FF` 时并不会进位到第一页;它会在零页内回绕。 超出范围:绝对寻址 CMP 从第 150 课开始,其变址与间接变体推迟到第 151-154 课。
运行本课
uv run pytest tests/chapter_01_cpu/test_149_CMP_zero_page_x.py -v