25. Операции операндов

К операндам команд применимы следующие операции:

Арифметические операторы.
К ним относятся:

  • унарные “+” и “–”;
  • бинарные “+” и “–”;
  • умножение “*”;
  • целочисленное деление “/”;
  • получение остатка от деления “mod”.
Mov ax, 5+7  ;ax <- 12

Операторы сдвига выполняют сдвиг выражения на указанное количество разрядов. (shl, shr, sal, sar и т.п.)

Операторы сравнения (возвращают значение “истина” или “ложь”) предназначены для формирования логических выражений. Логическое значение “истина” соответствует цифровой единице, а “ложь” — нулю.

Логические операторы выполняют над выражениями побитовые операции (AND OR, XOR, NEG, NOT)

Например:
val equ 10010011 
mov al, val xor 10010010;
al= 00000001; 

Индексный оператор [ ] (квадратные скобки). Транслятор их наличие воспринимает как указание сложить значение выражение_1 за этими скобками с выражение_2, заключенным в скобки.

mov ax, mas[si] ;пересылка слова по адресу
;mas+(si) -> ax

Оператор переопределения типа ptr применяется для переопределения или уточнения типа метки или переменной, определяемых выражением. Тип может быть: byte, word, dword, qword, tbyte, near, far.

my_var dd 0
...
mov ah,byte ptr my_var +1 ;пересылка второго байта
 ;из двойного слова

Оператор переопределения сегмента :(двоеточие) заставляет вычислять физический адрес относительно конкретно задаваемой сегментной составляющей: “имя сегментного регистра”, “имя сегмента” из соответствующей директивы SEGMENT. Сегмент CS переопределить нельзя.

Операторы получения специальных значений:

  • seg (физический адрес сегмента в котором было объявлено выражение),
  • offset (смещение выражения в байтах относительно начала того сегмента, в котором выражение определено
  • type (возвращает размер директивы, с помощью которой было описано выражение ),
  • length (возвращает количество элементов в выражении),
  • size (length * type).

Оператор изменения приоритета (). Операторы операндов имеют разный приоритет, операторы с одинаковым приоритетом выполняются последовательно слева на право. Изменить приоритет того или иного оператора можно при помощи оператора (), который имеет наивысший приоритет.

17.07.2015