реклама на сайте
подробности

 
 
> загрузка с декрементом указателя
Огурцов
сообщение Feb 13 2016, 09:34
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



не нашёл команду ассемблера, есть такая ?
stm32f0, 3, 4


Сообщение отредактировал Огурцов - Feb 13 2016, 09:35
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Огурцов
сообщение Feb 13 2016, 16:56
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



да вроде бы не совсем правильная инструкция
мне нужно загрузить данные в регистр по указателю, декрементировать указатель и перейти пока не ноль
т.е. обычный цикл, который можно легко сделать на avr
а тут что-то через указатель стека, что там с чем сравнивать и что будет с данными при прерываниях
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 15 2016, 23:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Огурцов @ Feb 13 2016, 22:56) *
да вроде бы не совсем правильная инструкция
мне нужно загрузить данные в регистр по указателю, декрементировать указатель и перейти пока не ноль
т.е. обычный цикл, который можно легко сделать на avr
а тут что-то через указатель стека, что там с чем сравнивать и что будет с данными при прерываниях

Если не хотите читать документацию по системе команд, то хотя-бы асм-листинг этого си-кода посмотрите. С макс. оптимизацией.

Цитата(SII @ Feb 15 2016, 01:50) *
LDR R0, [R1]
STR R0, [R2]
SUBS R1, #4
BNE ....

Зачем много раз перезаписывать [R2]?
Может всё-таки: LDR R0,[R1],#4 / STR R0,[R2],#4 / SUBS R3,#1 ?
А ещё можно за проход сразу пачку регистров грузить или сохранять. Одной командой.
Go to the top of the page
 
+Quote Post
SII
сообщение Feb 15 2016, 23:38
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(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 находится отрицательное число).

Или можно пересылать "задом наперёд", уменьшая счётчик -- это проще для понимания, но может не подходить в конкретном случае (вдруг массивы перекрываются в памяти, и пересылать надо именно двигаясь вперёд).

Цитата
А ещё можно за проход сразу пачку регистров грузить или сохранять. Одной командой.


Можно. Если надо переслать несколько слов (и всегда одно и то же количество), этот способ будет наиболее быстрым.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Огурцов   загрузка с декрементом указателя   Feb 13 2016, 09:34
- - Сергей Борщ   LDMDB?   Feb 13 2016, 11:03
- - SSerge   У M3 и M4 такая инструкция есть: http://infocenter...   Feb 13 2016, 16:34
|- - Сергей Борщ   Цитата(Огурцов @ Feb 13 2016, 18:56) мне ...   Feb 13 2016, 17:20
||- - Огурцов   Цитата(Сергей Борщ @ Feb 13 2016, 17:20) ...   Feb 13 2016, 18:10
||- - Сергей Борщ   Цитата(Огурцов @ Feb 13 2016, 20:10) инде...   Feb 13 2016, 19:10
||- - aaarrr   Цитата(Огурцов @ Feb 13 2016, 21:10) а де...   Feb 13 2016, 19:28
|- - jcxz   Цитата(SII @ Feb 16 2016, 05:38) Эти вари...   Feb 19 2016, 01:05
- - SSerge   Тогда это команды типа LDR Rt, [Rn], #offset но, а...   Feb 13 2016, 17:27
- - Огурцов   не, а как ещё можно быстренько пробежаться по масс...   Feb 13 2016, 19:26
- - Огурцов   _и_ декремент не лезет надо было вписать в пять та...   Feb 13 2016, 19:35
- - Огурцов   можно даже в шесть   Feb 13 2016, 21:34
- - SII   LDR R0, [R1] STR R0, [R2] SUBS R1, #4 BNE ....   Feb 14 2016, 19:50
- - Сергей Борщ   А пересылать не требовалось. Требовалось, цитирую,...   Feb 16 2016, 07:58
- - Огурцов   мне как раз и не хватало шестого такта повторное ч...   Feb 16 2016, 19:42
|- - jcxz   Дошли у меня наконец-то руки скачать и открыть опи...   Feb 17 2016, 05:24
- - Огурцов   загрузка с выгрузкой занимает 3 такта переход 1+p ...   Feb 17 2016, 17:11
|- - jcxz   Цитата(Огурцов @ Feb 17 2016, 23:11) загр...   Feb 18 2016, 03:46
- - Огурцов   Цитатаstm32f0, 3, 4 stm32f407 в первую очередь   Feb 18 2016, 19:24
- - Огурцов   ну да, муму тургенев написал, а памятник пушкину, ...   Feb 19 2016, 05:51


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01404 секунд с 7
ELECTRONIX ©2004-2016