Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler (Уч_пос_Лаб_Ч1).doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.43 Mб
Скачать

П.1.3. Форматы исполняемых файлов .Exe и .Com на диске

Программы типа .exe и .com различаются не только форматом исходного текста и процедурой создания исполняемого файла при трансляции, но и форматом загрузочного файла на диске. Программы загружаются в память для выполнения с помощью функции DOS Exec (Int 21h, функция 4Bh), играющей роль системного загрузчика. При этом, если имя программы вводится в командную строку с клавиатуры, то функция Exec вызывается командным процессором Command.com.

В дальнейшем изложении для сравнительной оценки параметров программ, выполненных в разных форматах, взята одна и та же простая программа с минимально возможным набором команд (с целью экономии места, отводимого для иллюстраций).

  • Загрузка и выполнение .COM-программы

Программы типа .com после загрузки в память представляют собой немодифицированное представление программы на машинном языке на диске. Листинг трансляции и машинный код программы на диске приведён на рис П.1.3_1. Особенностью данного формата является тот факт, что, несмотря на местоположение данных в тексте программы, компоновщик Tlink размещает их в исполняемом файле после кода программы (рис. П.1.3_1, б).

Действия функции Exec при запуске программы типа .com выглядят следующим образом.

  1. Запускаемой программе отводится вся свободная в данный момент оперативная память, в которой определяется начальный сегментный адрес программы.

  2. По нулевому смещению в выделенном для программы сегменте памяти Exec создаёт специальную служебную структуру – префикс программного сегмента PSP, в котором содержится информация для DOS об окружении программы. Впрочем, некоторые поля PSP используются и прикладными программистами, например, при разработке резидентных программ. Размер PSP всегда равен 100h или 256 байт.

А) Листинг prog_com. Lst

Turbo Assembler Version 4.1

1

2 Ideal

3 0000 Model tiny

4 0000 Dataseg

5 0000 8F E0 AE A3 E0 A0 AC+ mes db 'Программа типа .com',10,13,'$'

6 AC A0 20 E2 A8 AF A0+

7 20 2E 63 6F 6D 0A 0D+

8 24

9 0016 Codeseg

10 org 100h

11 0100 proc main

12 0100 B4 09 mov ah,09h ;Вывод сообщения mes на экран

13 0102 BA 0000r mov dx,offset mes

14 0105 CD 21 int 21h

15 0107 B8 4C 00 exit: mov ax,04C00h ;Функция DOS 4Сh

16 010A CD 21 int 21h ;Вызов DOS. Останов

17 010C endp main

18 end main ;Конец программы/точка входа

Groups & Segments Bit Size Align Combine Class

Dgroup Group

_Data 16 0016 Word Public Data

_Text 16 010C Word Public Code

б) Машинный код исполняемого файла prog_com.com на диске объёмом 32 байта

00000: B4 09 BA 0C 01 CD 21 B8 00 4C CD 21 8F E0 AE A3 ┤○║♀☺=!╕ L=!Прог

00010: E0 A0 AC AC A0 20 E2 A8 AF A0 20 2E 63 6F 6D 0A рамма типа .com◙

00020: 0D 24 ♪$

Рис. П.1.3_1. Листинг и машинный код программы типа .com

Таблица П.1.3_1

Содержимое префикса программы psp

Смещение

Число байтов

Описание

00h

2

Инструкция INT 20h

02h

2

Сегментный адрес первого свободного байта за пределами программы

0Ah

4

Адрес перехода в Command после завершения программы (Int 22h)

0Eh

4

Адрес обработчика Ctrl+C (Int 23h)

12h

4

Адрес обработчика критической ошибки (Int 24h)

16h

2

Сегмент PSP родителя

18h

20

Таблица файлов задания (Job file Table – JFT)

2Ch

2

Сегментный адрес блока окружения программы

2Eh

4

SS:SP на входе в последний вызов int 21h

32h

2

Количество байтов в JFT (по умолчанию 20)

34h

4

Адресный указатель на JFT (по умолчанию PSP:0018h)

80h

1

Длина командной строки в байтах

81h

127

Параметры командной строки при запуске программы ) и 0Dh

  1. Сразу вслед за PSP загружается сама com-программа со следующей настройкой регистров процессора: cs = ds = ss = es указывают на начальный сегмент программы, регистр ip инициализируется числом 100h (это размер PSP), а регистр sp – числом 0fffeh. При этом образ программы в памяти после PSP в точности соответствует машинному коду программы на диске (рис. П.1.3_1, б). Таким образом, программный код, данные и стек com-программы размещаются в одном сегменте оперативной памяти объёмом 64 Кбайта, так как регистр указателя вершины стека инициализируется числом 0FFFEh.

  2. Для исполнения загруженной com -программы Exec передает управление по адресу cs:100h (по этому адресу обязательно должна находиться первая исполняемая команда). После завершения программы управление передается обратно в Exec, а оттуда – родительской программе – "предку" (при запуске из командной строки – командному процессору Command.com).

  • Загрузка и выполнение .exe-программы

В настоящее время существуют три формата .exe-программ:

  • MZ-формат (разработан фирмой Microsoft для поддержки многосегментных программ в среде MS DOS);

  • NE-формат (Windows 3.1);

  • PE-формат (Windows 95/98/2000).

MZ-формат, построенный компоновщиком и хранимый на диске, состоит из заголовка и собственно загрузочного модуля (рис. П.1.3_2).

В заголовке, состоящем из одного или нескольких блоков размером 512 байт, содержится информация для настройки значений сегментных регистров (в том числе регистров ip и sp) процессора, используемая при загрузке программы в память для её исполнения. Формат заголовка приведён в табл. П.1.3_2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]