Причины высокого уровня
Когда вы думаете об этом, микропроцессор делает удивительную вещь: он позволяет вам взять машину (например, стиральную машину или лифт) и заменить целый кусок специально разработанных механизмов или цепей на дешевый, производимый массово кремний чип. Вы экономите много денег на деталях и много времени на дизайне.
Но подождите, стандартный чип, заменяющий бесчисленное множество нестандартных конструкций? Не может быть одного идеального микропроцессора, который идеально подходил бы для любого применения. Некоторые приложения должны минимизировать энергопотребление, но не должны быть быстрыми; другие должны быть быстрыми, но не должны легко программироваться, другие должны быть дешевыми и т. д.
Итак, у нас есть много разных «ароматов» микропроцессора, каждый из которых имеет свои сильные и слабые стороны. Всем им желательно использовать совместимый набор инструкций, поскольку это позволяет повторно использовать код и облегчает поиск людей с нужными навыками. Тем не менее, набор команд делает влияет на стоимость, сложность, скорость, простоту в использовании, а также физические ограничения процессора, и поэтому у нас есть компромисс: есть несколько «основных» наборы команд (и многие незначительные), и в каждом наборе команд есть много процессоров с различными характеристиками.
Да, и по мере того, как технология меняется, все эти компромиссы меняются, поэтому наборы инструкций развиваются, появляются новые и умирают старые. Даже если бы был «лучший» набор инструкций сегодня, это может быть не через 20 лет.
Детали оборудования
Вероятно, самое большое дизайнерское решение в наборе команд - это размер слова , т. Е. Насколько велико число, которым процессор может «естественным образом» манипулировать. 8-разрядные процессоры работают с числами от 0 до 255, тогда как 32-разрядные процессоры работают с числами от 0 до 4 294 967 295. Код, разработанный для одного, должен быть полностью переосмыслен для другого.
Это не просто перевод инструкций из одного набора инструкций в другой. Совершенно другой подход может быть предпочтительным в другом наборе команд. Например, на 8-битном процессоре справочная таблица может быть идеальной, тогда как на 32-битном процессоре арифметическая операция была бы лучше для той же цели.
Есть и другие важные различия между наборами команд. Большинство инструкций делятся на четыре категории:
- Вычисления (Арифметика и логика)
- Контроль потока
- Обмен данными
- Конфигурация процессора
Процессоры различаются по типу вычислений, которые они могут выполнять, а также по тому, как они приближаются к потоку управления, передаче данных и конфигурации процессора.
Например, некоторые процессоры AVR не могут ни умножать, ни делить; тогда как все процессоры x86 могут. Как вы можете себе представить, устранение схем, необходимых для таких задач, как умножение и деление, может сделать процессор проще и дешевле; эти операции все еще могут быть выполнены с использованием программных подпрограмм, если они необходимы.
x86 позволяет арифметическим инструкциям загружать свои операнды из памяти и / или сохранять свои результаты в памяти; ARM - это архитектура хранилища нагрузки, поэтому в ней есть только несколько специальных инструкций для доступа к памяти. Между тем, x86 имеет специальные инструкции условного перехода, а ARM позволяет выполнять практически все инструкции условно. Кроме того, ARM позволяет выполнять сдвиги битов как часть большинства арифметических инструкций. Эти различия приводят к различным характеристикам производительности, различиям во внутреннем дизайне и стоимости микросхем, а также различиям в методах программирования на уровне ассемблера.
Вывод
Причина, по которой невозможно создать универсальный язык ассемблера, заключается в том, что для правильного преобразования ассемблерного кода из одного набора команд в другой необходимо заново разрабатывать код - что-то, чего еще не могут сделать компьютеры.