из-за громоздкости программы мне удобнне куски было бы раскидать по отдельным файлам то есть в каждом описать отдельную веткупрограммы как мне это лучше организовать? то есть идет код... где-то посередине вызывается функция описанная в отдельном файле...
Эта уже стала сильно громоздкой? Что мешает разложить функции по разным *.asm файлам? Потом эти файлы можно либо компилировать индивидуально и получить несколько обьектников, либо заинклудить их все в основной файл и компилировать только его. Код (Text): ; file1.asm include file2.asm include file3.asm ; ***
IceStudent Размер экзешника может вырасти из-за выравнивания сегментов обьектников. Чем больше обьектников, тем больше шансов, что размер экзешника увеличится. Все глобальные символы (переменные, функции) нужно явно указывать как extern в каждом файле, который их использует (или в каком-то общем инклуде). Поэтому я предпочитаю второй вариант, хотя это уже не совсем модульность получается.
IMHO, вариант с инклудами + хорошие комментарии (я даже в каждом ASM-файле прописываю имя файла, в который он включается) - это найлучший вариант. Ну а если файлов совсем много, то можно и по каталогам разложить =)
Quantum Почему? Если сегменты разные, то да. Если же объявляется один сегмент (.text$*, .data$*), то он объединяется тоже в один. Это ведь прямая работа линкера. Ну да. Что в этом плохого? Или лучше постоянно следить за тем, чтобы нужная функция была выше, чем она вызывается (если использовать invoke, а не call)? Everon
IceStudent Адреса сегментов выравниваются даже после обьединения. Если у меня в начале сегмента .text в каком-то из обьектников идёт функция F, то адрес этой функции должен быть кратен выравниванию сегмента (1 - 16 байт), не зависимо от того, попадёт ли этот сегмент в начало секции экзешника, или где-то посередине. Поэтому линкер запихивает лишние байты между сегментами обьектников внутри одной секции экзешника. Чем больше обьектников, тем больше мусора затолкает туда линкер. Конечно, если размеры всех сегментов (кроме последнего) кратны выравниванию, мусора не будет совсем, но это очень редкий случай. Ну, я invoke вообще стараюсь не юзать, но те, кто юзает, конечно, должны это учитывать.