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; Мы поможем в написании вашей работы! |

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