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