> 1. Никогда не сталкивались с отсутсвием floating-point?Сталкивались. И чего? Если FPU нет то вариантов немного: сэмулировать его или не использовать в программе плавучку. У благородного дона есть какие-то иные варианты?
> 2. При чём тут ассемблер?
При том что си можно гонять в этаком режиме портабельного ассемблера. Не так уж принципиально написать a+=b; или add r1, r2. Только первый вариант соберется под любой процессор, а второй - только под процессор у которого есть r1 и r2 и синтаксис ассемблера именно такой.
> На микроконтроллерах может не хватить мощи.
И тогда програмер идет оптимизировать код. Или берет мк помощнее. А знаешь, у STM32F4xx и аппаратная плавучка есть, и частоты приличные по меркам МК, и интерфейс внешней памяти есть, памяти можно навесить немеряно, и MPU ("MMU lite") и вообще, какие-то извращенцы поддержку в mainline ядро Linux аж запилили.
> Без оптимизаций компиляторы нередко выдают отвратный код.
Ты знаешь, gcc очень прилично оптимизирует под Cortex M, легко подпирая конкуренцией коммерческие тулсы. И флаги оптимизации там такие же как и для других процессоров.
> что Си - это не "переносимый ассемблер". Из контекста не надо выпадать
Вполне себе можно использовать в этом режиме. Даже прокатывает. Вариантов как это делать лучше все-равно на горизонте не видно, а ты в своем праве программить STM32F4xx на ассемблере, если хочешь. Заполнить флешак на пару мегов ассемблерной программой еще ухитриться надо, да и ты уж извини но gcc програмера жестоко обставит глобальными оптимизациями на таком объеме. Человек теряет контекст если кода более чем несколько кило и тогда компилятор лучше оптимизирует использование регистров.