Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛК_МашЗавЯП_А4.doc
Скачиваний:
157
Добавлен:
10.06.2015
Размер:
19.94 Mб
Скачать
    1. Выражения

Выражение - константа, символ, или ряд констант и символов, разделенные арифметическими операторами. 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

+

-

~

!

Унарный плюс

Унарный минус

Дополнение до 1

Логическое НЕ

2

*

/

%

Умножение

Деление

Модуль

3

+

-

Сложение

Вычитание

4

<<

>>

Сдвиг влево

Сдвиг вправо

5

<

< =

>

> =

Меньше чем

Меньше или равно

Больше чем

Больше или равно

6

=

! =

Равно

Не равно

7

&

Поразрядное И

8

^

Поразрядное исключающее ИЛИ (XOR)

9

|

Поразрядное ИЛИ

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

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

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

1000h+X

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

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

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

Оператор

Описание

=

Равно

!=

Не равно

<

Меньше

<=

Меньше или равно

>

Больше

>=

Больше или равно

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]