
- •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. Спеціальні числові значення та особливі обчислювальні ситуації
29. Команди керування процесором
Одно байтові команди даної групи забезпечують програмне керування різними функціями процесора. Вони поділяються на дві підгрупи: команди, які діють на прапорці в регістрі eflags; команди синхронізації мікропроцесора з зовнішніми подіями.
-
Команди, які впливають на прапорці.
Команди clc, cmc і stc виконують відповідно установку в нуль, інвертування або доповнення і установку в одиницю прапорця cf – прапорця перенесення.
Команди cld і std забезпечують установку в нуль і установку в одиницю прапорця df, значення якого визначають напрям обробки ланцюжка елементів, тобто автоінкремент (df=0) або автодекремент (df=1) індексних регістрів si/esi та di/edi в ланцюжкових командах.
Команди cli і sti керують станом прапорця if маскованих переривань від зовнішніх пристроїв. Після cli прапорець дорівнює 0 і процесор не реагує на апаратні переривання від пристроїв, які приєднані до входу intr процесора (масковані переривання заборонені). Однак переривання від пристроїв, які приєднані до входу nmi процесора і програмні переривання процесор розпізнає і відповідно реагує на них. При підтвердженні апаратних переривань прапорець if установлюється рівним 0 автоматично. Команда sti переводить прапорець if в стан 1, що дозволяє переривання по входу intr. Переривання, яке очікує не розпізнається до завершення команди, яка знаходиться після sti.
Команди cli і sti привілейовані, тобто програма, в якій вони присутні, повинна мати поточний рівень привілеїв cpl, який менший або дорівнює вмісту поля iopl в регістрі eflags. Якщо ця умова не виконується, то виникає особлива ситуація: порушення загального захисту.
-
Команди синхронізації.
Команда зупинки hlt – призупиняє всі подальші дії мікропроцесора. наступні команди не виконуються до того часу, поки не виконати апаратно процедуру початкового завантаження або не появиться зовнішнє переривання. Немасковані переривання по входу nmi завжди виводять процесор зі стану зупинки, а для дії маскованого переривання по входу intr прапорець if повинен дорівнювати 1. Після обслуговування переривання процесор виконує команду, яка знаходиться після команди hlt. Команда привілейована, її може виконати програма з поточним рівнем привілеїв cpl=0.
Зазвичай команда hlt використовується в програмах, які повинні безпосередньо взаємодіяти з “зовнішнім світом”: іншим процесором або зовнішнім пристроєм. Команду hlt можна використати замість безмежного циклу.
Команда lock – префікс блокування зовнішньої шини. Ця команда заставляє процесор сформувати сигнал lock# на час виконання команди, яка знаходиться після префікса. Тоді на час виконання цієї команди заблоковуються (ігноруються) всі запити до шини від інших процесорів у мультипроцесорній системі. В i486+ застосування команди дозволяється тільки перед командами bt, btc, btr, bts, add, adc, and, or, sub, sbb, xor, inc, dec, not, neg, якщо один з операндів в оперативній пам’яті. Для команди xchg з операндом в оперативній пам’яті процесор автоматично формує сигнал lock#. Якщо використати дану команду перед іншою, відмінною від команд з наведеного переліку, виникає особливий випадок: “невизначений код операції”.
Порожня команда nop не виконує ніяких дій. Використовується транслятором для вилучення лишніх байтів (кожний байт заповнюється кодом 90h – код операції команди nop), а також в програмних циклах затримки. Наприклад, якщо транслятор не може визначити заздалегідь довжину команди, то він резервує для неї максимально можливу кількість байтів, а після уточнення довжини заповнює лишні байти як описано вище.