Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_дополн_ГОС_2007.doc
Скачиваний:
41
Добавлен:
10.02.2016
Размер:
1.87 Mб
Скачать

Вопрос 80. Компоновщики и загрузчики. Назначение и применение.

В любом режиме функционирования перед выполнением функции загрузки и выполнения программы блок начального распределения вызывающей программы должен быть приведен в исходное состояние для освобождения пространства памяти. MS-DOS загружает программы, используя программный загрузчик файла COMMAND.COM, который не является резидентной частью файла COMMAND.COM. Нерезидентная часть обрабатывает внутренние команды MS-DOS (DIR, COPY, SET и др.) и содержит загрузчик программ. Он используется для загрузки программ либо при обращении к COMMAND.COM (в ответ на внешние команды) или по запросу программы пользователя.

Программный загрузчик должен считать в память сам себя с диска перед тем, как он сможет загрузить программу пользователя или оверлейную программу. (Это также предполагает, что в системе для этой функции должен работать диск, содержащий файл COMMAND.COM).

Загрузчик процесса .EXE MS-DOS

Теперь нам известны все составные части, входящие в программные файлы типа .EXE, и можно начать рассмотрение загрузки и выполнения программ типа .EXE. Так же, как и для процессов типа .COM, первый шаг состоит в установке контекста процесса, начиная с блока среды. После установки среды либо из системных таблиц, либо из таблиц владельца, в рабочую область считывается заголовок программного файла .EXE.

После распределения блока памяти, в начале блока процесса создается PSP (сегмент программного префикса). PSP для программ типа .EXE не отличается от программ типа .COM. Затем MS-DOS читает образ программы в память непосредственно выше PSP, считывает таблицу настройки и продолжает настраивать образ программы.

После загрузки образа программы загрузчик должен обновить или настроить каждую ссылку сегмента. Когда компоновщик LINK начинает строить образ программы, он использует предполагаемый базовый сегмент 0000. На самом деле, программа загружается в сегмент 1010, так что к каждой ссылке сегмента необходимо добавить 1010. Загрузчик находит все эти ссылки путем использования таблицы настройки, которая содержит указатель на каждую ссылку сегмента в программе.

Макроассемблер MASM и компоновщик LINK обращаются с именами сегментов и именем процедуры far (далекий) специальным способом обработки, который называется relocation map (схема настройки). При загрузке программы в память MS-DOS читает схему настройки и изменяет значения тех ссылок, которые содержат адреса сегментов. Для программистов важно заметить, что MS-DOS не расширяет это правило для стандартных значений данных, и загрузка одного из регистров сегмента константой это не то же самое, что использование имени сегмента или имени процедуры far (далекий).

Переместимый код

Макроассемблер MASM и компоновщик LINK обычно вырабатывают перемещаемые программы. Т.е. при нормальном использовании они создают такие программы, которые могут быть перемещены в памяти с помощью MS-DOS, и при этом правильно функционировать. Изменится только содержимое регистров сегментов. Это свойство используется множеством прикладных программ. Одни программы могут загружать другие программы, используя функцию 4Вh (полезную для оверлейных - перекрываемых программ). Несколько программ могут быть загружены в память одновременно (полезно для мультизадачных систем или программ резидентной памяти, таких как, например, программы предварительной подкачки данных для печати).