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

 
 
> Загрузить константу в регистр
777777
сообщение Jul 9 2009, 11:51
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Решил изучить ARM, смотрю систему команд и не вижу загрузки любой константы в регистр. Как это сделать, неужели нужно извращаться через R15 с автоинкрементом?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Jul 9 2009, 17:03
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
ARM называет LDR псевдокомандой.


Не возражаю smile.gif Главное, что все-же не "командой", именно это я хотел подчеркнуть.

Цитата
По п.2 ARM ассемблер размещает "неудобную" константу по-близости (<4KB) от реальной команды загрузки константы, минимизируя тем самым время доступа к ней.


Дальше 4х килобайт он банально не может разместить - не хватает разрядности смещения в коде команды. Но суть совсем не в дистанции, а в том, что выборка перестает быть последовательной.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 9 2009, 19:32
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Rst7 @ Jul 9 2009, 21:03) *
Не возражаю smile.gif Главное, что все-же не "командой", именно это я хотел подчеркнуть.



Дальше 4х килобайт он банально не может разместить - не хватает разрядности смещения в коде команды. Но суть совсем не в дистанции, а в том, что выборка перестает быть последовательной.

А вы возметесь оценить потери от такой непоследовательной выборки? Думается, что на практике - это плюнуть и забыть.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 9 2009, 19:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sergeeff @ Jul 9 2009, 23:32) *
А вы возметесь оценить потери от такой непоследовательной выборки? Думается, что на практике - это плюнуть и забыть.

Оценить можно - на ARM7TDMI LDR выполняется за 3 такта, а команда типа MOV Rd, imm - за 1. Т.е. теряем такт по сравнению с загрузкой двумя "простыми" командами (ну, если бы они существовали, конечно).

А вот если взять процессор с раздельными кэшами, то все получается совсем плохо - такой LDR может вызвать DCache linefill из области программ, и будет это делать довольно часто.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 9 2009, 19:59
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Jul 10 2009, 01:53) *
Оценить можно - на ARM7TDMI LDR выполняется за 3 такта, а команда типа MOV Rd, imm - за 1. Т.е. теряем такт по сравнению с загрузкой двумя "простыми" командами (ну, если бы они существовали, конечно).

В LPC2ххх выполняя прогу из флэша команда LDR Rx,=imm будет выполняться дольше. в зависимости от настроек MAM, вполне возможно что и 5 и 6 тактов. Но если проц работает на частоте до 20 МГц, то 3 такта тоже может быть, но не меньше.

Сообщение отредактировал GetSmart - Jul 9 2009, 20:00


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 9 2009, 20:03
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Jul 9 2009, 23:59) *
В LPC2ххх выполняя прогу из флэша команда LDR Rx,=imm будет выполняться дольше. в зависимости от настроек MAM, вполне возможно что и 5 и 6 тактов.

Ну, это частный случай кэшированного процессора, если можно так выразиться.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 777777   Загрузить константу в регистр   Jul 9 2009, 11:51
- - Rst7   Обычно некоторый набор констант можно загрузить, и...   Jul 9 2009, 12:08
|- - 777777   Цитата(Rst7 @ Jul 9 2009, 16:08) Обычно н...   Jul 10 2009, 04:21
- - Сергей Борщ   Цитата(777777 @ Jul 9 2009, 14:51) неужел...   Jul 9 2009, 12:12
- - Rst7   ЦитатаА как иначе встроить произвольное 32-битное ...   Jul 9 2009, 12:22
- - sergeeff   Команда LDR не такая "тупая", как многим...   Jul 9 2009, 16:11
- - Rst7   ЦитатаКоманда LDR не такая "тупая", как ...   Jul 9 2009, 16:19
|- - sergeeff   Цитата(Rst7 @ Jul 9 2009, 20:19) А никто ...   Jul 9 2009, 16:27
- - Rst7   ЦитатаА если написать LDR Rn, [PC], #8 и в нужное ...   Jul 10 2009, 05:30
|- - 777777   Цитата(Rst7 @ Jul 10 2009, 09:30) Такой с...   Jul 10 2009, 07:08
|- - aaarrr   Цитата(Rst7 @ Jul 10 2009, 09:30) Случай-...   Jul 10 2009, 09:27
- - Rst7   ЦитатаВ документации написано следующее: ... Тут ...   Jul 10 2009, 07:25
|- - 777777   Цитата(Rst7 @ Jul 10 2009, 11:25) Тут нап...   Jul 10 2009, 08:50
- - Rst7   ЦитатаНу, значит в принципе можно? Только считывае...   Jul 10 2009, 09:15
- - Rst7   ЦитатаДык я разве что другое писал? Дык я ж проти...   Jul 10 2009, 09:32


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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 15:48
Рейтинг@Mail.ru


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