
- •Архітектура і система команд мікропроцесорів
- •1. Архітектура еом
- •1. 1. Поняття про архітектуру еом
- •1.2. Програмна модель мікропроцесора Intel Pentium III
- •Сегментні регістри
- •Регістри стану і керування
- •1.4. Організація пам’яті
- •Сегментована модель пам’яті
- •Формування фізичного адреса в реальному режимі
- •Типи даних
- •Формат команд
- •Типи переривань
- •Структура програми на асемблері
- •Синтаксис асемблера
- •Директиви сегментації
- •Прості типи даних
- •Системи числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Перевод із десяткової і шістнадцяткової системи у двійкову
- •Перевод із десяткової і двійкової у шістнадцяткову систему
- •Числа із знаком
- •Структура машинної команди
- •Способи задання операндів
- •Адресація пам’яті
- •Функціональна класифікація машинних команд
- •Команди обміну даними
- •Команди пересилання даних
- •Ввід-вивід в порт
- •Робота з адресами і вказівниками
- •Перетворення даних
- •Робота із стеком
- •Арифметичні цілочисельні команди
- •Цілі двійкові числа
- •Додавання двійкових чисел без знаку
- •Додавання двійкових чисел із знаком
- •Віднімання двійкових чисел без знаку
- •Віднімання двійкових чисел із знаком
- •Множення двійкових чисел без знаку
- •Множення двійкових чисел із знаком
- •Ділення двійкових чисел без знаку
- •Ділення двійкових чисел із знаком
- •Команди перетворення типів
- •4.2. Десяткові числа
- •Неупаковані bcd-числа
- •Упаковані bcd-числа
- •Логічні команди
- •Логічні команди
- •Команди зсуву
- •Лінійний зсув
- •Циклічний зсув
- •Додаткові команди зсуву
- •Команди передачі керування
- •Команди безумовного переходу;
- •Команди безумовного переходу
- •Процедури
- •Умовні переходи
- •Команда порівняння cmp
- •Команди умовного переходу і прапори
- •Команди умовного переходу і регістр ecxlcx
- •6.4. Організація циклів
- •Ланцюжкові команди
- •Пересилання ланцюжків
- •Порівняння ланцюжків
- •Сканування ланцюжків
- •Завантаження ланцюжків
- •Формування ланцюжків
- •Ввід-вивід елементів у порт
- •Складні структури даних
- •Доступ до елементів масиву
- •Двомірні масиви
- •8.2. Структури
- •Описання шаблона структури
- •Визначення даних з типом структури
- •Методи роботи із структурою
- •Об’єднання
- •Визначення екземпляру запису
- •Робота з записами
- •Макрозасоби мови асемблера
- •Макрокоманди
- •Макродирективи
- •Директиви while і rept
- •Директиви irp і irpc
- •Директиви умовної компіляції
- •Директиви компіляції по умові
- •Директиви if і ife
- •Директиви ifdef і ifndef
- •Директиви ifb і ifnb
- •Директиви ifidn, ifidni, ifdif і ifdifi
- •9.4. Директиви генерації помилок
- •%Out недопустиме ім’я регістра
Ланцюжкові команди
Ланцюжкові команди дозволяють обробляти блоки пам’яті розміром: 8 біт, 16 біт, 32 біти. Є сім операцій примітивів, кожна з яких реалізується трьома командами для роботи з байтом, словом, подвійним словом. Особливість цих команд, що крім обробки поточних елементів, вони здійснюють ще й просовування до наступного елементу.
Основні операції примітиви і команди:
o пересилка ланцюжків:
movs адрес_приймача, адрес_джерела – переслати ланцюжок;
movsb – переслати ланцюжок байт;
movsw - переслати ланцюжок слів;
movsd - переслати ланцюжок подвійних слів.
o порівняння ланцюжків:
cmps адрес_приймача, адрес_джерела – порівняти строки;
cmpsb – порівняти строку байтів;
cmpsw – порівняти строку слів;
cmpsd – порівняти строку подвійних слів.
o сканування ланцюжків:
scas адрес_приймача – сканувати ланцюжок;
scasb – сканувати ланцюжок байтів;
scasw - сканувати ланцюжок слів;
scads - сканувати ланцюжок подвійних слів
o завантаження елементів із ланцюжка:
lods адрес_джерела – завантажити елемент із ланцюжка в регістр-акумулятор
al/ax/eax;
lodsb – завантажити байт із ланцюжка в регістр al; lodsw - завантажити слово із ланцюжка в регістр ax;
lodsd - завантажити подвійне слово із ланцюжка в регістр eax.
o зберігання елементів у ланцюжку:
stos адрес_приймача – зберегти елемент із регістра-акумулятора al/ax/eax в ланцюжок; stosb - зберегти байт із регістра al в ланцюжок;
stows - зберегти слово із регістра ax в ланцюжок;
stosd - зберегти подвійне слово із регістра eax в ланцюжок.
o отримання елементів ланцюжка із порта ввода_вивода:
ins адрес_приймача, номер_порта – ввести із порта ланцюжок байтів;
insb – ввести із порта ланцюжок байтів;
insw - ввести із порта ланцюжок слів;
insd - ввести із порта ланцюжок подвійних слів;
o вивід елементів ланцюжка в порт ввода-вивода:
outs номер_порта, адрес_джерела – вивести елементи із ланцюжка у порт ввода-
вивода;
outsb – вивести ланцюжок байтів у порт ввода-вивода;
outsw – вивести ланцюжок слів у порт ввода-вивода;
outsd – вивести ланцюжок подвійних слів у порт ввода-вивода;
Логічні команди використовуються із префіксами повторень:
rep
repe, repz repne, repnz
rep (REPeat) заставляє ланцюжкову команду виконуватися поки ecx/cx не 0, при цьому ланцюжкова команда зменшує ecx/cx на одиницю. Команда без префікса цього не робить. Використовується з командами movs, stos.
repe, repz (REPeat while Equal or Zero) заставляє ланцюжкову команду виконуватися поки ecx/cx не 0 або zf=1. Використовується з командами cmps, scas для пошуку елементів, що відрізняються.
Repne, repnz (REPeat while Not Equal or Zero) заставляє ланцюжкову команду виконуватися поки ecx/cx не 0 або zf=0. Використовується з командами cmps, scas для пошуку елементів, що співпадають.
Фізичні адреси ланцюжкових команд наступні:
o адрес_джерела – пара ds:esi/si;
o адрес_приймача – пара es:esi/si.
У адресах допускається заміна (з допомогою префікса заміни сегмента) тільки регістра ds.
Для отримання повного вказівника (сегмент:зміщення) використовуються команди lds, les.
Напрямок обробки ланцюжкових команд визначається прапором напрямку df (Direction Flag) у регістрі eflags/flags. Якщо df=0 то обробка буде в напрямку зростання адресів, при df=1
в напрямку зменшення адресів.
Станом прапора df можна керувати з допомогою двох команд. Cld (Clear Direction Flag) – очистити прапор напрямку (df=0). Std (Set Direction Flag) – встановити прапор напрямку (df=1).