![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Операнд команды может быть выражением, представляющим собой комбинации операндов и операторов ассемблера. Транслятор ассемблера рассматривает выражение как единое целое и преобразует его в числовую константу. Логически значением этой константы может быть адрес некоторой ячейки памяти или некоторое абсолютное значение.
Таблица 6. - Операторы и их приоритет
Оператор | Приоритет |
LENGTH, SIZE, WIDTH, MASK, (,), [,], <, > | |
. | |
: | |
PTR, OFFSET, SEG, TYPE, THIS | |
HIGH, LOW | |
+, – (унарные) | |
*, /, MOD, SHL, SHR | |
+, – (бинарные) | |
EQ, NE, LT, LE, GT, GE | |
NOT | |
AND | |
OR, XOR | |
SHORT, TYPE |
Операторы с одинаковыми приоритетами обрабатываются последовательно слева направо. Изменение порядка выполнения возможно путем расстановки круглых скобок, которые имеют наивысший приоритет.
§ Арифметические операторы. К ним относятся унарные операторы “+” и “–”, бинарные “+” и “–”, операторы умножения “*”, целочисленного деления “/”, получения остатка от деления “mod”.Например:
tab_size equ 50; размер массива в байтах
size_el equ 2; размер элементов
mov cx,tab_size/size_el; вычисляется число элементов массива и заносится в регистр сх
§ Операторы сдвига выполняют сдвиг выражения на указанное количество разрядов вправо (SHR) и влево (SHL). Например:
mask_b equ 10111011
...
mov a,.mask_b shr 3; al=00010111
§ Операторы сравнения (возвращают значения «истина» или «ложь») предназначены для формирования логических выражений. Логическое значение «истина» соответствует логической единице, а «ложь» – логическому нулю. Логическая единица – это значение, все биты которого равны 1. Например:
tab size equ 30; размер таблицы
mov al, tab size ge 50; загрузка "ложь" в al
cmp al, 0; если tab size < 50, mo
je ml; переход на ml
ml:...
В этом примере, если значение tab_size больше или равно 50, то результат в al равен 0ffh, а если tab_size меньше 50, то al равно 00h. Команда cmp сравнивает значение al с нулем и устанавливает соответствующие флаги в flаgs/eflags. Команда je на основе анализа этих флагов передает или не передает управление на метку ml.
Таблица 7. – Операторы сравнения
Оператор | Значение |
EQ | ИСТИНА, если выражение 1 равно выражению 2 |
NE | ИСТИНА, если выражение 1 не равно выражению 2 |
LT | ИСТИНА, если выражение 1 меньше выражению 2 |
LE | ИСТИНА, если выражение1 меньше или равно выражению2 |
GT | ИСТИНА, если выражение 1 больше выражения 2 |
GE | ИСТИНА, если выражение 1 больше или равно выражению 2 |
§ Логические операторы (and, or, xor) выполняют побитовые операции над выражениями. Выражения должны быть абсолютными, то есть такими, численное значение которых может быть вычислено транслятором. Например:
flags equ 10010011
mov al, flags xor 01h; пересылка в al поля flags с инвертированным младшим битом
§ Индексный оператор [ ]. Транслятор воспринимает скобки как указание сложить значение выражения перед этими скобками со значением выражения, заключенным в скобки. Например:
mov ax,mas[si]; пересылка слова по адресу mas+[si] в регистр ах.
§ Оператор переопределения типа PTR применяется для переопределения или уточнения типа метки или переменной. Тип может принимать одно из следующих значений: byte, word, dword, qword, tbyte, near, far. Например:
d_wrd dd 0
mov al,byte ptr d_wrd+1; пересылка второго байта из двойного слова
Переменная d_wrd имеет тип двойного слова. Если есть необходимость обращения не ко всему значению переменной, а только к одному из входящих в нее байтов, то нельзя это сделать командой, например, mov al,d_wrd+l, так как транслятор выдаст сообщение о несовпадении типов операндов. Оператор PTR позволяет непосредственно в команде переопределить тип и выполнить команду.
§ Оператор переопределения сегмента: (двоеточие) вычисляет физический адрес относительно конкретно задаваемой сегментной составляющей: "имя сегментного регистра", "имя сегмента" из соответствующей директивы SEGMENT или "имя группы".
§ Оператор именования типа структуры. (точка) также заставляет транслятор производить определенные вычисления, если он встречается в выражении.
§ Оператор получения сегментной составляющей адреса выражения SEG возвращает физический адрес сегмента для выражения, в качестве которого могут выступать метка, переменная, имя сегмента, имя группы или некоторое символическое имя.
§ Оператор получения смещения выражения OFFSET позволяет получить значение смещения выражения в байтах относительно начала того сегмента, в котором выражение определено. Например:
. data
pole dw 5
.code
mov ax,seg pole
mov es,ax
mov dx,offset pole; теперь в паре es:dx полный адрес переменной pole
Дата публикования: 2014-12-08; Прочитано: 476 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!