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

 
 
> Загрузить константу в регистр
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, 12:08
Сообщение #2


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

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



Обычно некоторый набор констант можно загрузить, используя байтовый иммедитейт и сдвиг. Остальное - LDR по PC+что-то (константы лежат рядом с кодом, а не внутри, так что без автоинкремента). Есть такой недостаток у ARM'а.

Посмотрите, например, как это делает любой сишный компилятор. Да и многие ассемблеры поддерживают макрос типа "LDR Rx,=число" с автоматической генерацией нужного кода и данных.


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


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

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



Цитата(Rst7 @ Jul 9 2009, 16:08) *
Обычно некоторый набор констант можно загрузить, используя байтовый иммедитейт и сдвиг. Остальное - LDR по PC+что-то (константы лежат рядом с кодом, а не внутри, так что без автоинкремента).

А если написать LDR Rn, [PC], #8 и в нужное место вставить константу - такое не практикуется? По аналогии с DEC: MOV Rn, (PC)+
Тогда и выборка не нарушится. Может в ассемблере есть соответствующие средства для такой записи?

Допустим я хочу загрузить в регистр адрес переменной из памяти данных для последующего косвенного обращения к ней. Поскольку она находятся в другом сегменте, я не могу это сделать просто прибавляя смещение к счетчику команд. Значит адрес этой переменной должен находиться в памяти команд в том сегменте из которого я к ним обращаюсь? Значит адреса всех переменных должны храниться в памяти команд? Че-то не то... sad.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 777777   Загрузить константу в регистр   Jul 9 2009, 11:51
- - Сергей Борщ   Цитата(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   ЦитатаARM называет LDR псевдокомандой. Не возража...   Jul 9 2009, 17:03
|- - sergeeff   Цитата(Rst7 @ Jul 9 2009, 21:03) Не возра...   Jul 9 2009, 19:32
|- - aaarrr   Цитата(sergeeff @ Jul 9 2009, 23:32) А вы...   Jul 9 2009, 19:53
|- - GetSmart   Цитата(aaarrr @ Jul 10 2009, 01:53) Оцени...   Jul 9 2009, 19:59
|- - aaarrr   Цитата(GetSmart @ Jul 9 2009, 23:59) В LP...   Jul 9 2009, 20:03
- - 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 Текстовая версия Сейчас: 22nd July 2025 - 15:16
Рейтинг@Mail.ru


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