6502 间接寻址问题

mag*_*n94 2 assembly 6502 commodore

我在 6502 机器上使用以下代码时遇到一些问题:

C000 LDA #$00
C002 STA $FE
C004 LDA #$20
C006 STA $FF
C008 LDY #$08
C00A LDX #$00
C00C DEY
C00D CPY #$FF
C00F BEQ $C01B
C011 LDA ($FE),Y
C013 CMP #$2F
C015 BPL $C00C
C017 INX
C018 JMP $C00C
C01B BRK
Run Code Online (Sandbox Code Playgroud)

练习是存储从地址 2000 开始的数字 2、1 和 4,并说出 A、X 和 Y 的值是多少。

我正在用笔和纸“运行”我的代码,但由于以下原因我陷入了 C011:
LDA ($FE),Y
它将存储在内存地址处的值加载到 A 中,计算方式如下:

  1. 选择$FE值(最初为 00)
  2. 添加 Y 的值(第一次迭代时为 7)
  3. 我现在有07
  4. 将 07 处存储的值加载到 A 中

它是否正确?我错过了什么吗?如果不是,我在哪里使用存储在2000 2001和中的值2002

提前致谢..

Mic*_*ael 5

选择 $FE 值(最初为 00)

实际上,它从 加载一个 16 位值$FE,然后Y与该值相加以获得有效地址。

您已经存储$00$FE$20at 处$FF,因此加载的 16 位值$FE将是$2000

我在哪里使用 2000、2001 和 2002 中存储的值

Y值为 0、1 和 2 时。循环将继续,直到Y从 0 回绕到 $FF。


请参阅6502.txt中的“10)后索引间接”