025. Sta 绝对X寻址
添加绝对,X的STA($9D)。
第 25 / 356 · tests/chapter_01_cpu/test_025_STA_absolute_x.py
需要更新的文件
emulator/cpu/opcodes.py位置
opcodes.sta_absolute_x
opcodes.OPCODE_TABLE[$9D]为什么需要这一步
本课把已经过测试的 absolute_x 地址计算应用到存储操作上。操作码层负责选择X索引;sta 依然与寻址方式无关。
完整示例实现
# emulator/cpu/opcodes.py
def sta_absolute_x(cpu) -> None:
address = absolute_x(cpu)
sta(cpu, address)
OPCODE_TABLE = {
# Preserve existing entries.
0x9D: sta_absolute_x,
}重要不变量
- 两个操作数字节先组成基址,再加上X
- 使用的是完整的索引后地址;索引不会按零页方式回绕
- 处理函数存储A,并消耗三个指令字节
- STA不更新标志位
常见误解
绝对,X不会把相加结果掩码为八位。那条回绕规则属于零页,X方式,而不属于 $hhhh,X。
不在本课范围内
- 绝对,Y以及间接寻址的STA操作码
- 跨页周期行为
- 对absolute_x或sta的修改
运行本课
uv run pytest tests/chapter_01_cpu/test_025_STA_absolute_x.py -v