EXE и COM программы

У каждого из обоих типов файлов есть свои преимущества.Главное различие между файлами типа .COM и типа .EXE связано с форматом записи соответствующего объектного файла на дискете. Оба типа файлов являются программами, записанными на машинном языке. Программа, записанная в файле типа .COM может сразу выполняться. DOS может непосредственно загрузить его в память машины с дискеты. После этого DOS передает управление в сегмент памяти, отведенный для команд, в точку со смещением 100H. Файл типа .EXE непосредственно выполнен быть не может. У соответствующего объектного файла, хранящегося на дискете, имеется заголовок. В нем содержится информация, сгенерированная редактором связей. Наиболее важная ее часть относится к информации, связанной с перемещением. В то время, как у файла типа .COM перемещаем один сегмент команд, у файла типа .EXE могут быть перемещены многие различные сегменты. Это ограничивает максимальный размер файла .COM 64 кбайтами, если только программа не подгружает еще и другие сегменты. Файл типа .EXE может содержать ряд сегментов, которые динамически перемещаются в пределах программной области. Во время ассемблирования программа расположена в каком-то определенном месте памяти. Как было ранее установлено, ассемблер автоматически начинает каждый сегмент со смещением 0. В ассемблерных листингах рядом с некоторыми адресами стоят символы R. Это означает, что данный адрес является перемещаемым. Если программа сдвигается так, что ее начало будет иметь смещение, отличное от 0, то упомянутый адрес должен быть изменен. Обычно перемещением занимается редактор связей. Однако пересчет значений некоторых адресов не может быть выполнен до загрузки программы. В каждом файле типа .EXE имеется информация о таких адресах. Файл типа .COM не является перемещаемым. У такого файла отсутствует информация, необходимая для перемещения. Вместо этого у программы, составляющей файл типа .COM, должен быть перемещаем сегмент команд. Это означает, что хотя сам сегмент команд можно модифицировать, начальное смещение всегда должно быть одним и тем же. В такой программе все смещения должны оставаться неизмененными. Кроме того, от программиста требуется предусмотреть, чтобы при любой операции с сегментными регистрами (например, запись в сегментный регистр полученного значения) всегда производилось обращение к регистру текущего сегмента команд. Примером правильной программной последовательностью для записи в регистр DS текущего значения сегмента команд будет: PUSH CS POP DS В головной метке файла типа .EXE задаются значения регистров CS, IP, SS и SP. Значения регистров DS и ES DOS устанавливает таким образом, чтобы они указывали на тот сегмент, в который загружается программа. Регистр CS указывает на сегмент, который был идентифицирован как сегмент содержащий стартовый адрес программы. Если в файле типа .COM программа должна иметь начальное смещение в сегменте команд равным 100H, то в программном файле типа .EXE начальный адрес может иметь другое значение. Как показано ниже, значение этого адреса может содержаться в операторе END: END START_LOCATION Преимущества файла типа .COM состоит в том, что в этом случае регистр CS указывает на PSP, а в файле типа .EXE - нет. Прерывания 20H и 27H, связанные с завершением выполнения программы и передачей управления DOS, требуют, чтобы во время прерывания регистр указывал на PSP. В случае файла типа .EXE это осуществить сложно.

7.Структура MS DOS

Операционная система MS DOS — самая распространенная ОС на 16-разрядных персональных компьютерах. Она состоит из следующих основных модулей: базовая система ввода/вывода (BIOS);блок начальной загрузки (Boot Record);модуль расширения базовой системы ввода/вывода (IO.SYS);модуль обработки прерываний (MSDOS.SYS);командный процессор (COMMAND.COM);утилиты MS DOS. Каждый из указанных модулей выполняет определенную часть функций, возложенных на ОС. Места постоянного размещения этих модулей различны. Так, базовая система ввода/вывода находится в постоянном запоминающем устройстве (ПЗУ), а не на дисках, как все остальные модули.Базовая система ввода/вывода (BIOS) выполняет наиболее простые и универсальные услуги операционной системы, связанные с осуществлением ввода-вывода. В функции BIOS входит также автоматическое тестирование основных аппаратных компонентов (оперативной памяти и др.) при включении машины и вызов блока начальной загрузки DOS.Блок начальной загрузки (загрузчик) — это очень короткая программа, единственная функция которой заключается в считывании с диска в оперативную память двух других частей DOS — модуля расширения базовой системы ввода/вывода и модуля обработки прерываний.Модуль расширения базовой системы ввода/вывода дает возможность использования дополнительных драйверов, обслуживающих новые внешние устройства, а также драйверов для нестандартного обслуживания внешних устройств.Модуль обработки прерываний реализует основные высокоуровневые услуги DOS, поэтому его и называют основным.Командный процессор DOS обрабатывает команды, вводимые пользователем.Утилиты DOS — это программы, поставляемые вместе с операционной системой в виде отдельных файлов. Они выполняют действия обслуживающего характера, например, разметку дискет, проверку дисков и т.д.