Причини високого рівня
Подумавши про це, мікропроцесор робить дивовижну річ: він дозволяє взяти машину (наприклад, пральну машину чи ліфт) та замінити цілий шматок спеціально розроблених механізмів або ланцюгів на дешевий, серійний кремній чіп. Ви економите багато грошей на деталях і багато часу на дизайні.
Але вичікай, стандартний чіп, замінивши незліченну кількість нестандартних конструкцій? Не може бути жодного ідеального мікропроцесора, який ідеально підходить для кожного застосування. Деякі програми повинні мінімізувати споживання електроенергії, але не повинні бути швидкими; інші повинні бути швидкими, але не потрібно легко програмувати, інші повинні мати низьку вартість тощо.
Отже, у нас багато різних "ароматів" мікропроцесора, кожен зі своїми сильними і слабкими сторонами. Для всіх бажано використовувати сумісний набір інструкцій, оскільки це дозволяє повторно використовувати код і полегшує пошук людей з правильними навичками. Тим НЕ менше, набір команд робить впливає на вартість, складність, швидкість, простоту у використанні, а також фізичні обмеження процесора, і тому у нас є компроміс: є кілька «основних» набори команд (і багато незначні), і у кожному наборі інструкцій є багато процесорів з різними характеристиками.
О, і як змінюються технології, всі ці компроміси змінюються, тому еволюціонують набори інструкцій, з’являються нові, а старі вмирають. Навіть якби сьогодні був "найкращий" набір інструкцій, це може бути не через 20 років.
Деталі обладнання
Напевно, найбільшим дизайнерським рішенням у наборі інструкцій є розмір слова , тобто те, наскільки велике число процесор може "природно" маніпулювати. 8-бітові процесори мають числа від 0-255, тоді як 32-бітні процесори мають числа від 0 до 4 294 967 295. Код, розроблений для одного, потрібно повністю переосмислити для іншого.
Це не лише питання перекладу інструкцій з одного набору інструкцій в інший. Зовсім інший підхід може бути кращим в іншому наборі інструкцій. Наприклад, на 8-бітному процесорі таблиця пошуку може бути ідеальною, тоді як на 32-бітному процесорі арифметична операція була б кращою для тієї ж мети.
Існують і інші основні відмінності між наборами інструкцій. Більшість інструкцій поділяються на чотири категорії:
- Обчислення (арифметичні та логічні)
- Контрольний потік
- Передача даних
- Конфігурація процесора
Процесори відрізняються тим, які обчислення вони можуть виконувати, а також тим, як вони наближаються до потоку управління, передачі даних та конфігурації процесора.
Наприклад, деякі процесори AVR не можуть ні множити, ні ділити; тоді як всі процесори x86 можуть. Як ви можете уявити, усунення схеми, необхідної для таких завдань, як множення і ділення, може зробити процесор простішим і дешевшим; ці операції все ще можуть виконуватися за допомогою програмних процедур, якщо вони потрібні.
x86 дозволяє арифметичним інструкціям завантажувати свої операнди з пам'яті та / або зберігати їх результати в пам'яті; ARM - це архітектура завантаження, і, отже, є лише кілька спеціальних інструкцій для доступу до пам'яті. Тим часом x86 має спеціальні інструкції з умовними галузями, тоді як ARM дозволяє практично всі інструкції виконувати умовно. Також ARM дозволяє виконувати зсуви бітів як частина більшості арифметичних інструкцій. Ці відмінності призводять до різних характеристик продуктивності, відмінностей у внутрішньому дизайні та вартості мікросхем, та відмінності в техніках програмування на рівні мови складання.
Висновок
Причиною неможливості використання універсальної мови складання є те, що для правильного перетворення коду асемблери з одного набору інструкцій в інший, треба створювати код заново - те, що комп'ютери ще не можуть зробити.