Вход в систему

Лекции по курсу "Проектирование ассемблеров, компоновщиков, макропроцессоров"

3. Синтаксис ассемблера

 

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

  1. Синтаксис AT&T. Продуктом AT&T является операционная система Unix. Этот синтаксис используется в Gnu-компиляторах и Gnu-ассемблерах. Gnu-компиляторы генерируют на выходе промежуточный ассемблерный текст в этом формате, который далее поступает в Gnu-ассемблер. Этот синтаксис используется как машиногенерированный, промежуточный и он очень неудобен по сравнению с кодом, написанным человеком. В синтаксисе AT&T операнд назначения идёт вторым, первым записывается операнд-источник. Используются различные префиксы, такие как % или $ и специфические типы операндов. В настоящее время Gnu-компиляторы и Gnu-ассемблеры имеют опции для использования синтаксиса Intel в своей работе.

  2. Синтаксис Intel. Этот синтаксис является неполным. Он определяет только синтаксис инструкций кода, а не директив, функций, макросов и так далее. Различные диалекты синтаксиса Intel являются частью синтаксисов большинства ассемблеров. Здесь оператор назначения находится перед оператором-источником.

  3. Синтаксис MASM. Этот синтаксис определён макроассемблером Microsoft и также используется в ассемблерах от Watcom и Borland. Небольшие изменения синтаксиса происходят с появлением каждой новой версии MASM (сейчас доступна 9-я версия для win-32), но всегда остаётся обратная совместимость. Происхождение этого синтаксиса можно проследить, вернувшись к временам появления первых персональных компьютеров в ассемблерах от IBM, Intel и Microsoft.

  4. Синтаксис NASM. Этот синтаксис используется ассемблерами NASM и YASM. Он подобен синтаксису MASM, но не полностью совместим с ним. Директивы, макросы и операторы не такие как в MASM.

  5. High Level Assembler (HLA). Включает множество конструкций языков высокого уровня. Операнд-источник располагается перед операндом назначения. HLA используется в основном студентами для быстрого изучения ассемблера и не очень распространён.

  6. Другие open source ассемблеры. Это множество ассемблеров с открытым исходным кодом, имеющих свой собственный синтаксис. NASM, наиболее популярный из них.

  7. Встроенный (Inline) Gnu-ассемблер. Ассемблер, встроенный в Gnu-компиляторы C и C++. Для Gnu-совместимости используется специальный синтаксис при соединении ассемблерных вставок с частями программы на C++. Это очень мощный и сложный синтаксис.

  8. Встроенный Microsoft-ассемблер. Встроенный ассемблер в C/C++-компиляторы, совместимые с компиляторами Microsoft. Даёт доступ к переменным, функциям и меткам C++ простой вставкой их имён в ассемблерную часть. Он прост, но имеет ряд ограничений (нет поддержки 64-разрядных систем, нельзя определять данные и макросы, нельзя использовать функции с несколькими точками входа, этот код не оптимизируется компилятором, использование регистров закрывают доступ внешних переменных к ним).

  9. 9) Встроенные С++-функции. Это функции, которые могут быть использованы в C/C++-коде. Каждая встроенная функция заменяет одну или несколько ассемблерных инструкций, поддерживается компиляторами Microsoft, Intel и Gnu (примеры: __readcr0, __writecr4, __inbyte, __outword, __cpuid и другие).

Наиболее популярными ассемблерами сейчас являются MASM и FASM. При этом большинство документации по разработке драйверов и системных программ предполагает использование именно MASM. FASM имеет синтаксис несколько отличный от MASM, и это несколько снижало скорость роста его популярности. Но благодаря поддержке инструкций процессоров Intel и AMD всех поколений, простоте и постоянному обновлению, FASM завоёвывает популярность.

Забегая вперёд, отметим, что FASM является многопроходным ассемблером (до 65536 проходов) в то время как MASM является однопроходным ассемблером. FASM не поддерживает даже формальную оптимизацию (например, устранение повторений команд), а в MASM оптимизация доступна. В FASM, в отличие от MASM, есть поддержка ELF-формата. Общим в них является синтаксис Intel (операнд назначения записывается первым), развитые макросредства (которых нет ни в одном языке высокого уровня), привычные всем инструкции if, else, endif, while и так далее. С каким бы ассемблером вы не начали своё знакомство, вас поразит его мощь, красота, простота и количество поклонников.

Введение
Причины использования языка ассемблер
Причины неиспользования языка ассемблер
Синтаксис ассемблера
Системное программное обеспечение и структура ЭВМ
Программная модель процессора Intel 8086
Организация работы памяти
Операнды
Адресация операндов
Формат машинных команд
Команды переходов
Типы ассемблеров. Функции ассемблера
Ассемблер по схеме 1А / ОП
Ассемблер по схеме 1А / МД
Двухпросмотровый ассемблер
Многопросмотровый ассемблер
Загрузчик
Структура объектных файлов. Основные понятия
Идентификация модуля и атрибуты
Концепция привязки
Объектный файл. Последовательность записей
Объектный файл. Формат записей
Формат записей THEADR и LHEADR
Формат записи LNAMES
Формат записи SEGDEF
Формат записи GRPDEF
Формат записи PUBDEF
Формат записи COMDEF
Формат записи LOCSYM
Формат записи EXTDEF
Формат записи LINNUM
Формат записи LEDATA
Формат записи LIDATA
Формат записи FIXUPP
Формат записи MODEND
Формат записи комментариев


исполнялось 0,298848 c, запросов к базе 6