美文网首页
6502芯片:复杂内存数据的传输(Complex Memory

6502芯片:复杂内存数据的传输(Complex Memory

作者: 苹果王子刘泽庆 | 来源:发表于2021-05-27 06:37 被阅读0次

    将数据从一处移到另一处是一种常见的操作。如果要移动的数据量是256字节或更少,并且数据的源和目标位置是固定的,那么使用索引LDA和索引STA进行简单循环是效率最高的。
    需要注意的是,虽然X和Y寄存器都可以在索引寻址模式中使用,但6502指令中的不对称意味着,如果一个或两个内存区域驻留在零页上,X寄存器是更好的选择。

    ; Move 256 bytes or less in a forward direction
        LDX #0      ;Start with the first byte
    _LOOP   LDA SRC,X   ;Move it
        STA DST,X
        INX     ;Then bump the index ...
        CPX #LEN    ;... until we reach the limit
        BNE _LOOP
    

    先移动最后一个字节的对应代码如下:

    ; Move 256 bytes or less in a reverse direction
        LDX #LEN    ;Start with the last byte
    _LOOP   DEX     ;Bump the index
        LDA SRC,X   ;Move a byte
        STA DST,X
        CPX #0      ;... until all bytes have moved
        BNE _LOOP
    

    如果要操作的数据更小(128字节或更少),那么我们可以取消比较限制,同时可以使用DEX指令设置标志位来监测循环是否结束。

    ; Move 128 bytes or less in a reverse direction
        LDX #LEN-1  ;Start with the last byte
    _LOOP   LDA SRC,X   ;Move it
        STA DST,X
        DEX     ;Then bump the index ...
        BPL _LOOP   ;... until all bytes have moved
    

    要创建一个完全通用的内存传输,我们必须改变使用间接索引寻址访问内存和使用所有寄存器。下面的代码显示了一个前向传输算法,它首先移动完整的256字节页,然后是剩余的较小大小的片段。

    _MOVFWD LDY #0      ;Initialise the index
        LDX LEN+1   ;Load the page count
        BEQ _FRAG   ;... Do we only have a fragment?
    _PAGE   LDA (SRC),Y ;Move a byte in a page transfer
        STA (DST),Y
        INY     ;And repeat for the rest of the
        BNE _PAGE   ;... page
        INC SRC+1   ;Then bump the src and dst addresses
        INC DST+1   ;... by a page
        DEX     ;And repeat while there are more
        BNE _PAGE   ;... pages to move
    _FRAG   CPY LEN+0   ;Then while the index has not reached
        BEQ _DONE   ;... the limit
        LDA (SRC),Y ;Move a fragment byte
        STA (DST),Y
        INY     ;Bump the index and repeat
        BNE _FRAG\?
    _DONE   EQU *       ;All done
    

    相关文章

      网友评论

          本文标题:6502芯片:复杂内存数据的传输(Complex Memory

          本文链接:https://www.haomeiwen.com/subject/gtbajltx.html