Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асм.docx
Скачиваний:
19
Добавлен:
27.10.2018
Размер:
644.06 Кб
Скачать

29. Команди керування процесором

Одно байтові команди даної групи забезпечують програмне керування різними функціями процесора. Вони поділяються на дві підгрупи: команди, які діють на прапорці в регістрі eflags; команди синхронізації мікропроцесора з зовнішніми подіями.

  1. Команди, які впливають на прапорці.

Команди 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. Якщо ця умова не виконується, то виникає особлива ситуація: порушення загального захисту.

  1. Команди синхронізації.

Команда зупинки 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), а також в програмних циклах затримки. Наприклад, якщо транслятор не може визначити заздалегідь довжину команди, то він резервує для неї максимально можливу кількість байтів, а після уточнення довжини заповнює лишні байти як описано вище.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]