Чтение онлайн

на главную

Жанры

Ассемблер для процессоров Intel Pentium

Магда Юрий

Шрифт:

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 ограничивают возможности разработки сложных и объемных программ на языке ассемблера. Однако в любых сложных программах всегда существуют критические

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

Разработка программ на языке ассемблера требует хороших знаний архитектуры всей системы, включая режимы адресации данных, структуры памяти и системы команд процессора. Поэтому анализ возможностей ассемблера мы будем проводить в тесной взаимосвязи с архитектурой процессоров Intel Pentium. Напомню, что мы рассматриваем язык ассемблера, основанный на разработке фирмы Microsoft версии 6.14 и выше. Он включает в себя множество параметров, команд и директив, анализ которых займет много времени. Поэтому здесь будут рассмотрены только наиболее важные языковые конструкции, без знания которых создавать программы невозможно. Для такого анализа нужно четко понимать, как данные представляются в компьютере и каковы общие принципы их обработки, поэтому начнем именно с этого.

3.1. Представление данных в компьютере

В основе работы компьютера лежат понятия бита и байта – именно они представляют данные и команды в памяти. Минимальной единицей информации в компьютере является бит. Бит может принимать одно из двух значений: 0 или 1 – и является составным элементом для более информативных единиц данных. Минимальный объем информации, к которому имеется доступ в памяти компьютера, составляет один байт (8 двоичных разрядов, или битов), при этом говорят о байтовой организации памяти (хотя теоретически память может быть организована и по-другому). Все байты оперативной памяти нумеруются начиная с нуля. Местоположение каждого байта в памяти характеризуется его номером или, по-другому, адресом. Схематически байт представляет собой структуру данных, изображенную на рис. 3.1.



Рис. 3.1. Представление байта


Старший бит байта имеет номер 7, младший – 0. В оперативной памяти машины байты данных располагаются по возрастанию адресов (рис. 3.2).



Рис. 3.2. Адресация памяти


Исключение составляет специальная область памяти, называемая стеком, – в ней байты данных располагаются в сторону убывания адресов. Более подробно мы рассмотрим стек в последующих главах.

Редко случается так, что для представления данных требуется один байт. Во многих случаях данные нужно представить большим числом байтов. Если данные можно представить двумя байтами, то говорят, что они представлены словом. О данных, требующих для представления 4 байта, говорят, что они имеют размерность двойного слова. Наконец, данные могут быть представлены восемью (учетверенное слово) или шестнадцатью (двойное учетверенное слово) байтами. Во всех этих случаях расположение байтов соответствует правилу: младший байт располагается по младшему адресу, а старший байт – по старшему (рис. 3.3).

Нумерация байтов в обычных, двойных и учетверенных словах начинается с младшего (нулевого) байта и заканчивается 1, 3 и 7-м байтом соответственно. В документации часто используется такой способ расположения байтов, когда старшие байты располагаются слева, а младшие – справа. Пример такого расположения байтов в двойном слове показан на рис. 3.4.



Рис. 3.3. Представление данных различной размерности в памяти


Крайний слева байт принято называть старшим, а крайний справа – младшим. Такой порядок расположения байтов связан с обычной для нас формой записи чисел, когда в многоразрядном числе слева находятся старшие разряды, а справа – младшие. Следующее число опять начнется со старшего разряда и закончится младшим. Однако в памяти компьютера данные располагаются в более естественном порядке непрерывного возрастания номеров байтов, и, таким образом, каждое слово или двойное слово в памяти начинается с младшего байта и заканчивается старшим (см. рис. 3.4).

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

Наследник Четырех

Вяч Павел
5. Игра топа
Фантастика:
героическая фантастика
рпг
6.75
рейтинг книги
Наследник Четырех

Адъютант

Демиров Леонид
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Адъютант

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1

Лорд Системы 4

Токсик Саша
4. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 4

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки

На руинах Мальрока

Каменистый Артем
2. Девятый
Фантастика:
боевая фантастика
9.02
рейтинг книги
На руинах Мальрока

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан

Табу на вожделение. Мечта профессора

Сладкова Людмила Викторовна
4. Яд первой любви
Любовные романы:
современные любовные романы
5.58
рейтинг книги
Табу на вожделение. Мечта профессора