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

 
 
> Возврат на основную программу из ассемблерной подпрограммы, вызванной еще одной асемблерной подпрограммой.
Omnicake
сообщение Apr 18 2014, 07:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 12-01-14
Из: Омск
Пользователь №: 80 002



Здравствуйте, подскажите, какой команду в THUMB инструкции ассемблера использовать, чтобы вернутся из подпрограммы на asm в main.c если сама подпрограмма была вызвана из другой? То есть путь примерно такой: main.c -> подпрограмма1.s -> подпрограмма.2.s . Нужно из подпрограммы2 прыгнуть в main.c. Ранее использовал bx lr, но тут вложение глубже. Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Omnicake
сообщение Apr 18 2014, 09:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 12-01-14
Из: Омск
Пользователь №: 80 002



Все, понял. Пробежался по ссылке выше (спасибо большое, кстати) и дошло. Команда B - не изменяет состояние регистра LR, поэтому при переходе от sub1 к sub2 он не изменится и можно будет через BX LR во второй программе на него вернуться. Спасибо за помощь.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Apr 18 2014, 10:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Omnicake @ Apr 18 2014, 13:19) *
Все, понял. Пробежался по ссылке выше (спасибо большое, кстати) и дошло. Команда B - не изменяет состояние регистра LR, поэтому при переходе от sub1 к sub2 он не изменится и можно будет через BX LR во второй программе на него вернуться. Спасибо за помощь.

скажите, а в чем сакральный смысл такого подхода?
Go to the top of the page
 
+Quote Post
SSerge
сообщение Apr 18 2014, 11:45
Сообщение #4


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(toweroff @ Apr 18 2014, 17:50) *
скажите, а в чем сакральный смысл такого подхода?

Это оптимизация путём отрубания хвостов, или, выражаясь высоким штилем, устранение хвостовой рекурсии.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Apr 18 2014, 12:05
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(SSerge @ Apr 18 2014, 15:45) *
Это оптимизация путём отрубания хвостов, или, выражаясь высоким штилем, устранение хвостовой рекурсии.

но так вроде же оптимизатор сам должен это делать?

UPD
Сейчас специально проверил пример из ссылки. Вызов из main() одной функции, в ней переход B в рекурсивную, там вычисления все в простом цикле, после чего возврат из первой стандартно BX LR с сохранением результата в R0
Keil 5.10, armcc 5.04.0.49
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 18 2014, 22:24
Сообщение #6


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(toweroff @ Apr 18 2014, 16:05) *
....Сейчас специально проверил пример из ссылки.....



тсссссс. спугнёте велостроителей...
а так всё красиво начиналось... sad.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Omnicake   Возврат на основную программу из ассемблерной подпрограммы, вызванной еще одной асемблерной подпрограммой.   Apr 18 2014, 07:05
- - demiurg_spb   Цитата(Omnicake @ Apr 18 2014, 11:05) Здр...   Apr 18 2014, 07:50
- - Omnicake   Случай в рамке описывает сценарий, когда main тоже...   Apr 18 2014, 08:13
- - SSerge   Цитата(Omnicake @ Apr 18 2014, 14:05) То ...   Apr 18 2014, 08:53
- - Omnicake   Немного запутался...получается если у меня будет п...   Apr 18 2014, 09:00
- - SSerge   При вызове sub1 из main адрес возврата сохраняется...   Apr 18 2014, 09:16
- - ViKo   На C пишите, а в ассемблерный листинг глядите...   Apr 18 2014, 09:20
- - andrewlekar   Честно не знал, что компиляторы си умеют TCO. Тепе...   Apr 20 2014, 15:57


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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 20:19
Рейтинг@Mail.ru


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