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

 
 
 
Reply to this topicStart new topic
> А как вызывать подпрограммы?
777777
сообщение Jul 10 2009, 04:01
Сообщение #1


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

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



Почему адрес возврата помещается не в стек, а в регистр? А как быть с вложенными подпрограммами? Я уж не говорю о том, что прерывания используют тот же регистр. Где сохраниять значение этого регистра?
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jul 10 2009, 05:50
Сообщение #2


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(777777 @ Jul 10 2009, 07:01) *
Почему адрес возврата помещается не в стек, а в регистр? А как быть с вложенными подпрограммами? Я уж не говорю о том, что прерывания используют тот же регистр. Где сохраниять значение этого регистра?

Потому что у ARM есть специальный регистр для адреса возврата. Если подпрограммы вложенные, перед вызовом следующей подпрограммы содержимое LR сохраняется в стек.
У прерываний отдельный свой набор регистров.
Все это тысячу раз разжевано, почитайте любую книгу.
Go to the top of the page
 
+Quote Post
777777
сообщение Jul 10 2009, 07:20
Сообщение #3


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

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



Цитата(HARMHARM @ Jul 10 2009, 09:50) *
Потому что у ARM есть специальный регистр для адреса возврата. Если подпрограммы вложенные, перед вызовом следующей подпрограммы содержимое LR сохраняется в стек.

Значит в каджой подпрограмме надо первым делом сохранить в стеке регистр связи?

Цитата(HARMHARM @ Jul 10 2009, 09:50) *
У прерываний отдельный свой набор регистров.

А во время входа в прерывание используется уже свой набор или еще старый?

Цитата(HARMHARM @ Jul 10 2009, 09:50) *
Все это тысячу раз разжевано, почитайте любую книгу.

Этим и занимаюсь...
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Jul 10 2009, 09:19
Сообщение #4


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(777777 @ Jul 10 2009, 10:20) *
Значит в каджой подпрограмме надо первым делом сохранить в стеке регистр связи?

Только если будете вызывать подпрограммы.
Цитата
А во время входа в прерывание используется уже свой набор или еще старый?

Используется набор IRQ или FIQ в зависимости от прерывания.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 10 2009, 09:23
Сообщение #5


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

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



Цитата
Значит в каджой подпрограмме надо первым делом сохранить в стеке регистр связи?


Только если эта подпрограмма вызывает другие подпрограммы.

Цитата
А во время входа в прерывание используется уже свой набор или еще старый?


Свой. Так что LR пользовательского режима не портится.


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

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

 


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


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