对 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
)。
我不确定环绕如何与索引的 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
)。