Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 339; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.115 (0.005 с.) |