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

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


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

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



Цитата
В документации написано следующее:
...


Тут написано, что значение R15 "опережает" текущий адрес команды на 8 (или на 12). А цитату о невозможности write-back'а в R15 я привел выше.

Цитата
Значит как-то можно


Нельзя

Цитата
Что адреса всех переменных должны храниться в памяти команд?


Да. Именно так. Вот, например, обратите внимание на обращение к статическим переменным
CODE

\ In segment CODE, align 4, keep-with-next
336 void start_vibra(void)
337 {
\ start_vibra:
\ 00000000 10402DE9 PUSH {R4,LR}
338 extern const int VIBR_TYPE;
339 void stop_vibra(void);
340 if((Is_Vibra_Enabled)&&(!IsCalling()))
\ 00000004 ........ LDR R4,??DataTable29 ;; S_ICONS
\ 00000008 A40094E5 LDR R0,[R4, #+164]
\ 0000000C 000050E3 CMP R0,#+0
\ 00000010 1080BD08 POPEQ {R4,PC}
\ 00000014 6E0000EF SWI +110
\ 00000018 000050E3 CMP R0,#+0
\ 0000001C 1080BD18 POPNE {R4,PC}
341 {
342 extern const unsigned int vibraPower;
343 SetVibration(vibraPower);
\ 00000020 34009FE5 LDR R0,??start_vibra_0 ;; vibraPower
\ 00000024 000090E5 LDR R0,[R0, #+0]
\ 00000028 7C0000EF SWI +124
344 if(VIBR_TYPE)
\ 0000002C ........ LDR R1,??DataTable12 ;; VIBR_TYPE
\ 00000030 28209FE5 LDR R2,??start_vibra_0+0x4 ;; stop_vibra
\ 00000034 001091E5 LDR R1,[R1, #+0]
\ 00000038 DC0FA0E3 MOV R0,#+880
\ 0000003C 000051E3 CMP R1,#+0
\ 00000040 0100000A BEQ ??start_vibra_1
345 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra);
\ 00000044 3610A0E3 MOV R1,#+54
\ 00000048 000000EA B ??start_vibra_2
346 else
347 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra);
\ ??start_vibra_1:
\ 0000004C 6C10A0E3 MOV R1,#+108
\ ??start_vibra_2:
\ 00000050 040080E0 ADD R0,R0,R4
\ 00000054 4D0000EF SWI +77
348 }
349 }
\ 00000058 1080BDE8 POP {R4,PC} ;; return
\ ??start_vibra_0:
\ 0000005C ........ DC32 vibraPower
\ 00000060 ........ DC32 stop_vibra
350


Цитата
Не верится мне что разработчики АРМа не предусмотрели такой элементарной вещи как заргузка в регистр адреса переменной из памяти данных.


Даже более глобально - отсутствие прямой загрузки любого непосредственного операнда (который может являться адресом другой ячейки).


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
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   Цитата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
|- - 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 - 02:04
Рейтинг@Mail.ru


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