Но в таких классных с точки зрения периферии F0 асм урезан до минимума((
Попробую рассказать:
границы памяти секторов определяет линкер для этого в скрипте линкера можно создавать переменные.
ну это понятно. Таблица векторов прерывания.
этот код это начало программы Reset_Handler (вектор сброса) тут тоже все просто вначале вызов SystemInit, потом уже переход в программу пользователя __main
тут вначале функции заглушки для системных исключений, потом большая заглушка на все прерывания (со слабым привязыванием для возможности перекрытия пользовательским обработчиком прерывания). Асм не такой немного как у GCC, непривычный для меня.
Что интересно я не увидел где инициализируются секции .data и .bss (в .data переменные в СОЗУ которые инициализированы (переносяться из флеш памяти), в .bss переменные не инициализированы в программе (просто обнуляються в соответствии с правилами Си)).
Просматривая листинги многое становиться понятным, структура функций, как происходит обращение к данным. Например кортексы не поддерживают абсолютную адресацию, поэтому один и тот же код может выполняться в разном адресном пространстве. И полезно также знать что вызовы функций на Си происходит по стогому правилу - передача параметров производиться через регистры R0-R3, возвращаемое значение через R0. Если параметров больше передача идет через стек. В той книге что вы читаете все есть, благодаря ей я и научился асму) ну и смог написать диспетчер задач.