В языке ассемблера выражения могут быть использованы в инструкциях или директивах и состоят из операндов и операторов.
Операнды представляют значения, регистры или адреса ячеек памяти, используемых определенным образом по контексту программы.
Операторы выполняют арифметические, логические, побитовые и другие операции над операндами выражений.
Ниже даны описания наиболее часто используемых в выражениях операторов.
Арифметические операторы.
выражение_1
*
выражение_2
выражение_1
/
выражение_2
выражение_1
MOD
выражение_2
выражение_1
+
выражение_2
выражение_1
-
выражение_2
+
выражение
-
выражение
Эти операторы обеспечивают выполнение основных арифметических действий (здесь MOD - остаток от деления выражения_1 на выражение_2, а знаком / обозначается деление нацело). Результатом арифметического оператора является абсолютное значение.
Операторы сдвига.
выражение
SHR
счетчик
выражение
SHL
счетчик
Операторы SHR и SHL сдвигают значение выражения соответственно вправо и влево на число разрядов, определяемое счетчиком. Биты, выдвигаемые за пределы выражения, теряются. Замечание: не следует путать операторы SHR и SHL с одноименными инструкциями процессора.
Операторы отношений.
выражение_1
EQ
выражение_2
выражение_1
NE
выражение_2
выражение_1
LT
выражение_2
выражение_1
LE
выражение_2
выражение_1
GT
выражение_2
выражение_1
GE
выражение_2
Мнемонические коды отношений расшифровываются следующим образом:
EQ – равно;
NE – не равно;
LT – меньше;
LE – меньше или равно;
GT – больше;
GE – больше или равно.
Операторы отношений формируют значение 0FFFFh при выполнении условия и 0000h в противном случае. Выражения должны иметь абсолютные значения. Операторы отношений обычно используются в директивах условного ассемблирования и инструкциях условного перехода.
Операции с битами.
NOT
выражение
выражение_1
AND
выражение_2
выражение_1
OR
выражение_2
выражение_1
XOR
выражение_2
Мнемоники операций расшифровываются следующим образом:
NOT – инверсия;
AND – логическое И;
OR – логическое ИЛИ;
XOR – исключающее логическое ИЛИ.
Операции выполняются над каждыми соответствующими битами выражений. Выражения должны иметь абсолютные значения.
Оператор индекса.
[[выражение_1]] [выражение_2]
Оператор индекса [] складывает указанные выражения подобно тому, как это делает оператор +, с той разницей, что первое выражение необязательно, при его отсутствии предполагается 0 (двойные квадратные скобки указывают на то, что операнд не обязателен).
Оператор PTR
тип PTR выражение
При помощи оператора PTR переменная или метка, задаваемая выражением, может трактоваться как переменная или метка указанного типа. Тип может быть задан одним из следующих имен или значений:
Таблица 1. Типы оператора PTR
Имя типа
Значение
BYTE
WORD
DWORD
QWORD
TBYTE
NEAR
0FFFFh
FAR
0FFFEh
Оператор PTR обычно используется для точного определения размера, или расстояния, ссылки. Если PTR не используется, ассемблер подразумевает умалчиваемый тип ссылки. Кроме того, оператор PTR используется для организации доступа к объекту, который при другом способе вызвал бы генерацию сообщения об ошибке (например, для доступа к старшему байту переменной размера WORD).
Операторы HIGH и LOW
HIGH
выражение
LOW
выражение
Операторы HIGH и LOW вычисляют соответственно старшие и младшие 8 битов значения выражения. Выражение может иметь любое значение.
Оператор SEG
SEG выражение
Этот оператор вычисляет значение атрибута СЕГМЕНТ выражения. Выражение может быть меткой, переменной, именем сегмента, именем группы или другим символом.
Оператор OFFSET
OFFSET выражение
Этот оператор вычисляет значение атрибута СМЕЩЕНИЕ выражения. Выражение может быть меткой, переменной, именем сегмента или другим символом. Для имени сегмента вычисляется смещение от начала этого сегмента до последнего сгенерированного в этом сегменте байта.
Оператор SIZE
SIZE переменная
Оператор SIZE определяет число байтов памяти, выделенных переменной.