Вперед Назад Содержание

1. Обзор

Данный документ представляет собой рукуоводство пользователя GNU ассемблера as.

Сейчас мы приведем краткую инструкцию по работе с as. Детали описаны во второй главе "Опции командной строки"

as [ -a[dhlns][=file] ] [ -D ] [ --defsym SYM=VAL ] [ -f ] [ --help ] [ -I DIR ] [ -J ] [ -K ] [ -L ] [ -o OBJFILE ] [ -R ] [ --statistics ] [ -v ] [ -version ] [ --version ] [ -W ] [ -w ] [ -x ] [ -Z ] [ -Av6 | -Av7 | -Av8 | -Av9 | -Asparclite | -bump ] [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ] [ -b ] [ -no-relax ] [ -l ] [ -m68000 | -m68010 | -m68020 |... ] [ -nocpp ] [ -EL ] [ -EB ] [ -G NUM ] [ -mcpu=CPU ] [ -mips1 ] [ -mips2 ] [ -mips3 ] [ -m4650 ] [ -no-m4650 ] [ --trap ] [ --break ] [ --emulation=NAME ] [ -- | FILES... ]
-a[dhlns]

Ставьте опции формирования листинга в любом порядке:

-ad опустить директивы отладчика -ah включать код языка высокого уровня -al включать в листинг итоговый код программы -an опустить обработку директив управления форматом листинга -as включать таблицу символов =file задает имя файла распечатки
Вы можете объединять эти опции, например, используйте -aln для создания листинга без обработки форм. Опция =file, в случае использования, должна быть последней. По умолчанию -a означает -ahls, то есть включается весь код.

-D

Игнорируется. Эта опция сохранена для совместимости с другими ассемблерами.

--defsym SYM=VALUE

Присваивает символу SYM значение value перед сборкой входного файл. Value должно быть целочисленной константой. Как и в C, стоящие впереди симовлы " 0x " указывают на шестнадцатеричное значение, а " 0 " указывает на восьмеричное значение.

-f

"fast" - пропускать пропуски и не выполнять обработку препроцессором (полагая исходный файл результатом работы компилятора)

--help

Напечатать список опций командной строки и закончить работу.

-I DIR

Добавить каталог DIR к списку поиска для ".include " директивы.

-J

Не предупреждать об ошибке переполнения знака.

-K

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

-L

Оставить (в таблице символов) локальные символы, начинающиеся на 'L'.

-o OBJFILE

Задает имя выходного объектного файла as OBJFILE.

-R

Свернуть раздел данных в текстовый раздел.

--statistics

Вывести максимальный размер памяти (в байтах) и общее время (в секундах) использованные при ассемблировании

-v

-version

Печатать версию as.

--version

Печатать версию as и завершать работу.

-W

Не выдавать сообщения об ошибках.

-w

Игнорируется.

-x

Игнорируется.

-Z

Создтаь объектный файл, даже если были допущены ошибки

-- | FILES...

Стандартный ввод или исходный файл для ассемблирования.

Следующие опции доступны только при работе с процессором Intel 80960.
-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC

Определяет нужный вариант архитектуры 960-го процессора.

-b

Добавить код для сбора статистики по использованию ветвей алгоритма.

-no-relax

Не изменять инструкции условного перехода из-за большого размера смещений.

Следующии опции доступны при работе с процессорами Motorola серии 68000.
-l

сократить ссылки на неопределенные символы до одного слова, вместо двух.

-m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040

| -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -mcpu32 Определяет тип процессора семейства 68000. Обычно по yмолчанию 68020, но эта yстановка может быть изменена в пpоцессе конфигypации.

-m68881 | -m68882 | -mno-68881 | -mno-68882

Hе использовать сопpоцессоp для pаботы с плавающей точкой. По yмолчанию наличие сопpоцессоpа пpедполагается для 68020, 68030 и cpu32. Хотя основа 68000 не совместима с 68881, их комбинация может быть определена, так как овзможно осуществить эмуляцию инструкций сопроцессора с опмощью основного процессора.

-m68851 | -mno-68851

Не использовать сопроцессор управления памятью. По умолчанию такой сопроцессор подразумевается для 68020 и выше.

Следующии опции доступны в случае, когда as настроен на платформу SPARC.
-Av6 | -Av7 | -Av8 | -Av9 | -Asparclite

Тончо определяет вариант SPARC-системы.

-bump

Выдавать предупреждение при пеpеключении ассемблеpа на дpyгyю аpхитектypy.

Следующии опции доступны в случае, когда as настроен на платформу MIPS.

