134. EOR 指令原语

实现与寻址方式无关的 EOR 行为。

134 / 356 · tests/chapter_01_cpu/test_134_instruction_or_e.py

此步骤存在的原因

将异或语义集中到一个面向数值的原语中,使得后续每一个 EOR 操作码都能共享完全相同的累加器和 Zero/Negative 标志位行为。

在此步骤中,完成所有 ORA 相关工作后,请在 `emulator/cpu/instructions.py` 中准确添加以下符号:

def or_e(cpu: CPU, value: int):
    result_8 = (cpu.a ^ value) & 0xFF

    # Flags:
    cpu.flags.set_zero_flag(result_8 == 0)
    cpu.flags.set_negative_flag((result_8 & 0b1000_0000) != 0)

    cpu.a = result_8

面向数值的签名将 EOR 的语义与寻址方式分离开来。XOR 结果被掩码为八位,存入 A,并用于推导 Zero 和 Negative 标志位。由于 `or_e` 不会触及 Carry、Overflow、内存、X、Y 和 PC,它们保持不变。

常见误解:尽管辅助函数名为 `or_e,EOR 是异或(^),而不是或运算,value 也不是地址。不在本步骤范围内:在 emulator/cpu/opcodes.py 中导入 or_e`、每一个 EOR 操作码(第 135-142 课)以及 BIT(第 143-145 课)。

运行本课

uv run pytest tests/chapter_01_cpu/test_134_instruction_or_e.py -v