Выражение определяет адрес или числовое значение. Пропуски могут предшествовать и/или следовать за выражением.
Результат выражения должен быть абсолютным числом или смещением в определенной секции. Если выражение не является абсолютным, и нет достаточной информации для as при анализе выражения, чтобы найти его секцию, то для интерпретации выражения необходим второй проход. В настоящеевремя второй проход не предусмотрен. As в этой ситуации прекращает работу и выдает сообшение об ошибке.
Любое пустое выражение не имеет значения: это просто пропуск или null. Где бы не было нужно абсолютное выражение, вы можете опустить выражение и as поставит вместо него 0. Это осовместимо с другими ассемблерами.
Целое выражение - это один или более аргументов, разделенных операторами.
Аргументы - это символы, числа и подвыражения. В других контекстах аргументы часто называются "арифметическими операндами". В этом руководстве, чтобы избежать конфликтов с "операндами инструкций" машинного языка, мы используем термин "аргумент" только по отношению к частям выражений, резервируя слово "операнд" для операндов машинных инструкций.
Символы вычисляются в виде {SECTION NNN}, где SECTION одна из text, data, bss, absolute, или undefined. NNN есть 32-х битное целое число со знаком в двоичном дополнительном коде.
Числа обычно целые.
Число может быть с плавающей точкой или большим целым. В этом случае Вам выдается предупреждение, что используются только 32 младших разряда, и as считает, что эти 32 бита представляют собой целое. Вы можете писать целочисленные инструкции, работающие с экзотическими константами, совместимые с другими ассемблерами.
Подвыpажения-это левая скобка `(', за котоpой следyет целочисленное выpажение, а затем идет пpавая скобка `)', либо это опеpатоp пpефикса, за котоpым идет аpгyмент.
Опеpатоpы - это аpифметические фyнкции, такие как '+' или '-'. За префиксными операторами следует аргумент. Инфикснные операторы ставятся между аргументами. Перед и/или после оператора могут быть пропуски.
As имеет следующие префиксные операторы. Каждый из них имеет один аргумент, который должен быть абсолютным.
"Отрицание". Двоичное дополнительное отрицание.
"Дополнение". Двоичное не.
Инфиксные операторы имеют два аргумента, по одному с каждой стороны. Операторы имеют приоритет, но операции с равным приоритетом выполняются слева направо. Кроме случаев '+' и '-', оба аргумента должны быть абсолютными и результат получается так же абсолютным.
"Умножение".
/
"Деление". Округление такое же, как и у оператора '/' языка C.
"Остаток".
"Сдвиг влево". То же, что и оператор << языка C.
"Сдвиг вправо". То же, что и оператор >> языка C.
"Побитовое Или".
"Побитовое И".
"Побитовое Исключающее Или".
"Побитовое Или-Не".
"Сложение". Если один из аргументов абсолютен, то результат относится к секции другого аргумента. Вы не можете складывать аргументы из различных секций.
"Вычитание". Если правй аргумент абсолютен, результат относится к секции левого аргумента. Если оба аргумента из одной секции, то результат абсолютный. Вы не можете вычитать аргументы из разных секций.