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

26. Команди переривань і повернення з переривань

Коротко охарактеризуємо команди переривань мікропроцесора i486+. Є три команди, які відносяться до команд переривань: int n, into та iret. Двобайтова int n спочатку записує в стек вміст регістра прапорців flags/eflags і повну адресу повернення вміст регістрів cs та ip/eip. Крім того, прапорці if (як правило) і tf установлюються рівними нулеві. Після цього непрямий перехід через елемент з номером n дескрипторної таблиці переривань IDT. У залежності від типу цього елемента процесор може ініціювати досить складні дії.

Однобайтовий варіант команди int 3 називається перериванням контрольної точки або контрольної зупинки і часто використовується в програмах налагодження.

Команда переривання при переповненні into еквівалентна команді int 4, якщо прапорець переповнення of=1. Якщо of=0, то команда into не виконує ніяких дій.

Команда повернення з переривань iret вибирає зі стека збережені там адресу повернення і регістр flags/eflags. Нагадаємо, що при виборі зі стеку вмісту регістра flags/eflags біти рівня привілеїв введення/виведення iopl та деякі розглянуті раніше значення прапорців модифікуються тільки в тому випадку, коли поточний рівень привілеїв cpl=0. Ця ж команда iret забезпечує повернення зі вкладеної задачі.

27-29. Ланцюжкові команди

  1. Загальні поняття.

Ланцюжок – це набір контекстно пов’язаних елементів, які розміщуються в суміжних комірках пам’яті. Елементом ланцюжка може бути байт, слово або подвійне слово.

В системі команд i486+ є п’ять команд, які використовуються для обробки одного елемента ланцюжка і автоматичного просування на наступний елемент. Таким командам може передувати префікс повторення, який зумовлює повторну дію команди над наступним елементом. Дякуючи префіксові повторення, ланцюжки обробляються значно швидше, ніж при організації програмних циклів. Повторення розраховано на максимальну довжину ланцюжка (до 4 Гіга байтів) і може завершуватися за декількома умовами.

В командах може бути або ланцюжок-джерело src, або ланцюжок-приймач dst, або обидва разом. Вважається, що src знаходиться в поточному сегменті даних, адресованому регістром ds, але допускається префікс заміни сегмента. Ланцюжок dst може знаходитися тільки в додатковому сегменті даних, який адресується тільки регістром es, префікс заміни сегмента не дозволяється.

Відзначаємо особливість: в асемблерних програмах для наглядності дозволяється вказувати операнди ланцюжкових команд, але транслятор (і процесор) не використовують їх для адресації ланцюжків. Замість цього вважається, що вміст індексного регістра si/esi є зміщенням поточного елемента ланцюжка-джерела src, а вміст індексного регістра di/edi є зміщенням поточного елемента приймача dst. Ці регістри потрібно відповідно ініціювати до початку виконання ланцюжкових команд, використовуючи, наприклад, команди lea, lds, les.

Операнди ланцюжкових команд можуть бути використані транслятором для того, щоб визначити довжину елемента ланцюжка, якщо це не визначено мнемонікою відповідної ланцюжкової команди.

Під час виконання ланцюжкової команди вміст регістрів si/esi та di/edi автоматично модифікуються так, щоб адресувати наступні елементи ланцюжків. Прапорець напрямку обробки ланцюжка df визначає автоінкремент (df=0) або автодекремент (df=1) індексних регістрів, а величина інкремента/декремента залежить від розміру елемента і дорівнює 1,2 або 4, коли елементами ланцюжків є відповідно байти, слова або подвійні слова.

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