Выражения

Выражение - константа, символ, или ряд констант и символов, разделенные арифметическими операторами. 32-разрядные диапазоны допустимых значений выражения: от -2147 483 648 до 2147 483 647 для знаковых значений, от 0 до 4 294 967 295 для значений без знака. Три основных фактора влияют на порядок выполнения выражения:

· Круглые скобки. Выражения, включенные в круглые скобки, всегда рассчитываются сначала. 8 / (4 / 2) = 4, но 8 / 4 / 2 = 1. Вы не можете заменять круглые скобки на фигурные скобки ({}) или квадратные скобки ([]).

· Группы по старшинству. Операторы, перечисленные ниже, разделены на девять групп по старшинству. Когда круглые скобки не определяют порядок оценки выражения, первой выполняется самая высокая по старшинству операция. 8+4/2=10 (сначала вычислено 4/2).

· Выполнение слева направо. Когда круглые скобки и группы по старшинству не определяют порядок оценки выражения, выражения вычисляются слева направо, кроме группы 1, в которой они вычисляются справа налево. 8/4*2=4, но 8/(4*2)=1.

Список операторов, которые могут использоваться в выражениях, в соответствие с группами старшинства.

Группа Оператор Описание
+ - ~ ! Унарный плюс Унарный минус Дополнение до 1 Логическое НЕ
* / % Умножение Деление Модуль
+ - Сложение Вычитание
<< >> Сдвиг влево Сдвиг вправо
< < = > > = Меньше чем Меньше или равно Больше чем Больше или равно
= ! = Равно Не равно
& Поразрядное И
^ Поразрядное исключающее ИЛИ (XOR)
| Поразрядное ИЛИ

Внимание: операторы группы 1 вычисляются справа налево. Все другие операторы вычисляются слева направо.

Ассемблер проверяет условия переполнения и антипереполнения, когда арифметические операции выполняются во время трансляции. Он дает предупреждение (Value truncated – значение усечено) всякий раз, когда происходит переполнение или антипереполнение. Ассемблер не проверяет переполнение или антипереполнение при умножении.

Четкие выражения. Некоторые директивы ассемблера требуют четких выражений в качестве операндов. Четкие выражения содержат только символы или разовые константы ассемблера, которые определены прежде, чем с ними сталкиваются в выражении. Значение четкого выражения должно быть абсолютным (без знака). Это - пример четкого выражения:

1000h+X

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

· Условные выражения

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

Оператор Описание
= Равно
!= Не равно
< Меньше
<= Меньше или равно
> Больше
>= Больше или равно

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

· Законные выражения

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

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

Исключения для законных выражений. При использовании в регистрах режима относительной адресации выражение в квадратных скобках должно быть четким. Например, *+А4[15]