我一直在使用cbm编程工作室学习6502汇编。我正在读一本吉姆巴特菲尔德和理查德曼斯菲尔德的书。这两本书都讨论了如何使用一种方法(我认为这是间接寻址)来从一块内存中获取数据(比如消息),但没有一个例子可以有人给我一个请求吗?我不在乎使用什么方法。
答案 0 :(得分:1)
这是相当直接的。您设置一对零页地址以保存块的起始地址,然后使用Y的间接索引来访问块中的字节。指令LDA ($80),Y
读取$80
和$81
处的字节作为16位地址($81
包含最高8位)然后添加Y,然后读取结果地址。
请注意,如果您事先知道地址,则不需要使用间接寻址,您可以使用绝对索引。
以下例程演示两种寻址模式。它将X和Y寄存器中指定的位置的10个字节(Y是高字节)复制到$0400
stx $80 ; Store the low byte of the source address in ZP
sty $81 ; Store the high byte of the source in ZP
ldy #0 ; zero the index
loop: lda ($80),y ; Get a byte from the source
sta $0400,y ; Store it at the destination
iny ; Increment the index
cpy #10 ; Have we done 10 bytes?
bne loop ; Go round again if not
请注意,上面有一个明显的优化,但我会把它作为读者的练习。
编辑确定这是根据i486的评论显而易见的优化
stx $80 ; Store the low byte of the source address in ZP
sty $81 ; Store the high byte of the source in ZP
ldy #9 ; initialise to the highest index
loop: lda ($80),y ; Get a byte from the source
sta $0400,y ; Store it at the destination
dey ; Decrement the index
bpl loop ; Go round again if index is still >= 0