150. Cmp 绝对寻址
添加 CMP absolute 操作码 ``0xCD``。
第 150 / 356 · tests/chapter_01_cpu/test_150_CMP_absolute.py
此步骤存在的原因
绝对寻址 CMP 允许将 A 与 CPU 内存中任意位置的字节进行比较,同时使小端序有效地址解码与标志位语义保持分离。
在此步骤中,第 146-149 课已经提供了 CMP 语义、导入以及立即数/零页寻址模式。 请在 `emulator/cpu/opcodes.py` 中准确添加以下内容:
def cmp_absolute(cpu: CPU):
addr = absolute(cpu)
value = cpu.bus.read(addr)
cmp(cpu, value)
OPCODE_TABLE = {
...
0xCD: cmp_absolute,
}`emulator/cpu/addressing_modes.py::absolute 通过 CPU.fetch_word 获取小端序字;因此 CD 00 02 会将 A 与从 $0200` 读取到的值进行比较。 C/Z/N 可能改变;A、Overflow、X、Y 和内存保持不变;操作码加字使 PC 前进三个字节。
常见误解:该操作数字是一个地址,而不是立即数比较值,并且其字节并不是大端序。 超出范围:CMP absolute,X、absolute,Y、(indirect,X) 和 (indirect),Y 属于第 151-154 课;CPX/CPY 紧随其后。
运行本课
uv run pytest tests/chapter_01_cpu/test_150_CMP_absolute.py -v