
- •Основы алгоритмизации и программирования
- •29 Декабря 2011, протокол № 4
- •Введение
- •Этапы развития эвм
- •Поколения эвм
- •Машинно-ориентированные языки программирования
- •Архитектура эвм
- •Микропроцессоры intel
- •Набор регистров
- •Регистры общего назначения
- •Сегментные регистры
- •Регистры состояния и управления
- •Организация памяти
- •Сегментная организация памяти
- •Типы данных
- •Символы
- •Целые числа
- •Указатель на память
- •Цепочки
- •Вещественые числа
- •Двоично-десятичные числа (bcd)
- •Формат команд
- •Обработка прерываний
- •Int тип_прерывания
- •Синтаксис ассемблера
- •Алфавит ассемблера
- •Директивы сегментации
- •Упрощённые директивы сегментации
- •Директивы резервирования и инициализации данных
- •Операнды
- •Способы задания операндов Прямая адресация
- •Косвенная адресация
- •Косвенная базовая адресация
- •Косвенная базовая адресация со смещением
- •Косвенная индексная адресация со смещением
- •Косвенная базовая индексная адресация
- •Косвенная базовая индексная адресация со смещением
- •Операторы
- •Функциональная классификация машинных команд
- •Команды пересылки данных Команды общего назначения
- •Работа с адресами и указателями
- •Преобразование данных
- •Xlat [адрес_таблицы_перекодировки]
- •Ввод из порта и вывод в порт
- •Работа со стеком
- •Арифметические команды Форматы арифметических данных
- •Арифметические операции над целыми двоичными числами
- •Логические команды
- •Команды передачи управления
- •Команда безусловного перехода
- •Условные переходы
- •Организация циклов
- •Основы алгоритмизации и программирования
Операторы
Операнд команды может быть выражением, представляющим собой комбинации операндов и операторов ассемблера. Транслятор ассемблера рассматривает выражение как единое целое и преобразует его в числовую константу. Логически значением этой константы может быть адрес некоторой ячейки памяти или некоторое абсолютное значение.
Таблица 6. - Операторы и их приоритет
Оператор |
Приоритет |
LENGTH, SIZE, WIDTH, MASK, ( , ), [ ,], <, > |
1 |
. |
2 |
: |
3 |
PTR, OFFSET, SEG, TYPE, THIS |
4 |
HIGH, LOW |
5 |
+, – (унарные) |
6 |
*, / , MOD, SHL, SHR |
7 |
+, – (бинарные) |
8 |
EQ, NE, LT, LE, GT, GE |
9 |
NOT |
10 |
AND |
11 |
OR, XOR |
12 |
SHORT, TYPE |
13 |
Операторы с одинаковыми приоритетами обрабатываются последовательно слева направо. Изменение порядка выполнения возможно путем расстановки круглых скобок, которые имеют наивысший приоритет.
Арифметические операторы. К ним относятся унарные операторы “+” и “–”, бинарные “+” и “–”, операторы умножения “*”, целочисленного деления “/”, получения остатка от деления “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