assembly 如何将位域从代码存储器复制到内部存储器?

kkih6yb8  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(192)

我的目的是使用以下输入复制位域:

;   R5 - Base address of the bitfield in code memory (high byte)
;   R6 - Base address of the bitfield in code memory (low byte)
;   R7 - Base address of the bitfield in the internal memory

我有下面的位域数据:
x一个一个一个一个x一个一个二个x

fxnxkyjh

fxnxkyjh1#

您的代码中有一些小问题,但原则上这是正确的方法:

  • 不能通过两次使用同一个目标将8位部件加载到DPTRDPTR的两个字节可以通过预定义的直接地址DPHDPTR高字节)和DPLDPTR低字节)分别到达。您可能需要为此包含一个寄存器包含文件。
  • 是16,不是6。
  • 在需要的地方清除累加器A,本例中是在movc指令之前。
  • 由于这似乎是一个子例程,因此循环后缺少ret
  • 我插入了一些空行以提高可读性。
CODE2IRAM:
    org 0x0070

    mov DPH, R5
    mov DPL, R6
    mov R4, #16     ;count

back:
    clr a
    movc a, @a+dptr
    mov @R7, a
    inc dptr
    inc R7
    djnz R4, back

    ret

    org 0x0040

    DB 0x42, 0x1A,  0x7F, 0x80,  0x55, 0xAA,  0xA0, 0xCC,  0x12, 0x13,  0x11, 0x10,  0x05, 0xAA,  0x42, 0x34 

    end

相关问题