139. 绝对,X EOR
添加 EOR absolute,X 操作码 ``0x5D``。
第 139 / 356 · tests/chapter_01_cpu/test_139_EOR_absolute_x.py
此步骤存在的原因
程序需要对以 X 变址的完整地址数据执行 EOR;此步骤将该有效地址形式与已经过测试的异或语义连接起来。
在此步骤中,第 138 课提供了未变址的绝对寻址 EOR。请在 `emulator/cpu/opcodes.py` 中准确添加以下内容:
def eor_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
or_e(cpu, value)
OPCODE_TABLE = {
...
0x5D: eor_absolute_x,
}`emulator/cpu/addressing_modes.py::absolute_x 获取小端序基址字后加上 X;该辅助函数不会额外应用 & 0xFFFF 掩码。处理函数读取变址后的位置,并调用 instructions.or_e`。A 与 Z/N 可能改变;Carry/Overflow、内存、X 和 Y 保持不变;PC 前进三个字节。
常见误解:X 变址的是解码后的 16 位地址,而不是其低位操作数字节。不在本步骤范围内:absolute,Y 和间接寻址的 EOR(第 140-142 课)以及 BIT(第 143-145 课)。
运行本课
uv run pytest tests/chapter_01_cpu/test_139_EOR_absolute_x.py -v