АССЕМБЛЕР. Компоновщик. Загрузчик. Макрогенератор

         

Настройка программы на место.


Итак, только в этот момент становится известным начальный адрес программы и лишь теперь можно полностью завершить трансляцию программы. Такое завершение трансляции заключается, как говорят, в настройке программы на занимаемое ею место в памяти, в привязке ее к этому месту. Делается это так.

Напомним, что в программе остались недотранслированными имена сегментов: не зная настоящих начальных адреса сегментов, компоновщик запомнил их относительные адреса, т.е. отсчитанные от начала программы, и запомнил адреса ячеек программы, в которые надо затем записать настоящие адреса сегментов. Эта информация хранится в ТПА загрузочного модуля. Теперь же, когда стал известным начальный адрес программы, уже можно получить и абсолютные адреса сегментов. Для этого надо к их относительным адресам добавить начальный адрес. Например, если в ТПА была строка

     отн.адрес сегмента   отн.адрес вхождения

     -------------------------------------

        1010                  1000:2

и если начальный адрес программы равен 40000h, то загрузчик по адресу сегмента (1010) получает его абсолютный адрес: 40000+1010=41010, затем определяет абсолютный адрес ячейки, в которую надо записать этом адрес, для чего к относительному адресу этой ячейки 1000+2=1002 он прибавляет начальный адрес программы 40000, получая тем самым адрес 41002, и далее записывает в эту ячейку абсолютный адрес сегмента без последнего 0, т.е. величину 4101. Это уже окончательный адрес сегмента, больше его менять не надо.

Вот так загрузчик осуществляет настройку программы на адрес, с которого она разместилась в памяти. Больше в ней ничего менять не надо, она полностью оттранслирована и готова к счету.



Содержание раздела