在 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
我最近开始使用 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