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

Написал 2 п/п на асме CRC и декодер (на Си - не влазило ~102 байта). Теперь вроде влезло. Правда ещё отлаживать придётся (В смысле только декодер. Так как всё остальное полностью проверил).
При написании возникли вопросы непонятные (по асму).
1) Почему-то компилятор ругается на использование регистровой пары X. Предлагает её заменить на Y или Z. В другом проекте (я проверил) он позволял мне это делать. Почему?
2) Надо ли мне сохранять использованые в п/п регистры самому? Или аналогичный ... Какие из регистров я могу безболезненно использовать (компилятор опознает и по другому сгенерит прогу)?
Ну кроме тех (естественно) которые я блокирнул (r10-r15) и тех которые используются под вызов (r16,r17). Это я могу однозначно использовать.

Непонятно и с регистровой парой Y. Компилятор же её под стек использует (хотя просматривая листинг нашёл только одно место на 1 байт).