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



 

Файл COM-формата – это двоичный образ кода и данных программы. Такой файл должен занимать менее 64K и не содержать перемещаемых адресов сегментов.

 

Файл EXE-формата содержит специальный заголовок, при помощи которого загрузчик выполняет настройку ссылок на сегменты в загруженном модуле.

 

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

- создает копию текущего окружения DOS (область памяти, содержащая ряд строк в формате ASCIIZ, которые могут использоваться приложениями для получения некоторой системной информации и для передачи данных между программами) для программы;

- помещает путь, откуда загружена программа, в конец окружения;

- заполняет поля PSP информацией, полезной для загружаемой программы (количество памяти, доступное программе; сегментный адрес окружения DOS; текущие векторы прерываний INT 22H INT 23H и INT 24H и т.д).

Программы никогда не пишутся в предположении, что они будут загружаться с определенного адреса (за исключением некоторых самозагружающихся, защищенных от копирования программ).

 

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

 


Написание EXE- программ

Программы в формате EXE могут иметь любое количество сегментов команд и сегментов данных.

Файл ЕХЕ-формата содержит специальный заголовок, при помощи которого операционная система выполняет настройку ссылок на сегменты во время загрузки программы.

 

Количество допустимых сегментов определяется используемой моделью памяти:

 

small один сегмент кода, один сегмент данных  
compact один сегмент кода, несколько сегментов данных  
medium несколько сегментов кода, один сегмент данных  
large несколько сегментов кода, несколько сегментов данных  
huge много сегментов кода, много сегментов данных

Задание модели памяти необходимо для указания компилятору на необходимость генерации дальних ссылок и переопределения сегментов.

 

Во время загрузки ЕХЕ - программы:

 

1. Выделяется сегмент для PSP (префикс программного сегмента). Значение этого сегмента записывается в регистры ES (дополнительный сегмент) и DS (сегмент данных).

2. Затем следует сегмент программы.

3. На основании информации в заголовке ЕХЕ-программы загрузчик пересчитывает дальние ссылки с учетом реального расположения сегментов.

 

Таким образом, программа заранее не знает, в каких сегментах она будет выполняться. Для правильного обращения к сегменту данных используется служебный указатель @data, который содержит реальное значение сегмента данных. Поэтому для обращения к данным в начале ЕХЕ-программы необходимо загрузить в регистр DS значение этого указателя:

 

mov ax, @data

mov ds, ax

 


Дата добавления: 2015-12-17; просмотров: 60; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!