125. ORA 指令原语
实现与寻址方式无关的 ORA 行为。
第 125 / 356 · tests/chapter_01_cpu/test_125_instruction_or_a.py
此步骤存在的原因
在操作码处理程序引入各具体寻址形式之前,单一的、面向值的 ORA 基元集中定义了包含或(inclusive-OR)的结果与标志位规则。
在此步骤中,在第 116-124 课完成 AND 之后,仅需在 `emulator/cpu/instructions.py` 中添加以下符号:
def or_a(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这个面向值的 API 使 ORA 语义与寻址方式无关。八位结果存储在 A 中;Zero 反映结果是否等于零,Negative 反映结果的第 7 位。由于 `or_a` 不会触及 Carry、Overflow、内存、X、Y 及 PC,它们保持不变。
常见误解:ORA 表示按位包含或(inclusive OR),而不是异或(XOR),并且 `value 不是总线地址。不在本步骤范围内:将 or_a 导入 emulator/cpu/opcodes.py` 及所有 ORA 处理程序(第 126-133 课),以及第 134 课和第 143 课中引入的 EOR 与 BIT 符号。
运行本课
uv run pytest tests/chapter_01_cpu/test_125_instruction_or_a.py -v