Цитата(jcxz @ Feb 16 2016, 02:01)

Зачем много раз перезаписывать [R2]?
Задача толком не определена, поэтому набросан лишь примерный код, очерчивающий общую идею.
Цитата
Может всё-таки: LDR R0,[R1],#4 / STR R0,[R2],#4 / SUBS R3,#1 ?
Эти варианты LDR/STR отсутствуют в первой Тумбе, а значит, на Cortex-M0 использоваться не могут. На самом деле, если чтение и запись идут с одинаковым шагом (+4 в Вашем примере), можно сделать примерно так:
Код
LDR R0, [R1, R3]
STR R0, [R2, R3]
ADDS R3, #4
BNE ...
В данном случае надо в R1, R2 и R3 занести правильные начальные значения, которые удобны для машины, а не для человека. R3 должен быть таким, чтобы при достижении им нуля (через сложение, а не вычитание) цикл прекращался; по сути, он содержит число пересылаемых байтов со знаком минус. Соответственно, в R1 и R2 должны быть не базовые адреса массивов, а адреса первых байтов
после массивов (поскольку при сложении R1/R2 и R3 итоговый адрес будет меньше, чем находящийся в R1/R2 -- ведь в R3 находится отрицательное число).
Или можно пересылать "задом наперёд", уменьшая счётчик -- это проще для понимания, но может не подходить в конкретном случае (вдруг массивы перекрываются в памяти, и пересылать надо именно двигаясь вперёд).
Цитата
А ещё можно за проход сразу пачку регистров грузить или сохранять. Одной командой.
Можно. Если надо переслать несколько слов (и всегда одно и то же количество), этот способ будет наиболее быстрым.