Як процесор 'знає', що насправді означають команди та інструкції?


73

Як процесор "знає", що означають різні команди?

Я думаю про команди рівня складання, такі як MOV, PUSH, CALL тощо.


Це дуже інформативно, але те, що я шукаю, це те, що дозволяє CPU отримувати та відправляти команди?

Я не розумію цього коментаря. ЦП "отримує" інструкції з пам'яті, запитуючи їх за адресою. Єдиними командами, які CPU "надсилає" (як мінімум, спрощено) - це команди в пам'ять для передачі даних та команди на шинах вводу / виводу для роботи з пристроями вводу / виводу.
Даніель Р Хікс

В основі будь-якого процесора лежить певна логіка, яка (буквально) провідна для виконання простої процедури: візьміть значення з реєстру адрес інструкції, надішліть його в пам'ять, отримайте інструкцію, яку повертає пам'ять, а потім закликте її у більшій кількості складне гніздо з жорсткої провідної логіки, яке «розуміє», що означає інструкція та як її виконати. Ой, а десь там зростає реєстр адрес інструкцій.
Даніель Р Хікс

Читачів може зацікавити питання, як працює комп'ютер? на комп’ютерних науках .
Рафаель

Відповіді:


88

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

Інструкції з мікрокоду є надзвичайно низьким рівнем (більше того, ніж збірка) та керують фактичними цифровими сигналами, які керують потоком логіки в мікропроцесорі. Наприклад, одна інструкція мікрокодування може оновити прапор регістра коду стану на нове значення або з'єднати регістр CPU з одним із блоків ALU . Можливіші складніші завдання, але це показує вам загальне уявлення про те, для чого використовується мікрокод.

Загальний потік від компіляції до виконання такий. Інструкції по збірці збираються (перетворюються на їх бінарні еквіваленти 0s і 1s, або відтепер логічні сигнали). Ці логічні сигнали по черзі інтерпретуються процесором і перетворюються на більш низькі рівні логічних сигналів, які спрямовують потік процесора на виконання певної інструкції. Це може зайняти один або декілька тактових циклів, залежно від архітектури та дизайну процесора (більшість посилань на процесор посилаються на те, скільки тактових циклів потрібно для виконання певної інструкції, наприклад , як ця, наприклад ).

Все це робиться за допомогою жорстко запрограмованого мікрокоду (фізично вбудованого в процесор у якомусь ПЗУ , встановленому під час виготовлення), який спрямовує потік через фактичні логічні ворота низького рівня . Це забезпечує інтерфейс між абстрактними інструкціями щодо складання та фізичною електричною логікою процесора.


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


2
Добре, я розумію, що я думаю :) Тож командні біти перемикають "перемикачі", які змусять процесор робити певні речі з отриманими даними?
Саймон Вербеке

4
@Simon Verbeke, точно правильно. Вони просто перемикають комутатори, щоб направляти потік електричних сигналів в процесор (що також може направити його на повторне завантаження більшої кількості команд!). Аналогія комутатора хороша, оскільки все цифрове (або логічна 1/0, або істина / хибна). Просто ви знаєте, що логічний рівень - це фактична напруга. Інженер повинен визначати, що таке 0 або 1 (наприклад, логіку 1 можна вказати як більше 2 вольт).
Прорив

1
"Бінарні еквівалентні інструкції", на які компілятор чи асемблер зводить все, називаються опкодами. Якщо ви подивитеся на структуру опкоду архітектури RISC, наприклад MIPS або ARM, ви зможете побачити, як різні біти в карті опкоду до конкретних операцій. Intel через свою довговічність і схильність до того, щоб знову і знову збільшуватись, більше не має простої структури відображення.
LawrenceC

3
Ні, я говорив, що через довговічність і розширення архітектури x86 архітектура x86, відображення окремих бітів в опкодах для мікрооперацій не є чітким, як у MIPS або ARM до певної міри (див. d.umn.edu/~gshute/spimsal/talref.html , наприклад, опкоди Intel нічого подібного). Я не думаю, що було багато поняття "RISC", коли Intel представила процесори x86 в 1978 році.
LawrenceC

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

37

Процесор насправді не «знає», що таке команди. Команди - це лише бінарні шаблони, які змушують процесор робити те, що ми розуміємо, що команди означають.

Наприклад, операція ADD-R1-в-R2 призведе до того, що значення регістрів 1 і 2 досягають ALU (арифметичної та логічної одиниці), змушують ALU використовувати висновок суматора замість різних інших матеріалів і спричиняти вихід ALU для заміни значення в регістрі 2. Існують прості логічні схеми для досягнення всіх цих речей ( мультиплексор , суматор , лічильник , ...), хоча реальні процесори використовують дуже складні оптимізації.

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


5
Приємна аналогія з автомобілями, які ламають педалі.
rjmunro

10

Візьмемо, наприклад, інструкцію, яка повідомляє процесору x86 / IA-32 перенести негайне 8-бітове значення в регістр. Бінарний код цієї інструкції - 10110, за яким слід 3-розрядний ідентифікатор, для якого слід використовувати реєстр. Ідентифікатор для регістра AL становить 000, тому наступний машинний код завантажує регістр AL з даними 01100001.

10110000 01100001

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

B0 61

Тут B0 означає «Перенести копію наступного значення в AL», а 61 - це шістнадцяткове представлення значення 01100001, яке 97 у десятковій частині. Мова складання Intel надає мнемонічний MOV (абревіатура переміщення) для таких інструкцій, тому машинний код вище може бути записаний наступною мовою складання, разом із крапкою з комою. Це набагато простіше читати та запам’ятовувати.

http://en.wikipedia.org/wiki/Assembler_language

Іншими словами, коли ви "збираєте" свою програму складання, ваші інструкції, такі як

MOV AL, 61h

перетворюються на числа, які ЦП асоціює особливе значення, а потім діє відповідно.


2
Варто також зазначити, що присвоєння мнемонічного символу "mov" саме цій бітовій схемі було абсолютно довільним. Я в принципі міг написати асемблера, який назвав цю інструкцію "oof", і вона буде працювати так само добре, окрім важче запам’ятати.
dmckee

6

Пропоноване читання:

Ознайомтеся також із курсовими записками CS152: Архітектура та інженерія комп’ютерів в УК Берклі, курс, в якому студенти реалізують процесор.

Якщо ви будете google для "домашнього процесора", ви знайдете багато смакоти.


4

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

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


7
Логічні операції, такі як І, АБО та НЕ, а також бітшіфтинг є більш фундаментальними, ніж додавання. Додавання насправді може бути виражене через ці операції. Насправді існують дискретні ІМС (серія Texas Instruments LS), які не виконують нічого іншого, окрім цих операцій, і з них можна побудувати подібний процесор. Google "Pong схема", щоб побачити, як робиться гра, наприклад, без процесора.
LawrenceC

Я мав на увазі з точки зору програмного забезпечення :) Так, апаратне / логічне рішення, у вас є шалена кількість воріт NAND і NOR. Влучне зауваження.
n0pe

2

Я дав відповідну відповідь на programmers.stackexchange.com, див. Як працюють комп'ютери? де я коротко переглянув все з нуля про те, як комп’ютери перекладають інтерпретацію інструкцій до переміщення електронів.

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