Архитектура набора инструкций ( ISA ) — это абстрактная модель компьютера , также называемая архитектурой компьютера . Реализация ISA называется реализацией . ISA допускает несколько реализаций, которые могут различаться по производительности , физическому размеру и денежной стоимости (помимо прочего); поскольку ISA служит интерфейсом между программным обеспечением и оборудованием . Программное обеспечение, написанное для ISA, может работать на различных реализациях одного и того же ISA. Это позволило легко достичь двоичной совместимости между различными поколениями компьютеров и разработать семейства компьютеров. Оба эти развития помогли снизить стоимость компьютеров и повысить их применимость. По этим причинам ISA является одной из важнейших абстракций в вычислительной технике сегодня.
ISA определяет все, что программисту машинного языка необходимо знать для программирования компьютера. То, что определяет ISA, отличается между ISA; в целом, ISA определяют поддерживаемые типы данных , какое состояние существует (например, основная память и регистры ) и их семантику (например, согласованность памяти и режимы адресации ), набор инструкций (набор машинных инструкций , который составляет машинный язык компьютера) и модель ввода/вывода .
В первые десятилетия вычислительной техники существовали компьютеры, которые использовали двоичную , десятичную [1] и даже троичную систему исчисления . [2] [3] Современные компьютеры почти исключительно двоичные.
Символы кодируются в виде строк битов или цифр с использованием самых разных наборов символов; даже в пределах одного производителя существуют различия в наборах символов.
Целые числа кодируются с помощью различных представлений , включая знак-величину , дополнение до единицы , дополнение до двойки , смещение двоичного кода , дополнение до девятки и дополнение до десятки .
Аналогично, числа с плавающей точкой кодируются с помощью различных представлений для знака, экспоненты и мантиссы . В современных машинах шестнадцатеричные числа с плавающей точкой IBM и числа с плавающей точкой IEEE 754 в значительной степени вытеснили старые форматы.
Адреса обычно представляют собой беззнаковые целые числа, генерируемые из комбинации полей в инструкции, данных из регистров и данных из хранилища; детали различаются в зависимости от архитектуры.
Архитектуры компьютеров часто описываются как архитектуры n - бит . В первые 3⁄4 20-го века n часто равно 12 , 18 , 24 , 30, 36 , 48 или 60. В последние 1⁄3 20-го века n часто равно 8, 16 или 32, а в 21-м веке n часто равно 16, 32 или 64, но использовались и другие размеры (включая 6, 39 , 128 ) . На самом деле это упрощение, поскольку архитектура компьютера часто имеет несколько более или менее «естественных» размеров данных в наборе инструкций , но их аппаратная реализация может сильно отличаться. Многие архитектуры наборов инструкций имеют инструкции, которые в некоторых реализациях архитектуры наборов инструкций работают на половине и/или в два раза меньшем размере основных внутренних каналов данных процессора. Примерами этого являются Z80 , MC68000 и IBM System/360 . В этих типах реализаций вдвое более широкая операция обычно также занимает примерно вдвое больше тактов (чего нет в высокопроизводительных реализациях). Например, в 68000 это означает 8 вместо 4 тактов, и этот конкретный чип можно описать как 32-битную архитектуру с 16-битной реализацией. Архитектура набора инструкций IBM System/360 является 32-битной, но несколько моделей серии System/360, такие как IBM System/360 Model 30 , имеют меньшие внутренние пути данных, в то время как другие, такие как 360/195 , имеют большие внутренние пути данных. Ширина внешней шины данных не используется для определения ширины архитектуры; NS32008, NS32016 и NS32032 были в основном тем же 32-битным чипом с различными внешними шинами данных; NS32764 имел 64-битную шину и использовал 32-битный регистр. Ранние 32-битные микропроцессоры часто имели 24-битный адрес, как и процессоры System/360.
В первые 3 ⁄ 4 20-го века десятичные компьютеры, ориентированные на работу с текстом, обычно имели 10-значные [4] [5] [6] слова с отдельным знаком, используя все десять цифр в целых числах и две цифры для показателей степеней [7] [5] в числах с плавающей точкой.
Архитектура может использовать "big" или "little" порядок байтов, или оба, или быть настроенной на использование любого из них. Процессоры с прямым порядком байтов упорядочивают байты в памяти, размещая младший байт многобайтового значения в ячейке памяти с наименьшим номером. Архитектуры с обратным порядком байтов вместо этого размещают байты, размещая старший байт в адресе с наименьшим номером. Архитектура x86, а также несколько 8-битных архитектур являются архитектурами с прямым порядком байтов. Большинство архитектур RISC (SPARC, Power, PowerPC, MIPS) изначально были с прямым порядком байтов (ARM был с прямым порядком байтов), но многие (включая ARM) теперь можно настроить как те, так и другие.
Порядок байтов применяется только к процессорам, которые допускают индивидуальную адресацию единиц данных (например, байтов ), которые меньше некоторых форматов данных.
В некоторых архитектурах инструкция имеет один код операции. В других некоторые инструкции имеют код операции и один или несколько модификаторов. Например, в IBM System/370 байт 0 является кодом операции, но когда байт 0 является B2 16 , то байт 1 выбирает определенную инструкцию, например, B205 16 является тактовым импульсом хранилища (STCK).
Архитектуры обычно позволяют включать в инструкции некоторую комбинацию режимов адресации операндов.
Число операндов является одним из факторов, которые могут дать представление о производительности набора инструкций. Архитектура с тремя операндами (2-вход, 1-выход) позволит
А := В + С
быть вычисленным в одной инструкции
ДОБАВИТЬ Б, С, А
Архитектура с двумя операндами (1-вход, 1-вход и выход) позволит
А := А + Б
быть вычисленным в одной инструкции
ДОБАВИТЬ Б, А
но требует, чтобы
А := В + С
быть сделано в двух инструкциях
ХОД B, AДОБАВИТЬ С, А
Как можно увидеть в таблице ниже, некоторые наборы инструкций придерживаются очень простой фиксированной длины кодирования, а другие имеют переменную длину. Обычно это архитектуры RISC , которые имеют фиксированную длину кодирования, а архитектуры CISC , которые имеют переменную длину, но не всегда.
В таблице ниже сравнивается основная информация об архитектурах наборов инструкций.
Примечания: