6502程序集从一块内存中获取数据

时间:2018-05-19 16:04:09

标签: 6502

我一直在使用cbm编程工作室学习6502汇编。我正在读一本吉姆巴特菲尔德和理查德曼斯菲尔德的书。这两本书都讨论了如何使用一种方法(我认为这是间接寻址)来从一块内存中获取数据(比如消息),但没有一个例子可以有人给我一个请求吗?我不在乎使用什么方法。

1 个答案:

答案 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