对不起,如果这个问题似乎是'太基本'。我是一个68K ASM编码器,但有一位朋友要求我浏览一下6502代码。 我们有一个指向一串数据:阅读内存和公司(6502)
my_ptr ds 2
此指针设置与此代码:
ldx sound_channel_busy
bne .abc_set_score1 ; at bottom of code
sta my_ptr ; fill the pointer
读取数据与
lda (my_ptr),y ; my_ptr + offset
这样做,但我看到的6502 doc,y是一个字节。因此,使用超过255字节的数据字符串是不可能的(我们要读取10.000字节或更多的字符串) 我建议我的朋友这样做:
1)设置一个指针为 “碱基” 和临时其中之一在读取
my_ptr ds 2
my_ptr_tmp ds 2
2我们将INC)初始将它们与:
ldx sound_channel_busy
bne .abc_set_score1
sta my_ptr
sta my_ptr_tmp ; Duplicate
3)然后读取使用:
lda (my_ptr_tmp) ; Read to acumulator
inc my_ptr_tmp ; One more on adress pointer
但它不工作,因为我的朋友是一个C开发,我们没有调试器...不容易。 在68K这似乎是合乎逻辑的,但在6502?
非常感谢您的帮助
嗯......在你的答案的第一部分,这意味着你读取2个字节。但在我的情况下,我有一个2字节的地址,我只想从中读取一个地址。所以我认为问题来自于地址的增加(你在解释中解释了你的答案的一部分)。我对吗? (我会试着回来)。非常感谢。 – Peter
所以这意味着68K中的moveword必须在这里用两个移动字节完成。用于复制prt并且还包含它。非常感谢 – Peter
是的,我认为你说的是正确的。数据是字节还是字?正如你所看到的,65(C)02代码几乎是RISC,所以代码根据上下文确实改变(注册使用等)。如果你详细说明你的用例,我可以充实我的示例代码。例如,如果数据未被终止(可能是声音样本的情况),则可能需要递减两字节计数器。 –