Команда додавання (ADD) обчислює суму двух кодов. Команда віднімання (SUB) обчислює різницю двох кодів. Команда множення (MUL) обчислює добуток двох кодів (розрядність результата вдвічі більша розрядності співмножників). Команда ділення (DIV) обчислює частку от ділення одного коду на інший. Причому всі ці команди можуть працювати як з числами зі знаком, так і з числами без знаку.
Пошук
Система команд мікропроцесора
Предмет:
Тип роботи:
Реферат
К-сть сторінок:
11
Мова:
Українська
Команди операцій з плаваючою комою (точкой) використовують формат представлення чисел з порядком і мантисою (зазвичай ці числа займають дві послідовні комірки пам’яті). В сучасних потужних процесорах набір команд з плаваючою комою не обмежується лише чотирма арифметичними діями, а містить і багато інших більш складних команд, наприклад, обчислення тригонометричних функцій, логарифмічних функцій, а також складних функцій, необхідних при обробці звуку і зображення.
Команди очистки (CLR) призначені для запису нульового коду в регістр або комірку пам’яті. Ці команди можуть бути замінені командами пересилання нульового коду, але спеціальні команди очистки зазвичай виконуються швидше, ніж команди пересилання. Команди очистки іноді відносять до групи логічних команд, але суть їх от цього не змінюється.
Команди інкремента (збільшення на одиницю, INC) і декремента (зменшення на одиницю, DEC) також бувають дуже зручні. Їх можна в принципі замінити командами сумування з одиницею або віднімання одиниці, але інкремент і декремент виконуються швидше, ніж сумування і віднімання. Ці команди потребують одного вхідного операнда, який одночасно є і вихідним операндом.
Нарешті, команда порівняння (позначається CMP) призначена для порівняння двох вхідних операндів. По суті, вона обчислює різницю цих двох операндів, але вихідного операнда не формує, а всього лише змінює біти в регістрі стану процесора (PSW) по результату цього віднімання. Наступна за командою порівняння команда (зазвичай це команда переходу) буде аналізувати біти в регістрі стану процесора і виконувати дії в залежності від їх. В деяких процесорах передбачені команди ланцюгового порівняння двох послідовностей операндів, що знаходяться в пам’яті (наприклад, в процесорі 8086 і сумісних з ним).
3. Логічні команди
Логічні команди виконують над операндами логічні (побітіві) операції, тобто вони розглядають коди операндів не як єдине число, а як набір окремих бітів. Цим вони відрізняються від арифметических команд. Логічні команди виконують наступні основні операції:
логічне І, логічне АБО, додавання по модулю 2 (виключаюче АБО) ;
логічні, арифметичні і циклічні зсуви;
перевірка бітів і операндів;
установка і очистка бітів (прапорців) регістра стану процесора (PSW).
Команди логічних операцій дозволяють побітно обчислювати основні логічні функції від двох вхідних операндів. Крім того, операція І (AND) використовується для примусової очистки заданих бітів (в якості одного із операндів при цьому використовується код маски, в якому розряди, що потребують очистки, встановлені в нуль). Операція АБО (OR) застосовується для примусової установки заданих бітів (як один із операндів при цьому використовується код маски, в якому розряди, що потребують установки в одиницю, рівні одиниці). Операція «Виключаюче АБО» (XOR) використовується для інверсії заданих бітів (як один із операндів при цьому застосовується код маски, в якому біти, що підлягають інверсії, встановлені в одиницю). Команди потребують двох вхідних операндів і формують один вихідний операнд.
Команди зсувів дозволяють побітно зміщувати код операнда вправо (в сторону молодших розрядів) або вліво (в сторону старших розрядів). Тип зміщення (логічний, арифметичний або циклічний) визначає, яким буде нове значення старшого біта (при зміщенні вправо) або молодшого біта (при зміщенні вліво), а також визначає, чи буде десь збережене попереднє значення старшого біта (при зміщенні вліво) або молодшого біта (при зміщенні вправо). Наприклад, при логічному зміщенні вправо в старшому розряді коду операнда встановлюється нуль, а молодший розряд записується як прапорець переносу в регістр стану процесора. А при арифметному зміщенні вправо значення старшого розряду зберігається попереднім (нулем або одиницею), молодший розряд також записується як прапорець переноса.
Циклічні зміщення дозволяють зміщувати біти коду операнда по колуу (за стрілкою годинника при зміщенні вправо або против стрілки при зміщенні вліво). При цьому в кільце зміщення може входити або не входити прапорець переносу. В біт прапорця переносу (якщо він використовується) записується значення старшого біта при циклічному зміщенні вліво і молодшого біта при циклічному зміщенні вправо. Відповідно, значення біта прапорця переносу буде переписуватися в молодший розряд при циклічному зміщенні вліво і в старший розряд при циклічному зміщенні вправо.
На рис. 1 показані дії, що виконуються командами зміщень вправо.
Команди перевірки бітів і операндів призначені для установки або очистки бітів регістра стану процесора в залежності від значення вибраних бітів або всього операнда в цілому. Вихідного операнда команди не формують. Команда перевірки операнда (TST) перевіряє весь код операнда в цілому на рівність нулю і на знак (на значення старшого біта), вона вимагає лише одного вхідного операнда. Команда перевірки біта (BIT) перевіряє лише окремі біти, для вибору яких в якості другого операнда використовується код маски. В коді маски бітам основного операнда, що перевіряються, повинні відповідати одиничні розряди.
Рис. 1. Команди зміщень вправо
Нарешті, команди установки і очистки бітів регістра стану процесора (тобто прапорців) дозволяють установити або очистити будь-який прапорець, що буває дуже зручно. Кожному прапорцю зазвичай відповідають дві команди, одна з яких встановлює його в одиницю, а інша скидає в нуль. Наприклад, прапорцю переносу C (від Carry) будуть відповідати команди CLC (очистка) і SEC або STC (установка).
4. Команди переходів
Команди переходів призначені для організації можливих циклів, розгалужень, викликів підпрограм і т. д., тобто вони порушують послідовний хід виконання програми. Ці команди записують в регістр-лічильник команд нове значення і тим самим викликають перехід процесора не до наступної по порядку команди, а до будь-якої іншої команди в пам’яті програми. Деякі команди переходів передбачають в подальшому повернення назад, в точку, з якої був зроблений перехід, інші не передбачають цього. Якщо повернення передбачене, то поточні параметри процесора зберігаються в стеку. Якщо повернення не передбачене, то поточні параметри процесора не зберігаються.
Команди переходів без повернення діляться на дві групи:
команди безумовних переходів;
команди умовних переходів.
В позначеннях цих команд використовуються слова Branch (розгалуження) і Jump (стрибок).
Команди безумовних переходів викликають перехід на нову адресу незалежно ні від чого. Вони можуть викликати перехід на вказану величину зміщення (вперед або назад) або ж на вказану адресу пам’яті. Величина зсуву або нове значення адреси вказуються в якості вхідного операнда.
Команди умовних переходів викликають перехід не завжди, а лише при виконанні заданих умов. Такими умовами зазвичай виступають значення прапорців у регістрі стану процесора (PSW). Тобто умовою переходу є результат попередньої операції, що змінює значення прапорців. Всього таких умов переходу може бути від 4 до 16. Декілька прикладів команд умовних переходів:
перехід, якщо дорівнює нулю;
перехід, якщо не дорівнює нулю;
перехід, якщо є переповнення;
перехід, якщо немає переповнення;
перехід, якщо більше нуля;
перехід, якщо менше або дорівнює нулю.
Якщо умова переходу виконується, то відбувається завантаження в регістр-лічильник команд нового значення. Якщо ж умова переходу не виконується, лічильник команд просто нарощується і процесор вибирає і виконує наступну по порядку команду.
Спеціально для перевірки умов переходу застосовується команда порівняння (CMP), передуюча команді умовного переходу (або навіть декільком командам умовних переходів). Але прапорці можуть встановлюватися і будь-якою іншою командою, наприклад командою пересилання даних, будь-якою арифметичною або логічною командою. Відзначимо, що самі команди переходів прапорці не змінюють, що якраз і дозволяє ставити декілька команд переходів одну за іншою.
Спільне використання декількох команд умовних і безумовних переходів дозволяє процесору виконувати розгалужені алгоритми будь-якої складності. Для прикладу на рис. 2 показано розгалуження програми на дві вітки з подальшим з'єднанням, а на рис. 3 – розгалуження на три вітки з подальшим з'єднанням.
Команди переходів з подальшим поверненням в точку з якої був проведений перехід, застосовуються для виконання підпрограм, тобто допоміжних програм. Ці команди називаються також командами виклику підпрограм (поширена назва – CALL). Використання підпрограм дозволяє спростити структуру основної програми, зробити її більш логічною, гнучкою, легкою для написання і відладки. У той же час потрібно враховувати, що широке використання підпрограм, як правило, збільшує час виконання програми.
Рис. 2. Реалізація розгалуження на дві вітки
Рис. 3. Реалізація розгалуження на три вітки
Всі команди переходів з поверненням передбачають безумовний перехід (вони не перевіряють ніяких прапорів). При цьому вони потребують одного вхідного операнда, який може вказувати як абсолютне значення нової адреси, так і зсув, що додається до поточного значення адреси. Поточне значення лічильника команд (поточна адреса) зберігається перед виконанням переходу в стеку.
Для зворотного повернення в точку виклику підпрограми (точку переходу) використовується спеціальна команда повернення (RET або RTS). Ця команда витягує із стека значення адреси команди переходу і записує його в регістр-лічильник команд.
Особливе місце серед команд переходу з поверненням займають команди переривань (поширена назва – INT). Ці команди в якості вхідного операнда потребують номер переривання (адреси вектора). Обслуговування таких переходів здійснюється точно так же, як і апаратних переривань. Тобто для виконання даного переходу процесор звертається до таблиці векторів переривань і отримує із неї за номером переривання адресу пам’яті, в яку йому необхідно перейти. Адреси виклику переривання і вміст регістра стану процесора (PSW) зберігаються в стеку. Збереження PSW – важлива відмінність команд переривання від команд переходів з поверненням.
Команди переривань в багатьох випадках виявляються зручнішими, ніж звичайні команди переходів з поверненням. Сформувати таблицю векторів переривань можна один раз, а потім вже звертатися до неї по мірі необхідності. Номер переривання відповідає номеру підпрограми, тобто номеру функції, що виконується підпрограмою. Тому команди переривання набагато частіше включаються в системи команд процесорів, ніж звичайні команди переходів з поверненням.
Для повернення із підпрограми, викликаної командою переривання, використовується команда повернення із переривання (IRET або RTI). Ця команда витягує із стека збережене там значення лічильника команд і регістра стану процесора (PSW).
Відзначимо, що в деяких процесорів передбачені також команди умовних переривань, наприклад, команда переривання при переповненні.
У конкретних процесорів можуть бути багато інших команд, що не відносяться до перерахованих груп команд. Але вивчати їх потрібно вже після того, як вибраний тип процесора, що підходить для задачі, яка розв’язується даною мікропроцесорною системою.