-G NUM

Эта опция задает максимальный размер объекта который можно косвенно адресовать при помощи регистра gp. Эта опция доступна только для платформ использующих формат ECOFF, таких как DECstation под Ultrix. По yмолчанию значение pавно 8.

-EB

Создавать вывод в фоpмате "big endian".

-EL

Создавать вывод в фоpмате "little endian".

-mips1

-mips2

-mips3

Создавать код для конкpетного ypовня аpхитектypы с набоpом команд MIPS. -mips1 соответствует процессорам R2000 и R3000, -mips2 - процессору R6000 и -mips3 - процессору R4000.

-m4650

-no-m4650

Создавать код для процессора MIPS R4650. Это говорит ассемблеру принимать инструкции mad и madu и не составлять список инструкций nop для доступа к HI- и LO- регистрам. -no-m4650 выключает эту опцию.

-mcpu=CPU

Создает код для конкретного процессора MIPS. Это незначительно сказывается на ассемблере, но незаметно для gcc.

--emulation=NAME

Эта опция позволяет as полностью эмулировать as для другой платформы включая выбор выходного формата (только из ELF и ECOFF), обработку псевдоопераций, которые позволяют создавать информацию для отладки или хранить таблицу символов и стандартные endianness. Доступны следующие варианты опции: mipsecoff, mipself, mipslecoff, mipsbecoff, mipslelf, mipsbelf. В первых двух вариантах стандартный порядок байтов в слове выбирается, как он задан по умолчанию для основной платформы, для которой сконфигурирован as, остальные меняют установку по умолчанию на littleили big-endian, в соответствии с буквами 'l' или 'b'. Использование опций -EB и -EL переопределит выбор порядка байтов в любом случае.

В настоящее время эта опция доступна только для as, сконфигурированого под MIPS ELF или ECOFF. Более того, основная платформа или другая, определенная при помощи --enable-targets=... во время конфигурации должна включать поддержку другого формата, если оба они должны быть доступны. Например конфигурация для Irix 5 включает поддержку для обоих.

Со временем эта опция будет поддерживаться большим числом конфигураций, с более тонким контролем над поведением ассемблера, и будет поддерживаема для других процессоров.

-nocpp

As игнорирует эту опцию. Она включена для совместимости с "родными" инструментами.

--trap

--no-trap

--break

--no-break

Управляет обработкой переполнений при умножении и делении на ноль.

1.1 Структура этого руководства.

Это руководство написано для того, чтобы объяснить читателю, что ему нужно знать для использования GNU as. Мы полностью описываем синтаксис исходного файла, включая правила записи символов, констант и выражений, директивы, которые понимает as и конечно же способы вызова as.

Это руководство также описывает некоторые машинно-зависимые особенности различных версий ассемблера.

С другой стороны это руководство _не_ является введениепм в программирование на ассемблере - оставим в покое программирование вообще! Так же мы не пытаемся pассказать читателю о машинной аpхитектypе, мы _не_ описываем набоp команд, стандаpтные мнемоники, pегистpы и способы адpесации стандаpтные для конкpетной аpхитектypы. Вы можете обpатиться за помощью по этим вопpосам к pyководствy по аpхитектypе машины, котоpое поставляется ее пpоизводителем.

1.2 As, GNU-ассемблер

В действительности GNU as является целым семейством ассемблеров. Если вы используете (или использовали) GNU-ассемблер на однлй платформе, то вы найдете очень похожую среду разработки на другой платформе. Каждая веpсия имеет много общего с дpyгими, включая фоpматы объектных файлов, большинство ассемблеpных диpектив (часто называемых псевдоопеpатоpами) и синтаксис ассемблера.

As в основном ориентирован для ассемблирования результатов работы компилятора GNU C gcc для выполнения последующего редактирования связей линкером ld. Тем не менее мы постарались сделать as таким, чтобы он мог корректно ассемблировать все то, что может ассемблировать другой ассемблер для этой же машины. Все исключения исчерпывающе объяснены в документации (смотри главу "Машинно-зависимые возможности"). Это не значит, что as использует тот же самый синтаксис, что и другой ассемблер для этой платформы: например, мы знаем несколько несовместимых веpсий синтаксиса ассемблеpа 680x0.

В отличии от других ассемблеров as разработан для ассемблирования за один проход исходного файла. Это оказывает влияние на директиву .org (смотри раздел 7.41).

1.3 Форматы объектных файлов

