- •2. Структура регістра eflags
- •3. Організація оперативної пам’яті. Сегментована модель оперативної пам’яті. Формування адреси в реальному режимі
- •4. Формати і типи даних. Формат машинних команд. Система переривань
- •5. Десяткова арифметика. Форми зображення десяткових чисел
- •7. Ділення ascii-чисел.
- •6. Директиви сегментації. Директиви proc і endp
- •7. Опис простих типів мовою асемблера
- •10. Синтаксис команд мовою асемблера
- •11. Команди передач даних
- •Xchg ax, data1; (data2) в data1, (ax) – початковий стан
- •12. Стекові передачі даних
- •13. Передачі адресних об’єктів, команди введення-виведення і передачі прапорців
- •14. Команди передачі даних movXx. Команда setCc. Команда xlat
- •15. Команди додавання, віднімання і порівняння
- •Inc reg/mem; Розмір 8/16/32.
- •16. Команди множення і ділення
- •20. Команди логічних операцій. Команди зсувів
- •22. Команди операцій з двійковими ланцюжками
- •23. Команди передачі керування (безумовні переходи)
- •24. Команди умовних переходів і команди керування циклами
- •26. Команди переривань і повернення з переривань
- •Загальні поняття.
- •Використання префіксів в ланцюжкових командах.
- •Команда movs.
- •Команда cmps.
- •Команда scas.
- •Команда lods.
- •Команда stos.
- •Команди введення/виведення ланцюжків.
- •29. Команди керування процесором
- •Команди, які впливають на прапорці.
- •Команди синхронізації.
- •Системні команди
- •31. Формати даних, які підтримуються fpu
- •Параметри для трьох форматів в таблиці
- •32. Програмна модель fpu
- •33. Слово стану sw і слово керування cw пристрою fpu.
- •Відповідність між кодом умови і прапорцями
- •34. Команди передач даних fpu: завантаження, збереження, збереження з вибором зі стека, обміну, завантаження сталих.
- •35. Арифметичні команди fpu: додавання, віднімання, множення, ділення.
- •36. Додаткові арифметичні команди fpu.
- •37. Команди порівняння fpu
- •38. Команди трансцендентних функцій. Алгоритми обчислення значень функцій і та логарифмів за будь-якою основою.
- •39. Команди керування пристроєм fpu
- •40. Спеціальні числові значення та особливі обчислювальні ситуації
-
Використання префіксів в ланцюжкових командах.
Нехай ланцюжковій команді передує префікс повторення. Тоді після кожного її виконання здійснюється декремент регістра лічильника cx/ecx (без впливу на прапорці). Тому лічильник cx/ecx перед використанням ланцюжковою командою потрібно відповідно ініціювати на потрібну кількість повторення цієї команди.
Префікси повторення позначаються rep, repe/repz, repne/repnz. Їх можна використовувати з певними ланцюжковими командами. Окремий префікс діє тільки на одну команду. Наведемо алгоритм дії префікса повторення:
-
Якщо атрибут розміру адреси AddresSize=16, то як лічильник використати регістр cx, інакше (атрибут адреси AddresSize=32) як лічильник використати регістр ecx.
-
Перевірити регістр-лічильник. Якщо він дорівнює 0, то вийти з ітерації і перейти до наступної команди.
-
Здійснити обробку всіх переривань, які очікують.
-
Виконати ланцюжкову команду один раз.
-
Зменшити регістр-лічильник на 1. Прапорці без зміни.
-
Перевірити прапорець zf, якщо ланцюжкова команда scas або cmps. Якщо умова не справджується, то вийти з ітерації і перейти до наступної команди. (Вийти з ітерації, якщо префіксом є repe і zf=0, або якщо префікс repne і zf=1).
-
Повернутися до кроку 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).
Отже команду зручно використовувати для пошуку однакових або різних елементів ланцюжків.