структура файлів

1. Склад файлу EXE

Файл EXE, який будує компоновщик складається з двох частин:

- керуюча інформація для завантажувача.

- власне завантажувальний модуль.

Інформація для завантажувача, описана нижче, розташована на початку файлу і утворює так званий заголовок. Відразу за ним слід тіло завантажувального модуля. Тіло завантажувального модуля починається на кордоні блоку і являє собою копію образу пам'яті завдання, яку побудував кому поновщік.

Стандартна частина заголовка має такий вигляд:

00-01 4D5A - "подпіс'" компоновщика, яка вказує, що файл є файлів EXE.

02-03 Довжина способу завдання по модулю 512 (тобто число корисних байт в останньому блоці).

(Компонувальником версій до 1.10 поміщали в це поле 04; якщо воно має таке значення, його рекомендується ігнорувати).

04-05 Довжина файлу в блоках.

08-09 Довжина заголовка в 16-ти байтних параграфах.

Використовується для з'ясування початку тіла завантажувального модуля.

0A-0B Мінімальний обсяг пам'яті, яку потрібно виділити після кінця способу завдання.

(В 16-ти байтних параграфах).

0C-0D Максимальний обсяг пам'яті, яку потрібно виділити після кінця способу завдання.

(В 16-ти байтних параграфах).

10-11 Значення SP при вході в задачу.

12-13 Контрольна сума - нуль мінус результат складання без перенесення всіх слів файлу.

14-15 Значення IP (лічильника команд) при вході в задачу.

1A-1B Номер сегмента перекриттів.

(0 для кореневого сегмента програми).

Налаштування проводиться таким чином:

1. В області пам'яті після резидентної частини виконує завантаження програми будується Префікс Програмного сегмента.

2. Стандартна частина заголовка зчитується в пам'ять.

Цей сегмент називається початковим сегментом.

4. Завантажувальний модуль зчитується в початковий сегмент.

5. Таблиця настройки порціями зчитується в робочу пам'ять.

2. Структура програмного сегмента

По зсуву 0000 в програмному сегменті DOS формує Префікс Програмного сегмента (PSP). Сама програма завантажується по зміщенню 0100.

Коли завантажена програм отримує управління, мають місце такі умови:

Для всіх програм:

Загальна довжина рядків середовища <= 32K байт; среда начинается с границы параграфа. После последней строки следует нулевой байт. Среда, передаваемая задаче от COMMAND, содержит, как минимум, параметр COMSPEC= (значение этого параметра - полное имя файла, содержащего используемый COMMAND.COM). Она также содержит значения, установленные командами PATH, PROMPT и SET (См. Главу 10). Передаваемая среда является копией среды родительского процесса. Если задача остается резидентом, то последующие команды PATH, PROMPT и SET не будут воздействовать на ее среду.

- Блоки управління файлами, розташовані по зсувах 5C і 6C в префікс Програмного сегмента заповнюються відповідно до параметрів командного рядка. При цьому якщо відповідний параметр включає ім'я каталогу, в FCB заноситься тільки код пристрою, ім'я файлу формується неправильно.

- Неформатна частина, що починається зі зсуву 81, містить символи командного рядка після імені команди, включаючи всі прогалини і розділіть чи. По зсуву 80 поміщена довжина цього рядка. Якщо командний рядок включає параметри перепризначення (на них вказують символи> і <) они не попадают сюда, так как переназначение прозрачно для программ.

- Слово по зміщенню 6 містить число байт в даному сегменті.

- Регістр AX вказує правильність налаштувань імена пристроїв в параметрах:

AL = FF - ім'я пристрою для першого параметра задано невірно, інакше AL = 00;

AH = FF - ім'я пристрою для першого параметра задано невірно, інакше AH = 00.

Для програм .EXE:

- DS і ES вказують на початок префікса Програмного сегмента.

- Регістри CS, IP, SS і SP отримують значення, зазначені компоновщиком.

Для програм .COM:

- Всі чотири сегментні регістри вказують на Префікс Програмного сегмента.

- Програмі виділяється вся вільна пам'ять. Якщо програма запускає інші програми операцією Exec, то вона повинна звільнити для неї частину пам'яті операцією Setblock (4A)

- Лічильник команд IP отримує значення 0100H.

- Регістр SP вказує на кінець програмного сегмента. Довжина сегмента в осередку 6 префікс зменшується на 0100H, щоб звільнити простір для стека такого розміру.

- На вершину стека збожеволіє нульове слово Префікс Програмного сегмента має наступний формат (всі числа
шістнадцятиричні):

література:

1. Джордан Довідник програміста персональних комп'ютерів

2. Нортон Архітектура персональних комп'ютерів фірми IBM

3. Бек Введення в системне програмування

Схожі статті