Як процесор "знає", що означають різні команди?
Я думаю про команди рівня складання, такі як MOV, PUSH, CALL тощо.
Як процесор "знає", що означають різні команди?
Я думаю про команди рівня складання, такі як MOV, PUSH, CALL тощо.
Відповіді:
Коли комп'ютер інтерпретує вказівки рівня складання , ці інструкції перетворюються на їх бінарні еквіваленти для читання процесора. Коли ЦП виконує вказівки, він інтерпретує частину інструкції коду в окремі "мікропрограми", що містять їх еквіваленти мікрокоду . Так, як ви знаєте, повна інструкція про збірку складається з коду опкоду та будь-яких застосованих даних, що додаються до нього, якщо це потрібно (наприклад, імена регістрів, адреси пам'яті).
Інструкції з мікрокоду є надзвичайно низьким рівнем (більше того, ніж збірка) та керують фактичними цифровими сигналами, які керують потоком логіки в мікропроцесорі. Наприклад, одна інструкція мікрокодування може оновити прапор регістра коду стану на нове значення або з'єднати регістр CPU з одним із блоків ALU . Можливіші складніші завдання, але це показує вам загальне уявлення про те, для чого використовується мікрокод.
Загальний потік від компіляції до виконання такий. Інструкції по збірці збираються (перетворюються на їх бінарні еквіваленти 0s і 1s, або відтепер логічні сигнали). Ці логічні сигнали по черзі інтерпретуються процесором і перетворюються на більш низькі рівні логічних сигналів, які спрямовують потік процесора на виконання певної інструкції. Це може зайняти один або декілька тактових циклів, залежно від архітектури та дизайну процесора (більшість посилань на процесор посилаються на те, скільки тактових циклів потрібно для виконання певної інструкції, наприклад , як ця, наприклад ).
Все це робиться за допомогою жорстко запрограмованого мікрокоду (фізично вбудованого в процесор у якомусь ПЗУ , встановленому під час виготовлення), який спрямовує потік через фактичні логічні ворота низького рівня . Це забезпечує інтерфейс між абстрактними інструкціями щодо складання та фізичною електричною логікою процесора.
Отже, підсумовуючи, інструкції процесора збираються та завантажуються процесором. Потім процесор використовуватиме ці інструкції для пошуку мікропрограми (у вигляді мікрокоду), що відповідає цій конкретній інструкції, яка саме "фактично" виконує інструкцію. Після того, як мікрокоди для певної інструкції виконані (що може зайняти один або більше тактових циклів), процесор виконує мікрокод для отримання наступної інструкції, і цикл повторюється.
Процесор насправді не «знає», що таке команди. Команди - це лише бінарні шаблони, які змушують процесор робити те, що ми розуміємо, що команди означають.
Наприклад, операція ADD-R1-в-R2 призведе до того, що значення регістрів 1 і 2 досягають ALU (арифметичної та логічної одиниці), змушують ALU використовувати висновок суматора замість різних інших матеріалів і спричиняти вихід ALU для заміни значення в регістрі 2. Існують прості логічні схеми для досягнення всіх цих речей ( мультиплексор , суматор , лічильник , ...), хоча реальні процесори використовують дуже складні оптимізації.
Це як би ви запитуєте, як машина знає гальмувати, коли натискаєте на гальма. Автомобіль не знає, педаль гальма просто відбувається, щоб побічно контролювати, як жорсткі колодки притискаються до коліс.
Візьмемо, наприклад, інструкцію, яка повідомляє процесору 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
перетворюються на числа, які ЦП асоціює особливе значення, а потім діє відповідно.
Пропоноване читання:
Ознайомтеся також із курсовими записками CS152: Архітектура та інженерія комп’ютерів в УК Берклі, курс, в якому студенти реалізують процесор.
Якщо ви будете google для "домашнього процесора", ви знайдете багато смакоти.
На крайньому найнижчому рівні все, що може зробити процесор, - це додати. Крім того, він може віднімати, множувати та ділити (бачачи, що це лише додавання по-іншому). ЦП використовує це для переміщення даних у пам'яті, застосовуючи доповнення до адрес пам'яті.
Майте на увазі, що це найнижчий рівень. Процесор насправді "розуміє" певні команди у вигляді мікрокоду. Дивіться відповідь прориву, це дуже добре написано.
Я дав відповідну відповідь на programmers.stackexchange.com, див. Як працюють комп'ютери? де я коротко переглянув все з нуля про те, як комп’ютери перекладають інтерпретацію інструкцій до переміщення електронів.