- •Лекция 1. Введение. Системное программное обеспечение. Состав системного программного обеспечения
 - •Лекция 2. Принципы функционирования систем программирования
 - •Этапы подготовки программы
 - •Трансляторы и интерпретаторы – общая схема работы
 - •Лекция 4. Назначение и функции компоновщика.
 - •Раздельная компиляция
 - •Переместимые коды и абсолютные коды
 - •Редактирование связей с оверлеями
 - •Связывание с динамически подсоединяемыми библиотеками (dll)
 - •Лекция 5. Назначение и функции программы загрузчика
 - •Виды загрузчиков. Загрузчики типа «компиляция-выполнение».
 - •Абсолютный загрузчик
 - •Настраивающий загрузчик
 - •Непосредственно связывающий загрузчик
 - •Динамический загрузчик
 - •Программные отладчики и их эксплуатация
 - •Лекция 6. Базовые понятия языка.
 - •Лекция 7. Базовые понятия языка.
 - •Лекция 8. Команды и алгоритмы языка.
 - •Лекция 9.1. Сложные структуры данных.
 - •Команда loop
 - •Лекция 9.2. Сложные структуры данных. Структуры
 - •Объединения
 - •Лекция 2.4. Организация и использование подпрограмм
 - •Передача параметров по значению
 - •Передача параметров по ссылке
 - •Передача параметров по возвращаемому значению
 - •Передача параметров по результату
 - •Передача параметров по имени
 - •Передача параметров отложенным вычислением
 - •Передача параметров в регистрах
 - •Передача параметров в глобальных переменных
 - •Передача параметров в стеке
 - •Передача параметров в потоке кода
 - •Передача параметров в блоке параметров
 - •Лекция 2.5. Макросредства языка Ассемблер
 - •Лекция 2.6. Работа с файлами, каталогами и дисками под управлением ms-dos
 - •Лекция 3.1. Структура и программирование контроллера прерываний.
 - •Лекция 4.1. Работа с консолью. Организация ввода/вывода информации.
 - •Лекция 5.1. Системные средства управления памятью
 - •Окружение dos
 - •Лекция 6.1. Основы организации резидентных программ
 - •7.1. Функции драйвера
 - •7.2. Архитектура драйвера
 - •Процесс загрузки драйверов
 - •7.3 Команды драйвера
 
Лекция 5. Назначение и функции программы загрузчика
Загрузчик - это системная программа, выполняющая загрузку. Многие загрузчики обеспечивают, кроме того, перемещение и связывание. В некоторых системах функция связывания отделена от функций перемещения и загрузки. Связывание выполняется специальной программой связывания (или редактором связей), перемещение и загрузка - загрузчиком.
Связывание - это связывание двух или более отдельных оттранслированных программ.
Перемещение - это модификация объектной программы так, чтобы она могла загружаться с адреса, отличного от первоначального.
Функции загрузчика:
распределение ОП;
перемещение программы;
связывание модулей;
загрузка программ в ОП и запуск на выполнение.
Распределение ОП
  
Перемещение программы
Если внутри модулей имеются адресные константы, которые вычисляются от начала модуля, то адреса будут корректироваться относительно Базы.
Виды загрузчиков. Загрузчики типа «компиляция-выполнение».
Одним из возможных способов выполнения функции загрузчика может быть такая организация работы ассемблера, при которой ассемблер, работая в одной части памяти, помещает машинные команды и данные по мере ассемблирования непосредственно в выделенные для них ячейки памяти. После завершения компиляции ассемблер передает управление в точку входа полученной программы. Это очень простое решение, позволяющее обойтись без каких-либо дополнительных процедур. Такая схема называется «компиляция-выполнение», а «загрузчик» состоит из одной команды, которая передает управление ассемблированной программе.
  
Однако
эта схема имеет ряд недостатков:
некоторая часть памяти не может быть использована, т.к. занятая ассемблером память недоступна для объектной программы;
при каждом новом прогоне приходиться заново транслировать программу пользователя;
трудно организовать работу нескольких сегментов программы, особенно, если исходные тексты написаны на разных языках, т.к. каждый язык создает свою среду в ОП.
Достоинства:
распределение памяти выполняется автоматически;
одна и та же программа-компилятор выполняет функции перемещения и связывания, загрузки и запуска.
Абсолютный загрузчик
Учитывая недостатки загрузчиков типа «компиляция-выполнение», видно, что целесообразным будет организовать хранение результатов трансляции на некотором внешнем носителе с тем, чтобы загрузить их, когда понадобится выполнить полученную программу. При этом ассемблированная программа может быть загружена в ту же область, которую раньше занимал ассемблер. Эта форма вывода называется объектной программой. Тогда работа загрузчика будет заключаться в том, что он принимает на входе ассемблированные команды и информацию, представленную в виде объектной программы, а сам в свою очередь помещает в память машинные команды, данные в выполнимой машинной форме. Этот тип загрузки устраняет основные недостатки рассмотренного ранее типа.
Простейший загрузчик, работающий по общей схеме, называется абсолютным. При этом ассемблер выводит результаты трансляции исходной программы почти в такой же форме как при схеме «компиляция-выполнение», за исключением того, что результаты помещаются не непосредственно в память, а выводятся на носитель. Загрузчик просто воспринимает текст программы на машинном языке и помещает его в память по адресу, указанному ассемблером.
Абсолютные загрузчики просты в реализации, но имеют ряд особенностей:
задачу распределения ОП выполняет программист (с помощью директивы установки начального значения ОП);
задачу перемещения программы выполняет компилятор;
связывание модулей - решается программистом (call 600);
загрузка программ в ОП и запуск на выполнение.
Достоинства:
меньший объем загрузчика (по величине памяти);
разделение фазы компиляции и загрузки, что сокращает время на обработку модулей;
возможность использования нескольких языков программирования, т.к. структуры создаваемых объектных модулей идентичны.
Недостатки:
Большой объем работ ложится на программиста. Нужно постоянно отслеживать изменения начальных адресов при модификации модулей, т.к. изменяется их длина.
