Мікропрограмування проти програмування машинної мови


10

Я трохи заплутався між рівнем мікропрограмування та рівнем машинної мови. Наприклад:

  1. Де обидва типи програм перебувають під час виконання?
  2. Чи є в 1: 1 зіставлення в інструкціях з мовою складання правдивих інструкцій?
  3. Чи визначається формат або архітектурою процесора?

4
Якщо ви ще цього не прочитали, перегляньте статтю [Wikipedia] [1]; це досить чудово. [1]: en.wikipedia.org/wiki/Microcode
Шон Дж. Гофф

5
Мікрокод - це, мабуть, не те, про що ви говорите. Якщо ви не розробляєте свій власний процесор, вас, мабуть, не цікавить мікрокод. Можливо, ви плутаєте "мікро" в "мікрокодері" з "мікроконтролером", але це не те саме.
davr

1
Ні, я беру про мікрокод. Я вивчаю внутрішні процесори і намагаюся зрозуміти найнижчі шари, як мікрокод.

Відповіді:


7

Мікрокод - це ще один рівень абстракції, що перевищує машинний код. Фактичний процесор працює з мікрокодом, і механізм перекладу перетворює машинний код у мікрокод. Це робиться з різних причин, включаючи більш швидкі, менші процесори, простіше створити складний процесор з меншою налагодженням і зворотну сумісність. Наприклад, набір інструкцій x86 містить деякі інструкції по обробці рядків, які рідко використовуються. Однак, щоб залишатися сумісними назад, вони все ще повинні бути доступні в сучасних процесорах x86. Замість того, щоб прокласти шлях виконання цих інструкцій, вони перетворюються в мікрокод і виконуються. Це економить кремній, залишаючись сумісними назад.

Де обидва типи програм перебувають під час виконання?

Машинний код знаходиться в кеші (після витягування з ОЗУ). Мікрокод знаходиться в кеші мікрокоду, залежно від конкретної архітектури машини. Кеш може бути достатньо великим, щоб вмістити достатньо мікрокоду, щоб утримати перетворений мікрокод з найбільшої можливої ​​інструкції машинного коду, або це може бути більший кеш, який зберігає перетворені результати багатьох машинних кодів, щоб не потрібно було відновити всі машинний код на кожній ітерації для невеликих циклів.

У деяких архітектурах перетворений мікрокод ніде не зберігається - пристрій для отримання / перекладу просто випилює ряд інструкцій з мікрокодування на основі поточного виконуваного машинного коду. У цьому випадку мікрокод виконується з якихось ПЗУ, а машинний код є, по суті, індексом в ПЗУ - вказуючи на ряд інструкцій з мікрокоду, які необхідно виконати для повного виконання інструкції машинного коду.

Чи є в 1: 1 зіставлення в інструкціях з мовою складання правдивих інструкцій?

Код машини та код складання, як правило , 1: 1 відображаються до інструкцій по збірці. Це залежить від асемблера. Асемблери високого рівня можуть мати великий набір макросів, які дозволяють записати один рядок коду складання, і асемблер видасть кілька машинних кодів.

Але загалом "чисту" мову складання можна перетворити безпосередньо в машинний код, використовуючи таблицю наборів інструкцій в керівництві процесора.

Я не впевнений, що ви маєте на увазі під "вказівками правдивої операції", хоча. Можливо, ви можете пояснити посилання.

Чи визначається формат або архітектурою процесора?

Формат і машинного коду, і мікрокоду визначається архітектурою процесора.


Під "true-op" я маю на увазі інструкції, які НЕ є синтетичними або псевдоінструкціями з мовної збірки. для другого питання я мав намір поцікавитись, чи вказують інструкції мікрокодування на мову збірки істинних інструкцій.

@Louis - Загалом не опублікований код складання, який є перекладом 1: 1 до мікрокоду. Intel та AMD (та інші) зберігають свої мікрокоди, оскільки вони дуже добре розуміють внутрішню архітектуру процесора. Я чув, що для деяких спеціалізованих цілей вони готові надати інформацію про нього, наприклад, дослідникам, щоб вони могли отримати останні 1% продуктивності з машини для певних програм, але здебільшого лише опублікованих специфікацій включає машинний код та загальний опис архітектури.
Адам Девіс

8

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

Скажімо, ви працюєте з набором інструкцій MARIE, і ви хотіли б функцію Add x, y, але архітектура дозволяє лише Додати x (який просто додає те, що зараз є в реєстрі, до x), тому ви додаєте інструкцію з мікрокоду:

LOAD x //Load x into the register
ADD y //Add y to the value in the register

Тепер, коли ваш код мови машини говорить:

ADD x,y

він шукає функцію ADD, яку ви додали до ROM (ваш мікрокод), і виконує її. Це чудово, оскільки це збільшує ваш набір інструкцій, що дозволяє більш читати машинний код, а оскільки ваш мікрокод зберігається в ПЗУ, це також трохи швидше, ніж викликати ЗАВАНТАЖЕННЯ та ДОБАВЛЕННЯ з ОЗУ.

Раніше я працював у компанії, яка фактично писала мікрокод, щоб виконувати спеціальні вимірювання з дуже високою швидкістю на своїх старих системах. Однак із досягненням FPGA вони перейшли до тих, що набагато швидше (оскільки ви фактично реалізуєте "спеціальні інструкції" в апаратному замість ROM).


як ви писали та виконували мікрокод?
Ерік Каплун

@ErikAllik Ви можете це зробити лише створивши власний комп'ютер з нуля.
користувач253751

5

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

Наприклад, інструкція з мікрокоду для 8-розрядного процесора в стані №1 може вказати, що вихідний сигнал для обох половин програмного лічильника повинен бути активним (внаслідок чого лічильник програми виводиться на верхню та нижню внутрішні шини адреси), сигнал посилення програмного лічильника повинен бути активним, сигнали засувки зовнішньої адреси повинні бути активними (таким чином зовнішня шина адреси буде відслідковувати внутрішню) і сигнал зчитування ОЗУ повинен бути активним, а контролер повинен перейти у стан №2.

У стані №2 зовнішня шина даних повинна подаватися на внутрішню первинну шину даних, а регістр інструкцій, який читає з цієї шини, повинен бути завантажений. Лічильник програм повинен, як і раніше, виводитися на обидві половини адресної шини та видавати інше RAM-зчитування. Біти 5-7 реєстру інструкцій повинні бути завантажені в біти 0-2 державного контролера, біт 3 державного реєстру повинен бути встановлений, якщо не встановлені біти 1-7 реєстру інструкцій та інші біти державного реєстру Потрібно зрозуміти, чистий результат полягає в тому, що наступним станом буде № 7- # 15.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.