Вход/Регистрация
Ассемблер для процессоров Intel Pentium
вернуться

Магда Юрий

Шрифт:

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

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.

Глава 3
Синтаксис языка ассемблера

Язык ассемблера, называемый также языком символического кодирования, представляет собой машинный язык в символической форме, которая более понятна и удобна программисту. Сложная внутренняя структура, разнообразные форматы команд, многочисленные режимы адресации процессоров Intel ограничивают возможности разработки сложных и объемных программ на языке ассемблера. Однако в любых сложных программах всегда существуют критические секции, требующие интенсивных и быстрых вычислений, которые приходится разрабатывать не на языке высокого уровня, а на ассемблере.

  • Читать дальше
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: