Относительная загрузка


 

Относительный способ загрузкисостоит в том, что программа загружается каждый раз с нового адреса. При этом необходимо настроить ее на новые адреса.

Ассемблер при каждой ссылке на символ, соответствующий адресу, генерирует не только “заготовку” адреса в коде, но и запись в таблице перемещений (relocation table). Эта запись хранит место ссылки на такой символ в коде или данных. В качестве “заготовки” адреса обычно используется смещение адресуемого объекта от начала программы. При настройке программы на реальный адрес загрузки нам, таким образом, необходимо пройти по всем объектам, перечисленным в таблице перемещений, и переместить каждую из ссылок – сформировать из заготовки адрес.

Файл, содержащий таблицу перемещений, гораздо сложнее абсолютного загружаемого модуля и носит название относительного или перемещаемого загрузочного модуля. Именно такой формат имеют exe – файлы в системе MS DOS.

Базовая адресация.Объявляем один или несколько регистров процессора базовым (несколько регистров могут использоваться для адресации различных сегментов программы, один – для кода, другой – для статических данных, третий – для стека) и договариваемся, что значения этих регистров программист (компилятор) принимает как данность и никогда сам не модифицирует, зато все адреса в программе он вычисляет на основе значений этих регистров.

В этом случае для перемещения программы нам нужно только изменить значения базовых регистров, и программа даже не узнает, что загружена с другого адреса. Именно так происходит загрузка com – файлов в системе MS – DOS. Система выделяет свободную память, настраивает для программы базовые регистры DS и CS, которые называются сегментными, и передает управление на стартовый адрес. Ничего больше делать не надо.

Позиционно – независимый код.Третий способ формирования адреса в программе - это относительная адресация, когда адрес получается сложением адресного поля команды и адреса самой этой команды – значения счетчика команд. Код, в котором используется только такая адресация, можно загружать с любого адреса без всякой перенастройки. Такой код называется позиционно – независимый (position – independent)

Позиционно – независимые программы очень удобны для загрузки, но, к сожалению, при их написании следует соблюдать довольно жесткие ограничения, накладываемые на используемые методы адресации.. Возникают сложности при сборке программы из нескольких модулей. К тому же, на многих процессорах, например, на Intel 8080/8085 или многих современных RISC – процессорах, описанная выше реализация позиционно – независимого кода вообще невозможна, так как эти процессоры не поддерживают соответствующий режим адресации для данных. Поэтому такой стиль программирования используют только в особых случаях. Например, многие вирусы для MS – DOS и драйверы для RT – 11 написаны именно таким образом.

 



Дата добавления: 2016-06-05; просмотров: 1630;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.006 сек.