Голую main можно получить если исключить startup и low_lewel_init.
Наблюдается некоторый оверхед. Если main использует хоть какие-нибудь библиотечные функции, то они тоже будут присутствовать в коде. В той части программы, которую здесь назвали BIOS, они также могут присутствовать, что слегка излишне. Если предполагается использовать таким образом несколько "подгружаемых" функций, то и они все будут содержать в себе полный набор используемых ими функций несмотря на наличие того же самого у других.
Если подобный расход памяти не критичен, то на это можно закрыть глаза. Иначе придётся таки воспользоваться механизмом DLL.
Цитата(Shuuura @ Dec 18 2007, 13:39)

Как указать линкеру, что используемая функция уже лежит по конкретному адресу и на этот адрес писать ничего не надо?
Она не только лежит по адресу, но и некоторый обьём памяти (в общем случае неизвестный) занимает.
А что касается линкера, то что ни линкер, то свои заморочки. У IAR, например, выделяется отдельный сегмент со своим диапазоном адресов.