Скачиваний:
26
Добавлен:
15.06.2014
Размер:
32.26 Кб
Скачать

Структура ЕХЕ - программ.

Программа в формате ЕХЕ, созданная компоновщиком, состоит из следующих двух частей:

1) заголовка - записи, содержащей информацию по управлению и настройке программы;

2) собственно загрузочного модуля.

В заголовке находится информация о размере выполняемого модуля, области загрузки в памяти, адресе стека и относительных смещениях, которые должны заполнить машинные адреса в соответствии с относительными шестнадцатеричными позициями:

00 - (шестнадцатеричное 4D5A) Компоновщик устанавливает этот код для идентификации правильного ЕХЕ файла;

02 - число байтов в последнем блоке ЕХЕ файла;

04 - число блоков по 512 байт ЕХЕ файла, включая заголовок;

06 - число настраиваемых элементов;

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

0А - минимальное число параграфов, которые должны находится после загруженной программы;

0С - переключатель загрузки в младшие или старшие адреса. При компоновке пользователь должен решить, будет ли его программа загружаться для выполнения в младшие адреса памяти или в старшие. Обычным является загрузка в младшие адреса. Значение 0000 указывает на загрузку в старшие адреса, а FFFF - в младшие. Иные значения определяют максимальное число параграфов, которые должны находиться после загруженной программы;

0Е - относительный адрес сегмента стека в выполняемом модуле;

10 - адрес, который загрузчик должен поместить в регистр SP перед передачей управления в выполнимый модуль;

12 - контрольная сумма - сумма всех слов в файле (без учета переполнения) используется для проверки потери данных;

14 - относительный адрес, который загрузчик должен поместить в регистр IP до передачи управления в выполняемый модуль;

16 - относительный адрес кодового сегмента в выполняемом модуле. Этот адрес загрузчик заносит в регистр CS;

18 - смещение 1-ого настраиваемого элемента в файле;

1А - номер оверлейного фрагмента: 0 означает, что заголовок относится к резидентной части ЕХЕ файла;

1С - таблица настройки, содержащая переменное число настраиваемых элементов, соответствующее значению по смещению 06.

Заголовок имеет минимальный размер 512 байт и может быть больше, если программа содержит большое число настраиваемых элементов. Позиция 06 в заголовке указывает число элементов в выполняемом модуле, нуждающихся в настройке. Каждый элемент настройки в таблице, начи- нающейся в позиции 1С заголовка, состоит из 2-х байтовых величин смещений и 2-х байтовых сегментных значений. Система строит префикс программного сегмента (PSP) следом за резидентной частью COMMAND.COM, которая выполняет операцию загрузки. Затем COMMAND.COM осуществляет следующее:

- считывает форматированную часть заголовка в память;

  • вычисляет размер выполнимого модуля (общий размер файла в позиции 04 минус размер заголовка в позиции 08) и загружает модуль в память с начала сегмента;

  • считывает элементы таблицы настройки в рабочую область и прибавляет значение каждого элемента таблицы к началу сегмента (позиция 0E);

  • устанавливает в регистрах SS и SP значения из заголовка и прибавляет адрес начала сегмента;

  • устанавливает в регистрах DS и ES сегментный адрес PSP;

- устанавливает в регистре CS адрес PSP и прибавляет величину смещения в заголовке ( позиция 16) к регистру CS. Если сегмент кода непосредственно следует за PSP, то смещение в заголовке равно 256 (100H). Регистровая пара CS:IP содержит стартовый адрес в кодовом сегменте, т.е. начальный адрес программы. После инициализации регистры CS и SS содержат правильные адреса сегментов, а регистр DS (и ES) должен быть настроен в программе на собственный сегмент данных:

Mov AX,datasegname ;Установить в DS

Mov DS,AX ;адрес сегмента данных

Структура СОМ - программ.

Различия между программами в ЕХЕ и СОМ файлах:

  • РАЗМЕР ПРОГРАММЫ. Программа в формате ЕХЕ может иметь любой размер, в то время как СОМ-файл ограничен размером одного сегмента и не превышает 64 К. Размер СОМ - файла всегда меньше, чем размер соответствующего ЕХЕ-файла; одна из причин этого - отсутствие в СОМ - файле 512-байтового заголовка ЕХЕ-файла.

  • СЕГМЕНТ СТЕКА. В ЕХЕ-программе определяется сегмент стека, в то время как СОМ-программа генерирует стек автоматически. Таким образом, при создании ассемблерной программы, которая будет преобразована в СОМ - файл, стек должен быть опущен.

  • СЕГМЕНТ ДАННЫХ. В ЕХЕ-программе обычно определяется сегмент данных, а регистр DS инициализируется адресом этого сегмента. В СОМ-программе все данные должны быть определены в сегменте кода.

- ИНИЦИАЛИЗАЦИЯ. В ЕХЕ-программе выполняется инициализация регистра DS. Так как в СОМ-программе стек и сегмент данных не определены, то эти шаги отсутствуют. Когда СОМ-программа начинает работать, все сегментные регистры содержат адрес PSP - 256 байтовый блок, который резервируется операционной системой DOS непосредственно перед СОМ- или ЕХЕ-программой в памяти. Так как адресация начинается со смещения 100Н от начала PSP, то в программе необходимо указать директиву ORG 100H.

Соседние файлы в папке Ответы на билеты