Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Операторы



Операнд команды может быть выражением, представляющим собой комбинации операндов и операторов ассемблера. Транслятор ассемблера рассматривает выражение как единое целое и преобразует его в числовую константу. Логически значением этой константы может быть адрес некоторой ячейки памяти или некоторое абсолютное значение.

Таблица 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; Прочитано: 442 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...