Выражения
В языке ассемблера выражения могут быть использованы в инструкциях или директивах и состоят из операндов и операторов.
Операнды представляют значения, регистры или адреса ячеек памяти, используемых определенным образом по контексту программы.
Операторы выполняют арифметические, логические, побитовые и другие операции над операндами выражений.
Ниже даны описания наиболее часто используемых в выражениях операторов.
Арифметические операторы.
выражение_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 определяет число байтов памяти, выделенных переменной.