在 6502 中寻址

Addressing in 6502

我最近开始使用 6502 汇编编程,但 运行 遇到了问题。我希望能够存储从地址 $0300 开始的 16 位内存地址,然后我想在该地址存储一个值。

例如,存储地址 $2016 将是 $0300:#$20,$0301:#$16。然后我想读取这两个字节并将值存储为 $2016。我似乎找不到允许这样做的寻址模式,是否有类似的东西,或者我是否必须使用零分页。

您需要找到两个零页位置并通过它们建立索引。间接寻址只能通过零页使用。而且,事实上,没有不使用索引的零页间接模式。

假设 </code> 和 <code> 可用。将字节复制到那里。

; Store the address you want to access in zp memory
lda 0
sta      ; Note I'm swapping the bytes (see below)
lda 1
sta 
; access the address indirectly through zero page
ldx #0
lda $data
sta (,x) ; x is zero so address used is 

我在将字节复制到零页时交换字节的原因是您已将地址(在您的问题中)以大端顺序存储在 0,即高字节在低地址。 6502 是小端字节序,这意味着它需要低地址的低字节。您应该真正遵循 6502 约定并存储您的字节,以便 0 包含 </code> 并且 <code>1 包含 .

00: #, 01: #. Then I'd like to read those two bytes and store a value at 16.

如果代码是可写的,则存在另一种不太明智的方法:可以将地址放入绝对存储指令的操作数字节中。

 LDA 1
 STA stins+1
 LDA 0
 STA stins+2
stins:
 STX $FFFF ; value in X; FFFF is placeholder for address