Общий формат оператора ассемблера имеет следующий вид:
[Метка:]Код_операции[Операнд1[,Операнд2]][;Комментарий],
где элементы, указанные в квадратных скобках, могут отсутствовать.
Пробелы вводятся произвольно, но минимум один пробел должен быть после кода операции.
Метка - это идентификатор, присваевыемый первому байту того оператора, в котором она появляется.
Код_операции - это мнемоническое обозначение соответствующих команд процессора.
Операнды оператора ассемблера описываются выражениями. Выражения конструируются на основе операций над числовыми и текстовыми константами, метками и идентификаторами переменных с использованием знаков операций и некоторых зарезервированных слов.
Ниже приведены все определенные в ассемблере операции.
Порядок старшинства операций от высшей к низшей:
LENGTH, SIZE, WIDTH, MASK, (), [], <>
.
:
PTR, OFFSET, SEG, TYPE, THIS
HIGH, LOW
+ (unary), - (unary)
*, /, MOD, SHL, SHR
+, -
EQ, NE, LT, LE, GT, GE
NOT
AND
OR, XOR
SHORT,.TYPE
Старшинство операций определяет порядок, по которому будет вычисляться выражение. Более старшие операции будут производиться раньше операций, имеющих меньшее старшинство.
|
|
Примечания:
Операции, стоящие в одной строке, имеют равный приоритет. Операции равного старшинства вычисляются слева направо.
Операции, стоящие в скобках, выполняются первыми.
Пример оператора ассемблера: l0c_1: mov ax,(DAT_1+4) SHR 4,
здесь использованы следующие операции ассемблера: (), + и SHR.
3.2 Арифметические операторы
3.2.1 + Сложение или унарный плюс
expression1 + expression2 (сложение)
или
+ expression (унарный плюс)
Бинарный "+" суммирует значения двух выражений. Унарный "+" сохраняет знак и значение выражения.
Примечания:
Оператор сложения ('+') может использоваться для прибавления целого числа к операнду, перемещаемому в памяти. Операндом, перемещаемым в памяти, может быть только одно из выражений. Оба выражения могут быть целыми числами.
Унарная операция '+' обладает более высоким приоритетом, чем оператор сложения. Смотри 'Старшинство операций', где описан порядок старшинства операций.
3.2.2 - Вычитание или унарный минус
expression1 - expression2 (вычитание)
или
- expression (унарный минус).
Бинарный "-" вычитает одно выражение из другого.Унарный "-" изменяет знак выражения.
Примечания:
Операндами оператора вычитания могут быть целые числа или операнды, перемещаемые в памяти. Если оба операнда являются адресами памяти, то они должны располагаться в одном и том же сегменте.
Унарная операция '-' обладает более высоким приоритетом, чем оператор вычитания. Смотри 'Старшинство операций', где описан порядок старшинства операций.
|
|
3.2.3 * Умножение
expression1 * expression2.
Перемножает значения двух выражений.
Примечания:
Выражения должны быть целыми числами. Они не могут быть адресами, перемещаемыми в памяти.
3.2.4 / Деление
expression1 / expression2
Делит одно выражение на другое.
Примечания:
Выражения должны быть целыми числами. Они не могут быть адресами, перемещаемыми в памяти.
3.2.5 MOD Деление по модулю
выражение1 MOD выражение2
Выдает остаток от деления.
Примечания:
Оба выражения должны быть целыми числами. Они не должны быть настраиваемыми адресами.
Например, 14 MOD 4 = 2, т.к. 14 / 4 дает остаток 2.
3.3 . Оператор доступа к полю структуры
structvariable.field.
Используется для доступа к полю переменной структурного типа.
Примечания:
Structvariable - это имя переменной, описанной ранее как переменная структурного типа, а field - это имя поля внутри структуры.
Исполнительный адрес, формируемый данным оператором (.), является суммой смещения переменной structvariable и смещения поля field внутри структуры. Этот адрес является относительным внутри той группы или сегмента, где определена переменная structvariable.
Этот оператор эквивалентен использованию оператора сложения (+) с индексными или базовыми операндами.
3.4 [] Оператор индексации
expression1[expression2]
Прибавляет значение выражения expression1 к значению выражения expression2. Этот оператор такой же, как и '+', за тем исключением, что здесь выражение expression1 не является обязательным.
Примечания:
Если выражение expression1 задано, оно может быть целым значением, перемещаемым операндом или абсолютным символом. Expression2 может быть целым значением или абсолютным символом, а также перемещаемым операндом, в том случае, когда выражение expression1 не задано.
Этот оператор используется как правило для доступа к отдельным элементам массива. Например, в следующей команде в регистр AL помещается 3-й байт строки символов:
MOV AL, STRING [2]
3.5 Операторы сдвига
3.5.1 SHL Сдвиг влево выражение SHL count
Сдвигает выражение влево на count битов.
Примечания:
Биты, сдвинутые за конец, теряются. При сдвиге вводятся нули. Если count больше или равен 16, результат равен 0.
Если сдвигаемое значение - слово, все 16 бит будут сдвинуты. Однако, если значение - байт, сдвигаются только 8 бит.
3.5.2 SHR Сдвиг вправо
выражение SHR count
Сдвигает выражение вправо на count битов.
Примечания:
Биты, сдвинутые за конец, теряются. При сдвиге вводятся нули. Если count больше или равен 16, результат равен 0.
Если сдвигаемое значение - слово, все 16 бит будут сдвинуты. Однако, если значение - байт, сдвигаются только 8 бит.
3.6 Побитовые логические операции
3.6.1 NOT Побитовое отрицание
NOT выражение
Производит над выражением побитовую операцию отрицания (инвертирования). Следующая таблица показывает результат применения операции NOT к одному биту:
Бит Результат
0 1
1 0
3.6.2 AND Побитное логическое "И"
expression1 AND expression2.
Производит по битам операцию логического умножения над операндами expression1 и expression2. Следующая таблица показывает результаты применения операции AND к двум битам:
Бит Бит Результат
0 0 0
0 1 0
1 0 0
1 1 1
3.6.3 OR Побитовая логическая операция "ИЛИ"
expression1 OR expression2
Производит по битам операцию логического ИЛИ над операндами expression1 и expression2. Следующая таблица показывает результаты применения операции OR к двум битам:
|
|
Бит Бит Результат
0 0 0
0 1 1
1 0 1
1 1 1
3.6.4 XOR Побитовое логическое "исключающее ИЛИ"
expression1 XOR expression2
Производит по битам операцию логического исключающего ИЛИ над операндами expression1 и expression2. Следующая таблица показывает результаты применения операции XOR к двум битам:
Бит Бит Результат
0 0 0
0 1 1
1 0 1
1
Лекция 5.