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

 
 
> Сохранение регистров в fies.asm IAR_AVR, Как указать компилятору на использование?
fmdost
сообщение Mar 10 2008, 01:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Доброго времени суток Уважаемые!
Прицепил к проэкту асм файл с програмкой проверки crc. Разъясните пожалуйста, как указать компилятору на неоюходимость сохранения используемых в асм файле регистров?
Спасибо.
Файл тут.Прикрепленный файл  crc.rar ( 889 байт ) Кол-во скачиваний: 124
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fmdost
сообщение Mar 10 2008, 16:23
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Спасибо. По англицки читаю. Про согдлашение по передаче параметров вкурсе.
Повторяю вопрос
Код
main()
{
unsigned char i;
for(i=0;i>100;i++)
  crc_asm(* pointer); // <- вот сдесь может портится(и портится) i  
}

Как сделать что-бы i не портился в АСМ функции?
Например crc_asm() использует ВСЕ доступные регистры, а main() только 1, в котором хранится i.
Очень бы хотелось, что-бы ИАР САМ решил что из регистров надо сохранять. А то выходит, что в АСМ функции придётся сохранять ВСЕ используемые в ней же регистры, или ковырять листинг всей main() на предмет выискивания регистра в котором хранится i .
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 10 2008, 17:12
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Т.Достоевский @ Mar 10 2008, 18:23) *
Спасибо. По англицки читаю. Про согдлашение по передаче параметров вкурсе.
Повторяю вопрос
Повторяем ответ - читайте вдумчиво про соглашение о передаче параметров. Есть регистры, которые можно портить в функции - они сохраняются в вызывающей функции. Есть регистры, которые надо сохранять в вызываемой функции. Подумайте сами логически - нафига компилятор будет при каждом вызове функции сохранять какой-то из регистров, если он не портится в вызываемой функции. Нет уж - ваша функция знает, какие регистры портит - пусть она их (только нужные и никакие другие) и сохраняет.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
fmdost
сообщение Mar 10 2008, 17:31
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(Сергей Борщ @ Mar 10 2008, 20:12) *
нафига компилятор будет при каждом вызове функции сохранять какой-то из регистров, если он не портится в вызываемой функции. Нет уж - ваша функция знает, какие регистры портит - пусть она их (только нужные и никакие другие) и сохраняет.

Нихрена он(ИАР) не знает какие надо сохранять. А если функция портит все, а вызвавшаая её функция и вся программа использует только 1 или 2 !? Зачем сохранять всё, когда можно и нужно только эти 2 ? ИАР прекрасно это делает если всё это сделано на С.
Если вызывать функцию через указатель то-же не видит, и сохраняет ВСЕ регистры, а не только те что используются в вызываемой функции.
Пробовал дефайнить по разному, надеялся что увидит, не увидил. Вот думаю а если как __интринсик, или ещё как, ну что-бы понял как свою С функцию?

Пока отвечал Сергею пропустил.
Цитата(Baser @ Mar 10 2008, 20:25) *
...под ИАРом использую только инлайн-функции (макросы).

Можно поподробней ?
Цитата
p.s. А если настолько лень в асм функции самому сохранить в стеке регистры, то пишите функции на Си, тогда компилятор сделает это за вас - на то но и Си компилятор biggrin.gif

Очень уж много сохранять придётся.
Согласен, что мои простые асм функции проще переписать на С. Но вопрос не праздный, пригодится!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Т.Достоевский   Сохранение регистров в fies.asm IAR_AVR   Mar 10 2008, 01:06
- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 03:06...   Mar 10 2008, 10:37
|- - Т.Достоевский   Цитата(Baser @ Mar 10 2008, 13:37) Попроб...   Mar 10 2008, 15:05
|- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 17:05...   Mar 10 2008, 15:59
- - Rst7   Не пойму, какие проблемы это на Си написать?   Mar 10 2008, 11:18
|- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 18:23...   Mar 10 2008, 16:35
||- - Т.Достоевский   Вот что бывает если нет конкуренции Подымал сдес...   Mar 10 2008, 16:51
||- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 18:51...   Mar 10 2008, 17:25
|- - Baser   Цитата(Т.Достоевский @ Mar 10 2008, 19:31...   Mar 10 2008, 21:19
- - Rst7   ЦитатаUse it. Вот именно к Вам это и относится. Ч...   Mar 10 2008, 18:37
|- - Т.Достоевский   Цитата(Rst7 @ Mar 10 2008, 21:37) ...Спис...   Mar 10 2008, 19:31
- - Rst7   ЦитатаА разве в GCC не RTL? RTL это кажется станда...   Mar 11 2008, 06:43
|- - Т.Достоевский   Цитата(Rst7 @ Mar 11 2008, 09:43) Чем??? ...   Mar 11 2008, 13:30
- - Rst7   ЦитатаRTL. Это вы про язык распределения регистро...   Mar 11 2008, 14:27


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

 


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


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