Команди введення/виведення ланцюжків. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Команди введення/виведення ланцюжків.



Появилися в мікропроцесорі 80286. Ці команди привілейовані. Команда ins має загальний вигляд ins dst,dx. Приймач dst визначається вмістом двох регістрів es і di/edi, значення яких потрібно визначити до виконання ланцюжкової команди введення. Роль джерела в даній команді виконує порт, номер (адреса) якого повинна знаходитися в регістрі dx. Команда вводить елемент з порта в елемент ланцюжка, змінює значення регістра-індекса di/edi в залежності від значення прапорця df, інкрементуючи або декрементуючи значення в регістрі di/edi на величину, яка визначається довжиною елемента ланцюжка (1 або 2 або 4). Природно, що прапорець df потрібно ініціювати.

Команду можна використовувати з префіксом повторення rep, лічильник в cx/ecx. Можна використовувати явні мнемоніки: insb, insw, insd.

Команда out має наступний загальний вигляд: out dx,src. Номер порта потрібно заздалегідь записати в регістр dx. Адреса ланцюжка, з якого відбуватиметься виведення в порт, визначається вмістом регістрів ds і si/esi. Команда виводить значення з елемента ланцюжка в порт, адреса якого в регістрі dx, змінює значення регістра-індекса si/esi в залежності від значення прапорця df, інкрементуючи або декрементуючи значення в регістрі si/esi на величину, яка визначається довжиною елемента ланцюжка (1 або 2 або 4). Природно, що прапорець df потрібно ініціювати.

Команду можна використовувати з префіксом повторення rep, лічильник в cx/ecx. Можна використовувати явні мнемоніки: outb, outw, outd.

Якщо швидкодії пристрою, пов’язаного з вхідним або вихідним портом, недостатньо для синхронної роботи з процесором, то швидкість даних можна зменшити за допомогою програмної затримки (циклу з певної кількості команд nop).


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

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

Системні команди

Мікропроцесор має мало системних команд. Вони виконують порівняно прості функції: завантаження системних регістрів і збереження їх вмісту. Команди завантаження як правило привілейовані, а команди збереження припустимі на всіх рівнях привілеїв. Наведемо список команд:

lgdt mem48; Завантаження регістра gdtr

sgdt mem48; Збереження регістра gdtr

lidt mem48; Завантаження регістра idtr

sidt mem48; Збереження регістра idtr

lldt reg/mem16; Завантаження регістра ldtr

sldt reg/mem16; Збереження регістра ldtr

lmsw reg/mem16; Завантаження слова стану комп’ютера (молодші 16 бітів регістра cr0)

verr reg/mem16; Перевірка сегмента на читання

smsw reg/mem16; Збереження слова стану комп’ютера

verw reg/mem16; Перевірка сегмента на записування

lar reg16/32,reg/mem16/32; Завантаження прав доступу сегмента

lsl reg16/32,reg/mem16/32; Завантаження межі сегмента

arpl reg16/mem16,reg16; Корекція рівня привілеїв

 



Поделиться:


Последнее изменение этой страницы: 2017-01-27; просмотров: 332; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.191.169 (0.009 с.)