使用ldm / stm指令复制数据

时间:2013-09-04 11:09:34

标签: assembly arm

它是手臂组装者。我需要使用指令ldm和stm在一次迭代中复制8个数组的数组。您不能添加或清除任何代码行。我该怎么做?

这是您需要使用的代码:

  num   EQU 24      
  IMPORT exit       
  EXPORT start          

start   LDR r0, =src
        LDR r1, =dst
        MOV r2, #num
            LSL     r2,#3
LOOP    LDM ????                        what to put instead of ????                     
        STM ????                   
        SUBS    r2, r2, #1
        BNE LOOP        
        BL exit         
        AREA Block, DATA, READWRITE
 src    DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8
 dst    DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END

1 个答案:

答案 0 :(得分:1)

您可以找到LDMSTM here的说明。

您正在寻找的说明可能是LDMIASTMIAIA表示之后的增量;即传输一个字,然后递增地址)。

例如:

LDMIA r0!,{r3-r6}  @ Read four words from src (r0) into registers r3, r4, r5 and r6.
                   @ The final address is written back to r0.

顺便说一句,这对我来说不太合适:

     MOV r2, #num, LSL#2
LOOP ...               
     SUBS r2, r2, #1

从事物的外观来看,你要迭代96次(==数组的大小,以字节为单位)。但你显然不只是每次迭代复制一个字节。如果您计划每次迭代复制8个单词,则只应迭代3次(96/32)。