(CMPS), які можна розділити на групи:
команди пересилання рядків: MOVS - пересилання, LOADS - завантаження, STOS - запис;
команди перевірки рядків: SCAS - сканування, CMPS - порівняння.
Перелік команд обробки рядків представлений в таблиці 1.
Зауваження. Алгоритм роботи команди CMPS полягає в послідовному виконанні віднімання над черговими елементами обох рядків. За результатами віднімання змінюється вміст регістра прапора, але при цьому не змінюється інформація в комірках пам'яті, адресуються регістрами SI і DI. Якщо рядок-джерело src менше, ніж рядок-приймач dst, то CF = 1. Якщо рядки рівні, то ZF = 1. Якщо рядок-джерело src більше, ніж рядок-приймач dst, то CF = 0 і ZF = 0. У цих командах можуть бути використані префікси повторення REPE - повторити поки dst = src або REPNE - повторити поки dst <> src.
Таблиця 1. Строкові команди
МнемокодДействіеОперанд 1Операнд 2ПрімечаніеCMPSСравненіе пари елементів: [DS: SI] = [ES: DI]?; SI: = SI + d; DI: = DI + d, Регістри DS і SIРегістри ES і DIЗапісивается без операндів . За результатами порівняння змінюється регістр флагов.SCASСканірованіе рядки (порівняння значення акумулятора AL/AX з байтом/словом в пам'яті) AL = [ES: DI]?; DI: - DI В± 1Регістри ES: DIALІспользуется для пошуку в рядку елемента, рівного заданому ( в AL або АХ) або відмінного від заданногоMOVSПересилка рядки: [DS: SI] => [ES: DI]; SI: = SI + d; DI: = DI + dІсточнік - регістри DS і SIПріемнік - ES і DIНе змінює прапори і тому вихід з циклу можливий тільки за СХ = 0.STOSПеренос елементів з акумулятора в рядок-приймач dst: AL В® [ES: DI] регістра ALрегістров ES: DIІспользуется для запису у всі комірки якійсь області пам'яті однієї і тієї ж величини, зазначеної в регістрі AL або АХLODSПеренос елементів з рядка-джерела src в акумулятор: [DS: SI] В® ALрегістрамі DS: SIрегістр AL (AX) Використовується разом з командою STOS для перепису рядків, коли між зчитуванням і записом елементів рядків над ними повинна бути виконана якась додаткова операція span>
У таблиці 2 наведені умовні переходи, які можна використовувати з командою CMPS.
Таблиця 2. Умовні переходи для команд порівняння
УсловіеБез знакаСо знакомsrc dstJNE (JNZ) JNE (JNZ) src = dstJE (JZ) JE (JZ) src> = dstJAEJGEsrc> dstJAJG
Команди префікса повторення.
Строкові команди можуть обробляти тільки один байт або слово. При обробці довгих рядків використовуються спеціальні префікси повторення. Префікс змушує команду виконуватися кілька разів. У строкових командах можна використовувати такі префікси повторення:
Гј rep (repeat) - повторювати, поки CX> 0; використовується з командами, які реалізують операції-примітиви пересилання (movs) і збереження елементів ланцюжків (stos);
Гј repe або repz (repeat while Equal or Zero) - повторювати, поки прапор нуля встановлений і CX> 0; використовуються з командами порівняння (cmps) і сканування (scas) для пошуку відрізняються елементів ланцюжків; p>
Гј repne або repnz (repeat while Not Equal or Zero) - повторювати, поки прапор нуля скинутий і CX> 0; використовуються з командами порівняння і сканування для пошуку співпадаючих елементів ланцюжків.
Префікси повторення вказуються перед потрібної цепочечной командою в поле мітки. Для їх використання необхідно помістити в регістр CX значення, рівне кількості повторів строковой команди. При цьому цепочечная команда, перед якою стоїть префікс, автоматично зменшує вміст cx на одиницю. p align="justify"> Приклади програм, що реалізують дії з рядками.
Фрагмент програми копіювання 10 байт з поля відправника source в полі одержувач dst.
data ​​p>
src DB ABCDEFGHIJ ; рядок-джерело DB 10 dup (?) ; рядок - приймач
code
ASSUME DS: @ data, ES: @ data ​​p>
Main:
MOV ...