147. Cmp 立即寻址
添加 CMP immediate 操作码 ``0xC9``。
第 147 / 356 · tests/chapter_01_cpu/test_147_CMP_immediate.py
此步骤存在的原因
立即寻址形式首次通过 CPU 执行呈现 CMP,将 A 与一个字面字节进行比较,同时把所有比较标志位逻辑留在共享原语中。
在此步骤中,第 146 课已经添加了 `cmp。 作为 CMP 的第一个操作码课程,请添加其导入,并在 emulator/cpu/opcodes.py` 中准确添加以下处理函数/表项:
from emulator.cpu.instructions import (..., cmp)
def cmp_immediate(cpu: CPU):
cmp(cpu, immediate(cpu))
OPCODE_TABLE = {
...
0xC9: cmp_immediate,
}`addressing_modes.immediate` 直接返回取到的操作数值,因此不存在数据内存读取。 C/Z/N 可能改变;A、Overflow、X、Y 和内存保持不变;操作码加操作数使 PC 前进两个字节。
常见误解:立即寻址 CMP 不会将其操作数当作地址,也不会存储减法结果。 超出范围:各内存寻址的 CMP 模式属于第 148-154 课;CPX 和 CPY 留在后续课程中。
运行本课
uv run pytest tests/chapter_01_cpu/test_147_CMP_immediate.py -v