082. Dex 指令

添加 DEX 指令行为。

82 / 356 · tests/chapter_01_cpu/test_082_instruction_dex.py

在这一步中,仅添加指令函数。操作码 0xCA 是下一步测试 083 的内容。

生产代码位置与符号

emulator/cpu/instructions.py: `dex(cpu: CPU)`

本步骤存在的原因

DEX 是与操作码解码无关的寄存器行为。Python 整数不会自动回绕,因此减法结果必须归一化为 8 位。

实现建议

def dex(cpu: CPU):
    result = cpu.x - 1
    result_8 = result & 0xFF

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

    cpu.x = result_8

重要不变量

  • X 通过 & 0xFF 从 0x00 回绕到 0xFF
  • Zero 和 Negative 由最终的 8 位值推导得出
  • Carry、Overflow、内存以及所有其他寄存器均不受影响

常见误解

DEX 不是通过 SBC 实现的减法:它既不消耗也不改变 Carry,也不适用 SBC 的溢出规则。

不在本步骤范围内

  • dex 导入 opcodes 并映射 0xCA(测试 083)
  • 后续 Y 寄存器的自增/自减
  • 周期计时

运行本课

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