Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Використання префіксів в ланцюжкових командах.
Нехай ланцюжковій команді передує префікс повторення. Тоді після кожного її виконання здійснюється декремент регістра лічильника cx/ecx (без впливу на прапорці). Тому лічильник cx/ecx перед використанням ланцюжковою командою потрібно відповідно ініціювати на потрібну кількість повторення цієї команди. Префікси повторення позначаються rep, repe/repz, repne/repnz. Їх можна використовувати з певними ланцюжковими командами. Окремий префікс діє тільки на одну команду. Наведемо алгоритм дії префікса повторення: 2.1. Якщо атрибут розміру адреси AddresSize=16, то як лічильник використати регістр cx, інакше (атрибут адреси AddresSize=32) як лічильник використати регістр ecx. 2.2. Перевірити регістр-лічильник. Якщо він дорівнює 0, то вийти з ітерації і перейти до наступної команди. 2.3. Здійснити обробку всіх переривань, які очікують. 2.4. Виконати ланцюжкову команду один раз. 2.5. Зменшити регістр-лічильник на 1. Прапорці без зміни. 2.6. Перевірити прапорець zf, якщо ланцюжкова команда scas або cmps. Якщо умова не справджується, то вийти з ітерації і перейти до наступної команди. (Вийти з ітерації, якщо префіксом є repe і zf=0, або якщо префікс repne і zf=1). 2.7. Повернутися до кроку 2.2. для наступної ітерації. Префікс rep може використовуватися з командами movs і stos, які не впливають на прапорці. Він означає: повторювати, поки не досягнуто кінця ланцюжка, тобто до тих пір, поки (cx/ecx) не досягне 0. Префікси repe/repz діють однаково і застосовуються з командами cmps і scas, враховуючи прапорець zf, на який впливають ці команди: операція повторюється, якщо (cx/ecx) не дорівнює 0 і zf=1. Префікси repne/repnz діють аналогічно, але для повторення операції вимагається ненульовий стан (cx/ecx) і zf=0. Команда movs. Загальний вигляд команди movs dst,src. Передає байт, слово або подвійне слово з ланцюжка src, який адресується регістрами ds і si/esi, в ланцюжок dst, який адресується регістрами es і di/edi, і змінює значення регістрів-індексів si/esi та di/edi для адресації наступних елементів ланцюжків. Якщо використовується префікс rep – movs передає блок елементів з пам’яті в пам’ять. Можна використовувати явну специфікацію розміру елемента ланцюжків в мнемоніках movsb (byte), movsw (word), movsd (double word), тобто писати команди без операндів. Команда cmps. Загальний вигляд команди cmps dst,src. Порівнюються елементи байт, слово або подвійне слово з ланцюжка src, який адресується регістрами ds і si/esi, та відповідно байт, слово або подвійне слово з ланцюжка dst, який адресується регістрами es і di/edi, і змінює значення регістрів-індексів si/esi та di/edi для адресації наступних елементів ланцюжків. Порівняння елементів здійснюється за алгоритмом: (src) – (dst), модифікуються прапорці, змінюється значення регістра di/edi.
Як префікс можна використовувати repe/repz або repne/repnz. Якщо використати один з перших префіксів, то операція інтерпретується так: порівнювати до тих пір, поки або не досягнуто кінець ланцюжка, або елементи виявляться не рівними. При наявності одного з префіксів repne/repnz, операція інтерпретується: порівнювати, або поки не досягнуто кінця ланцюжка, або поки елементи виявляться рівними. Можна використовувати явну специфікацію розміру елемента ланцюжків в мнемоніках cmpsb (byte), cmpsw (word), cmpsd (double word). Отже команду зручно використовувати для пошуку однакових або різних елементів ланцюжків. Команда scas. Загальний вигляд команди scas dst; (acc) – (dst), модифікуються прапорці, змінюється значення регістра di/edi. Операнди не змінюються. Команда забезпечує віднімання елемента ланцюжка (b, w, d) від вмісту акумулятора (al/ax/eax). З префіксом repe/repz команду можна використати для пошуку елемента ланцюжка зі значенням, відмінним від значення в акумуляторі. Префікс repne/repnz дозволяє знайти в ланцюжку елемент, який збігається зі значенням в акумуляторі. Явні мнемоніки: scasb, scasw, scasd. Команда lods. Загальний вигляд команди lods src; acc=(src), змінюється значення регістра si/esi. Елемент ланцюжка src (b, w, d) завантажується в акумулятор (al/ax/eax) і si/esi просувається на наступний елемент. Стани прапорців не змінюються. Як правило, команда з префіксом повторення не використовується, але її зручно використовувати в програмних циклах замість двох команд: mov acc,src; inc si/esi (або dec si/esi) Явні мнемоніки: lodsb, lodsw, lodsd. Команда stos. Загальний вигляд команди stos dst; dst=(acc), змінюється значення регістра di/edi. Вміст акумулятора (al/ax/eax) запам’ятовується в елемент ланцюжка dst (b, w, d) і di/edi просувається на наступний елемент. Стани прапорців не змінюються. Зручно використовувати з префіксом повторення для ініціювання елементів ланцюжка сталим значенням, наприклад, для очищення текстового екрану в дисплейний буфер потрібно помістити код пробілу. Явні мнемоніки: stosb, stows, stosd.
|
|||||
Последнее изменение этой страницы: 2017-01-27; просмотров: 240; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.230.35.103 (0.06 с.) |