Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Асмовые процедуры
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
SasaVitebsk
Доброго времени суток.

Вожусь с bootload для малых камней 8/88 и т.п. Перепробовал различные фирменные - написал полностью сам. В исследованом мной MegaLoad имеются просто ошибки прямые. Не представляю как он может работать. Ну да ладно.

Пришёл к оптимизации. При исследованиях обнаружил прикольную вещь. IAR не использует ~8 регистров. 2,3 и с 10 по 15. Если компилятору указываешь не использовать с 10 по 15, то код становится короче байт на 20. Причину не выяснил. smile.gif

Написал 2 п/п на асме CRC и декодер (на Си - не влазило ~102 байта). Теперь вроде влезло. Правда ещё отлаживать придётся (В смысле только декодер. Так как всё остальное полностью проверил).

При написании возникли вопросы непонятные (по асму).
1) Почему-то компилятор ругается на использование регистровой пары X. Предлагает её заменить на Y или Z. В другом проекте (я проверил) он позволял мне это делать. Почему?
2) Надо ли мне сохранять использованые в п/п регистры самому? Или аналогичный ... Какие из регистров я могу безболезненно использовать (компилятор опознает и по другому сгенерит прогу)?

Ну кроме тех (естественно) которые я блокирнул (r10-r15) и тех которые используются под вызов (r16,r17). Это я могу однозначно использовать. smile.gif

Непонятно и с регистровой парой Y. Компилятор же её под стек использует (хотя просматривая листинг нашёл только одно место на 1 байт).
IgorKossak
Цитата(SasaVitebsk @ Nov 2 2008, 00:39) *
При написании возникли вопросы непонятные (по асму).
1) Почему-то компилятор ругается на использование регистровой пары X. Предлагает её заменить на Y или Z. В другом проекте (я проверил) он позволял мне это делать. Почему?

Подробно об отличиях этих регистровых пар было, в частности, здесь.
Цитата(SasaVitebsk @ Nov 2 2008, 00:39) *
2) Надо ли мне сохранять использованые в п/п регистры самому? Или аналогичный ... Какие из регистров я могу безболезненно использовать (компилятор опознает и по другому сгенерит прогу)?

Если Вы работаете в asm, то не следует употреблять слово "компилятор". Что же касается ассемблера, то он не делает ничего, что Вы ему не говорите делать, а только строка в строку переводит ассемблерный текст в код. Поэтому предполагать, что он будет вместо Вас сохранять\восстанавливать регистры несколько некорректно.
Artem_Petrik
Цитата
2) Надо ли мне сохранять использованые в п/п регистры самому? Или аналогичный ... Какие из регистров я могу безболезненно использовать (компилятор опознает и по другому сгенерит прогу)?


Для работы соместно с кодом написанным на си, нужно соблюдать соглашения, используемые данным компилятором си. IAR позволяет процедуре не сохранять регистры r0-r1, r16-r23 и пару Z. Это так называемые scratch регистры. Если при вызове из C процедура обьявлена как __x, то также не сохраняется пара X. Более подробно это все расписано в compiler reference в разделе "чето типа ASM interworking или чтото типа того." smile.gif
SasaVitebsk
Спасибо. Правда всё уже работает, но всё равно ваша информация очень полезна.
После вашего поста, всё прояснилось.
Естественно, я читал мануал. Причём неоднократно. Правда знание языка... sad.gif
Я сделал выводы что через scratch регистры передаётся инфа. И заведомо неиспользуются только те, ч/з которые передаётся. Если int, то 16/17 к примеру. smile.gif

Теперь понял. А так - установил опытным путём. Про r0-r1 - тоже догадывался, но проверять не стал. smile.gif

Очень хороший компилятор. Особенно для AVR. Особенно если ему немного помогать.

1к для м88/м8. Протокол WakeUp, вместе с выдачей инфо по плате и софту, дешифратором простеньким 128 бит, индикацией режима "boot", всякими контрольными суммами, WDT.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.