Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Опорний конспект лекцій_ Асемблер.Docx
Скачиваний:
0
Добавлен:
20.02.2020
Размер:
506.89 Кб
Скачать
  1. Ланцюжкові команди

Ланцюжкові команди дозволяють обробляти блоки пам’яті розміром: 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).