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

6. Выражения

Выражение определяет адрес или числовое значение. Пропуски могут предшествовать и/или следовать за выражением.

Результат выражения должен быть абсолютным числом или смещением в определенной секции. Если выражение не является абсолютным, и нет достаточной информации для as при анализе выражения, чтобы найти его секцию, то для интерпретации выражения необходим второй проход. В настоящеевремя второй проход не предусмотрен. As в этой ситуации прекращает работу и выдает сообшение об ошибке.

6.1 Пустые Выражения

Любое пустое выражение не имеет значения: это просто пропуск или null. Где бы не было нужно абсолютное выражение, вы можете опустить выражение и as поставит вместо него 0. Это осовместимо с другими ассемблерами.

6.2 Целые Выражения

Целое выражение - это один или более аргументов, разделенных операторами.

Аргументы

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

Символы вычисляются в виде {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атоpы - это аpифметические фyнкции, такие как '+' или '-'. За префиксными операторами следует аргумент. Инфикснные операторы ставятся между аргументами. Перед и/или после оператора могут быть пропуски.

Префиксные Операторы

As имеет следующие префиксные операторы. Каждый из них имеет один аргумент, который должен быть абсолютным.

-

"Отрицание". Двоичное дополнительное отрицание.

~

"Дополнение". Двоичное не.

Инфиксные Операторы

Инфиксные операторы имеют два аргумента, по одному с каждой стороны. Операторы имеют приоритет, но операции с равным приоритетом выполняются слева направо. Кроме случаев '+' и '-', оба аргумента должны быть абсолютными и результат получается так же абсолютным.

  1. Высший Приоритет
    *

    "Умножение".

    /

    "Деление". Округление такое же, как и у оператора '/' языка C.

    %

    "Остаток".

    <

    <<

    "Сдвиг влево". То же, что и оператор << языка C.

    >

    >>

    "Сдвиг вправо". То же, что и оператор >> языка C.

  2. Средний приоритет.
    |

    "Побитовое Или".

    &

    "Побитовое И".

    ^

    "Побитовое Исключающее Или".

    !

    "Побитовое Или-Не".

  3. Низший Приоритет
    +

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

    -

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

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


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