039. Stx 绝对寻址
添加 STX 绝对寻址($8E)。
第 39 / 356 · tests/chapter_01_cpu/test_039_STX_absolute.py
要更新的文件
emulator/cpu/opcodes.py位置
opcodes.stx_absolute
opcodes.OPCODE_TABLE[$8E]为什么需要这一步
本课添加 STX 的完整 16 位目标形式。既有的 absolute 辅助函数解码小端序地址,而 stx 仍只负责写入 X。
完整示例实现
# emulator/cpu/opcodes.py
def stx_absolute(cpu: CPU):
addr = absolute(cpu)
stx(cpu, addr)
OPCODE_TABLE = {
# Preserve existing entries.
0x8E: stx_absolute,
}重要不变式
- $8E 映射到 stx_absolute
- absolute 先消耗低位字节,再消耗高位字节,并返回目标地址
- 地址本身被传给 stx,由它通过总线写入 X
- 整条指令使 PC 前进 3 字节,且不修改标志
常见误区
8E 00 02 将 X 存储到 $0200;该操作数是一个小端序的目标地址,不是要加载到 X 的值,也不是大端序地址。
超出范围
- 带变址的绝对寻址 STX 编码,它们不属于受支持的 STX 集合
- 对 absolute 或 stx 的改动
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_039_STX_absolute.py -v