Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Туроператоры по подростковому и молодежному отдыху | Мягкая кровля
 

Формати команд машинної мови

Команда центрального процесора складається з коди операції і одного або декількох операндів (об'єктів, над якими здійснюється операція). Залежно від числа операндів, команди діляться на безадресні (що не мають операндів або що мають неявно вказані) одноадресні (що проводять операцію над одним об'єктом або одним явно і одним або декількома неявно вказаними) двух- і триадресні. Зустрічається архітектура, в якій є команди і з великим числом операндів, але це екзотика.
Приклади безадресних команд без операнда.

  • NOP
  • No Operation, відсутність операції.
  • HALT
  • Зупинка процесора

Приклади безадресних команд з неявно вказаними операндами

  • RETURN
  • Повернення з підпрограми. Виштовхує із стека адресу повернення і поміщає її в лічильник команд.
  • WDR
  • Watchdog Reset, скидання сторожового таймера мікроконтроллера.
  • ADD
  • Виштовхнути із стека два значення, скласти їх і проштовхнути результат в стек.
  • scs
  • Skip if Carry Set, пропустити наступну команду, якщо біт перенесення в слові достатку встановлений.

Приклади одноадресних команд з одним операндом

  • INC x
  • Increment, додати до операнда 1 і зберегти результат за тією ж адресою.
  • TST х TEST,
  • встановити в слові достатку прапори знаку і рівності нулю відповідно до значення операнда.

Приклади одноадресних команд з неявним операндом.

  • ADD x [, Асс]
  • Скласти операнд з акумулятором і зберегти результат в акумуляторі.
  • PUSH х
  • Проштовхнути значення операнда в стек.
  • CALL x
  • Виклик підпрограми, зберігає адресу наступної команди в стеку і передає управління за вказаною адресою.
  • BNEQ х
  • Передає управління за вказаною адресою, якщо в слові достатку встановлений прапор рівності нулю.

Приклади двух- і триадресних команд.

  • MOVE x, в

Привласнити значення об'єкту х об'єкту в.

  • ADD x, в

Скласти х і в, помістити результат.

  • ADD x, в, z

Скласти х і в і помістити результат в z.
Чотириадресна команда:

DIV х, в, z, w

виконує ділення х на в поміщає приватне в z а залишок — в w. Шестиадресна команда:

INDEX b, I, h, s, i, а

обчислює адресу елементу масиву, розташованого за адресою b з нижнім і верхнім кордонами індексу I і b відповідно і розміром елементу s.
Операнд i — індекс елементу а — місце, куди слід помістити обчислену адресу.
Кількість адрес інколи використовують і для спільної характеристики системи команд. Двоадресною називають систему команд, в якої команди мають максимум два операнди, триадресною -- максимум три. Нерідко, втім, замість максимальної кількості операндів, адресність системи команд визначають по кількості операндів в найбільш "ходових" команд — складання і віднімання. Таким чином, VAX, з системи команд якого узяті приклади четирех- і шестиадресних команд, часто відносять до триадресної архітектури.
Одноадресні системи команд зазвичай використовують як неявно заданий операнд виділений регістр, так званий акумулятор або стік. Така архітектура називає, відповідно акумуляторними і стековими.
Одноадресну акумуляторну архітектуру мають мікроконтроллери сімейства PIC фірми Microchip. Більшість сучасних процесорів мають двух- і триадресні системи команд.
На прикладі стекової команди ADD ми бачили, що багато хто з команд стекової архітектури може обійтися взагалі без явно вказаних операндів, проте команди проштовхування значень змінних в стек і виштовхування їх звідти все-таки необхідні, тому вся стекова архітектура одно-, а не безадресні.
Стеки привабливі, по-перше, тим, що команди, що не потребують операндів, можуть мати дуже короткий код операції (як правило, досить одного байта) і, по-друге, тим, що програма, що працює з ними, є арифметичним вираженням, записаним в зворотній польській нотації, — коли ми спочатку пишемо операнди, а потім знак операції. Наприклад, операція а+ь у цьому записі виглядає як ab+ (у програмі — push а; push b; add;).
Завдання перетворення звичних нам арифметичних виразів в зворотний польський запис легко формалізується, тому стекові процесори довгий час позиціювали як "орієнтовані на мови високого рівня". Пізніше, втім, з'ясувалося, що складніша логіка розбору арифметичних виразів дозволяє проводити різного роду оптимізації (скорочувати введені лише для зручності запису змінні, замінювати вирази, які завжди дають одне і те ж значення, на константи, виносити обчислення, що повторюються, з тіла циклу і т. д.).
Апаратний реалізовані стекова архітектура — у наш час рідкість. З відносно сучасних процесорів, що мали комерційний успіх, можна назвати Transputer фірми Inmos (в даний час ці мікропроцесори випускаються фірмою Sgc-thomson).
Найширше стекова архітектура поширена в байт-кодах або, як це ще називають, системах команд віртуальних машин. Байт-код - це проміжне представлення програми, використовуване інтерпретатором, щоб уникнути лексичного і синтаксичного аналізу програми на етапі виконання. Виконання байт-кода здійснюється не процесором, а програмою-інтерпретатором. Таким чином, реалізуються багато сучасних мов програмування — багаточисельні діалекти мови BASIC, Lisp, Smalltalk, Fort (ця мова цікава тим, що сам має стековий синтаксис), нарешті Java. Деякі реалізації інтерпретаторів цих мов використовують так звану Jit-комтшяцию (Just In Time, точно в момент [виконань]), коли перед виконання байт-код компілюється в систему команд фізичного процесора. Така технологія дозволяє досягти для програм, що "інтерпретуються", продуктивності, не поступливої продуктивності коди, що компілює.
Першим промисловим вживанням JIT-компиляции була система As/400 фірми IBM. В даний час JIT широко використовується в реаті-зациях Java. JIT-компиляция приваблива тим, що дозволяє виконувати один і той же код на всіляких процесорах без втрат (або майже без втрат) швидкості.

 

:: Реклама ::

купить Цепные стропы Волгоград Транспортно-экспедиторские услуги Заказать в одессе

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017