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

 
 
> Возврат на основную программу из ассемблерной подпрограммы, вызванной еще одной асемблерной подпрограммой.
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
Ответов
SSerge
сообщение Apr 18 2014, 09:16
Сообщение #2


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

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



При вызове sub1 из main адрес возврата сохраняется в регистре LR.
Соответственно, для возврата нужно содержимое LR записать в PC (счётчик команд), команда BX LR именно это и делает.

Но если мы хотим из sub1 вызвать sub2, то так просто это уже не сделать, нужно куда-то сохранить текущее содержимое LR, оно нам ещё потребуется, ведь в нём лежит адрес возврата (в main).
Поэтому в sub1 придётся написать
PUSH {LR} ;
......
BL sub2
POP {PC}
И вот это всё можно заменить на простой переход к sub2.
В LR тогда останется адрес возврата в main, куда и произойдёт возврат из sub2 после исполнения в ней команды BX LR


--------------------
Russia est omnis divisa in partes octo.
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
- - Omnicake   Все, понял. Пробежался по ссылке выше (спасибо бол...   Apr 18 2014, 09:19
|- - toweroff   Цитата(Omnicake @ Apr 18 2014, 13:19) Все...   Apr 18 2014, 10:50
|- - SSerge   Цитата(toweroff @ Apr 18 2014, 17:50) ска...   Apr 18 2014, 11:45
|- - toweroff   Цитата(SSerge @ Apr 18 2014, 15:45) Это о...   Apr 18 2014, 12:05
|- - kolobok0   Цитата(toweroff @ Apr 18 2014, 16:05) ......   Apr 18 2014, 22:24
- - 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 Текстовая версия Сейчас: 29th August 2025 - 02:49
Рейтинг@Mail.ru


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