对 6502 间接 x 和 y 中的包装感到困惑

Confused about wrapping in 6502 indirect x and y

我不确定环绕如何与索引的 x 和 y 地址模式一起工作。我发现的文档清楚地表明索引部分包含在零页内,但是实际取消引用的 16 位地址也被限制在零页吗?

假设我有这个代码:

LDX #[=10=]
LDA #
STA $ff
LDA #
STA 00
LDA #
STA [=10=]
LDY #[=10=]a
STY 05
LDY #[=10=]b
STY 05
LDA ($ff,X)

A 会加载 [=14=]a 还是 [=15=]b

很明显,如果X加载了</code>,那么地址就会从<code>[=18=]$ff + == [=19=])中查找。但在这种情况下,我们将从 $ff 读取 16 位地址低字节 - 是从 00 读取高字节还是从 [=18=]?

与间接 y 类似,假设我有以下代码:

LDY #[=11=]
LDA #
STA $ff
LDA #
STA [=11=]
LDA #
STA 00
LDX #[=11=]a
STX 30
LDX #[=11=]b
STX 30
LDA ($ff),Y

我们从$ff读取一个16bit的地址,hi字节是从00读取还是从[=18=]读取?

最后,还有间接 y:

LDY #
LDA #$ff
STA 
STA 
LDX #[=12=]a
STX [=12=]
LDA (),Y

我们取消引用 </code> 并获得 <code>$ffff,然后添加 </code>,这是否意味着我们从 <code>[=18=] 加载并在 [=13] 中获得 [=14=]a =]?

()内的地址为8位地址。实际有效地址为16位地址。

所以如果你有LDA ($FF,X)X=0,那么16位有效地址将从$FF(LSB)和[=14=](MSB)加载, A 从该地址加载。

如果你有 LDA ($FF),Y 那么一个 16 位地址将从 $FF[=14=] 加载,然后 Y 被添加到那个 16 位地址, A 是从结果地址加载的。添加 Y 不会在 8 位边界处回绕(但会在 16 位边界处回绕,即 [=22=]FF + 1 = 00$FFFF + 1 = [=23=]00)。