Читайте также:
|
|
Относительный способ загрузки состоит в том, что программа загружается каждый раз с нового адреса. При этом необходимо настроить ее на новые адреса.
Ассемблер при каждой ссылке на символ, соответствующий адресу, генерирует не только “заготовку” адреса в коде, но и запись в таблице перемещений (relocation table). Эта запись хранит место ссылки на такой символ в коде или данных. В качестве “заготовки” адреса обычно используется смещение адресуемого объекта от начала программы. При настройке программы на реальный адрес загрузки нам, таким образом, необходимо пройти по всем объектам, перечисленным в таблице перемещений, и переместить каждую из ссылок – сформировать из заготовки адрес.
Файл, содержащий таблицу перемещений, гораздо сложнее абсолютного загружаемого модуля и носит название относительного или перемещаемого загрузочного модуля. Именно такой формат имеют exe – файлы в системе MS DOS.
Базовая адресация. Объявляем один или несколько регистров процессора базовым (несколько регистров могут использоваться для адресации различных сегментов программы, один – для кода, другой – для статических данных, третий – для стека) и договариваемся, что значения этих регистров программист (компилятор) принимает как данность и никогда сам не модифицирует, зато все адреса в программе он вычисляет на основе значений этих регистров.
В этом случае для перемещения программы нам нужно только изменить значения базовых регистров, и программа даже не узнает, что загружена с другого адреса. Именно так происходит загрузка com – файлов в системе MS – DOS. Система выделяет свободную память, настраивает для программы базовые регистры DS и CS, которые называются сегментными, и передает управление на стартовый адрес. Ничего больше делать не надо.
Позиционно – независимый код. Третий способ формирования адреса в программе - это относительная адресация, когда адрес получается сложением адресного поля команды и адреса самой этой команды – значения счетчика команд. Код, в котором используется только такая адресация, можно загружать с любого адреса без всякой перенастройки. Такой код называется позиционно – независимый (position – independent)
Позиционно – независимые программы очень удобны для загрузки, но, к сожалению, при их написании следует соблюдать довольно жесткие ограничения, накладываемые на используемые методы адресации.. Возникают сложности при сборке программы из нескольких модулей. К тому же, на многих процессорах, например, на Intel 8080/8085 или многих современных RISC – процессорах, описанная выше реализация позиционно – независимого кода вообще невозможна, так как эти процессоры не поддерживают соответствующий режим адресации для данных. Поэтому такой стиль программирования используют только в особых случаях. Например, многие вирусы для MS – DOS и драйверы для RT – 11 написаны именно таким образом.
Дата добавления: 2015-01-30; просмотров: 33 | Поможем написать вашу работу | Нарушение авторских прав |