Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Магда Юрий - Ассемблер для процессоров Intel Pe...rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
564.98 Кб
Скачать

2.1. Ассемблирование исходного текста

Программа ml.exe выполняет два последовательных действия при создании исполняемого файла программы. Во‑первых, она обеспечивает трансляцию исходного текста программы в промежуточный объектный файл. Во‑вторых, ml.exe вызывает программу link.exe, которая компонует объектные файлы и библиотеки в единую выполняемую программу.

В процессе трансляции исходного текста программы выполняются следующие действия:

1. Анализируются директивы условного ассемблирования, и в случае истинности указанных в них условий выполняются те или иные шаги.

2. Разворачиваются макросы.

3. Вычисляются константные выражения, такие, например, как mydata and 10h, при этом выражения замещаются вычисленными значениями.

4. Декодируются команды и операнды, не находящиеся в памяти. Например, на этом шаге будет декодирована команда mov AX, 10, поскольку она не имеет операндов, расположенных в памяти.

5. Сохраняются смещения переменных в памяти как смещения относительно сегментов, в которых эти переменные расположены.

6. Сегменты и их атрибуты размещаются в объектном файле.

7. В объектном файле сохраняются перемещаемые адреса (relocatable addresses).

8. При необходимости создается файл листинга.

9. Непосредственно программе link.exe передаются некоторые директивы (например, INCLUDELIB и D0SSEG).

Директивы условного ассемблирования более подробно описаны в руководстве по макроассемблеру MASM 6.14 фирмы Microsoft.

2.2. Компоновка программ

После успешной трансляции исходного текста ассемблерной программы результат в виде объектного файла передается компоновщику link.exe. Компоновщик может связать несколько объектных файлов в один исполняемый ЕХЕ‑файл. При этом все сегменты, определенные в программе, группируются в соответствии с инструкциями, содержащимися в объектном файле. Вся информация о размещении сегментов записывается в заголовок исполняемого файла.

Здесь следует упомянуть о том, что структура программы (не только на ассемблере) определяется несколькими факторами:

– архитектурой процессора;

– особенностями той операционной системы, под управлением которой эта программа будет выполняться;

– правилами работы выбранного компилятора – разные компиляторы предъявляют разные требования к исходному тексту программы.

Например, исходный текст простой 16‑разрядной программы, выводящей строку str на экран в операционной системе MS‑DOS, может выглядеть так:

Эта программа выполняется только в операционной системе MS‑DOS и не работает в таких операционных системах, как Windows 2000 и Windows XP, поскольку структура исполняемого файла не соответствует требованиям, выдвигаемым этими операционными системами. Чтобы программа могла вывести строку на экран, например, в Windows XP, требуется кардинальным образом изменить структуру программы.

Кроме этого, программы для операционных систем MS‑DOS и Windows требуют задания различных параметров компилятора и компоновщика, что вызвано различной организацией операционных систем MS‑DOS и Windows. Операционная система MS‑DOS использует 16‑разрядную модель памяти в реальном режиме, в то время как Windows XP, например, 32‑разрядный защищенный режим с линейной адресацией памяти. Далее мы проанализируем основные параметры компилятора ml.exe и компоновщика link.exe макроассемблера MASM для создания различных типов приложений.

Трансляцию файлов с расширением ASM можно выполнить из командной строки:

ml /с /coff имя_файла.asm

Созданный при помощи этой команды объектный файл имеет формат COFF. Если параметр /coff не задан, то форматом созданного объектного файла будет OMF.

Компоновщик link.exe оперирует с OBJ‑файлами как в формате COFF, так и в формате OMF, при этом выполняется автоматическое преобразование формата файла из OMF в COFF. Обычно при генерации исполняемых файлов используется формат COFF. Кроме того, и это очень важно, если файл объектного модуля должен применяться в приложении, написанном на Visual C++ .NET, то формат его обязательно должен быть COFF. В то же время при применении объектного файла в приложении, разработанном в Borland Delphi 2005, единственным воспринимаемым форматом является OMF.

Для того чтобы из объектного файла создать исполняемый файл, работающий в MS‑DOS, следует выполнить командную строку

link /со имя_файла. ob;

Здесь следует учитывать то, что версия компоновщика link.exe должна поддерживать генерацию 16‑разрядных приложений MS‑DOS. Использование 32‑разрядных компоновщиков приведет к ошибке создания ЕХЕ‑файла.

Для генерирования 32‑разрядных ЕХЕ‑файлов следует использовать корректную версию компоновщика, при этом командная строка должна выглядеть так:

link /SUBSYSTEM:WINDOWS /0PT:N0REF имя_фдйла.ob;

Приведенных здесь сведений вполне достаточно для компиляции исходных текстов ассемблерных программ и процедур, представленных в книге. Более подробная информация о пакете MAS M доступна в Интернете, а также в многочисленных литературных источниках.

В последующих главах мы рассмотрим структуру данных и синтаксис команд макроассемблера MASM.