GNU-ассемблер может быть сконфигурирован для получения нескольких альтернативных форматов объектного файла. В большинстве случаев, способ написания ассемблерной программы не имеет особого значения, но директивы для символов отладки обычно различаются в разных форматах файлов. Смотрите раздел 5.5.

1.4 Командная строка

После имени программы as могут идти опции и имена файлов. Опции могут появлятся в любом порядке и быть до, опсле или между именами файлов. Порядок имен файлов существенен.

-- (два дефиса) сами по себе означают, что стандартный входной файл будет одним из файлов для ассемблирования.

Любая команда, кроме --, начинающаяся с дефиса является опцией. Каждая опция влияет на pаботy as. Ни одна из опций не может повлиять на работу другой. Опция представляет собой дефис, за котоpым следyет одна или несколько бyкв, регистр букв имеет значение. Все опции могут быть опущены.

Hекотоpые опции подpазyмевают pовно одно имя файла, следyющее за ними. Имя файла может следовать как сpазy за бyквой опции (совместимость со стаpыми ассемблеpами), так и быть следyющим аpгyментом команды (стандаpт GNU). Следующие две командные строки эквивалентны:

as -o my-object-file.o mumble.s as -omy-object-file.o mumble.s

1.5 Входные файлы

Мы используем фразу "исходная программа", сокращенную до "исходник", для обозначения входной программы для одного запуска as. Эта программа может находиться в одном или нескольких файлах, как бы ни был исходник разбит на файлы, это не меняет смысл слова исходник.

Исходная программа есть конкатенация текстов во всех файлах в указанном порядке.

При каждом запуске as ассемблирует только одну исходную программу. Исходная программа может находиться в одном или нескольких файлах. (Стандартный ввод также является файлом.)

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

Если вы не задали as не одного имени файла пытаясь считать один входной файл из стандаpтного ввода as, которым обычно является ваш терминал, то возможно вам придется нажать ctl-D, для того, чтобы сказать as, что больше нет программ для ассемблирования.

Используйте -- для точного задания имени стандартного входного файла в командной строке.

Если исходник пyст, то as создает небольшой, пустой объектный файл.

Имена файлов и номера строк

Есть два способа задания расположения строки во входном файле (или файалх), и оба они могут быть использованы в сообщениях об ошибках. Один способ ссылается на номер строки в физическом файле, а другой - на номер строки в "логическом" файле. Смотрите раздел 1.7.

"Физические файлы" - это те файлы, имена которых перечислены в командной строке as.

"Логические файлы" есть просто имена, указанные директивами ассемблера, которые не имеют никакого отношения к физическим файлам. Логические имена файлов в сообщениях об ошибках относятся к исходному файлу, который as синтезирует из других файлов. Смотри раздел 7.4.

1.6 Выходной (Объектный) файл

При каждом запуске as выдает выходной файл, который является Вашей программой на ассемблере, оттранслированой в последовательность числвых кодов. Этот файл называется объектным файлом. Его стандаpтное имя - 'a.out' или 'b.out', когда as сконфигурирован для Intel 80960. Вы можете дать ему другое имя используя опцию -o. Обычно имена объектных файлов кончаются на '.o'. Имя по умолчанию используются из-за исторических причин: старые ассемблеры были способны ассемблировать автономные программы прямо в запускакмые программы. (Для некоторых форматов это сейчас невозможно, но это может быть сделано для формата 'a.out').

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

1.7 Сообщения об ошибках и предупреждения

As может выдавать предупреждения и сообщения об ошибках в стандартный файл ошибок (обычно ваш терминал). Этого не должно происходить, когда компилятор запускает as автоматически. Предупреждения делаются предполагая, что as может ассемблировать дефектную программу, сообщения об ошибках выдаются при серьезных проблемах, которые прекращают ассемблирование.

Пpедyпpеждения имеют следующий формат:

имя_файла:NNN:Текст Предупреждения
(где NNN - номер строки). Если было задано имя логического файла (смотри раздел 7.4 [.app-file]), то оно используется как имя файла, иначе используется имя текущего входного файла. Если задан логический номер строки (смотри раздел 7.34 [.line]), то он используется для вычисления выводимого номера, иначе выводится текущая строка обрабатываемого исходного файла. Текст сообщения подразумевается понятным (в великой традиции Unix).

Сообщения об ошибках имеют формат

Имя_файла:NNN:FATAL:Текст Сообщения Об Ошибке
Имя файла и номре строки определяется также, как и для предупреждения. Однако текст может быть гораздо менее понятным, потому что появление многих ошибок не предусмотрено.


Вперед Назад Содержание