Введение
Набор абстрактных символов, описывающих операции компьютерной программы для процессора. В информатике архитектура набора команд (ISA) — это абстрактная модель, которая обычно определяет, как программное обеспечение управляет центральным процессором (ЦП) в компьютере или семействе компьютеров. Устройство или программа, выполняющие инструкции, описанные данной ISA, такие как центральный процессор (ЦП), называются реализацией этой ISA. Как правило, ISA определяет поддерживаемые инструкции, типы данных, регистры, аппаратную поддержку для управления основной памятью, базовые функции (такие как консистентность памяти, режимы адресации, виртуальная память) и модель ввода-вывода реализаций ISA. ISA определяет поведение машинного кода, выполняемого на реализациях этой ISA, независимо от характеристик конкретной реализации, обеспечивая двоичную совместимость между реализациями. Это позволяет создавать несколько реализаций ISA, различающихся по характеристикам, таким как производительность, физический размер и стоимость (в частности), но способных выполнять один и тот же машинный код. Таким образом, машину с более низкой производительностью и стоимостью можно заменить машиной с более высокой производительностью и стоимостью без необходимости замены программного обеспечения. Это также позволяет развивать микроархитектуру реализаций ISA, чтобы новая, более производительная реализация ISA могла выполнять программное обеспечение, работающее на предыдущих поколениях реализаций. Если операционная система поддерживает стандартный и совместимый двоичный интерфейс приложений (ABI) для конкретной ISA, машинный код будет работать на будущих реализациях этой ISA и операционной системы. Однако, если ISA поддерживает работу нескольких операционных систем, это не гарантирует, что машинный код для одной операционной системы будет работать на другой, если первая операционная система не поддерживает выполнение машинного кода, созданного для другой операционной системы. ISA может быть расширена путем добавления инструкций или других возможностей, а также поддержки больших адресов и значений данных; реализация расширенной ISA по-прежнему сможет выполнять машинный код для версий ISA без этих расширений. Машинный код, использующий эти расширения, будет работать только на реализациях, поддерживающих эти расширения. Двоичная совместимость, которую они обеспечивают, делает ISA одной из самых фундаментальных абстракций в вычислительной технике.
In computer science, an instruction set architecture (ISA) is an abstract model that generally defines how software controls the CPU in a computer or a family of computers. A device or program that executes instructions described by that ISA, such as a central processing unit (CPU), is called an implementation of that ISA. In general, an ISA defines the supported instructions, data types, registers, the hardware support for managing main memory, fundamental features (such as the memory consistency, addressing modes, virtual memory), and the input/output model of implementations of the ISA. An ISA specifies the behavior of machine code running on implementations of that ISA in a fashion that does not depend on the characteristics of that implementation, providing binary compatibility between implementations. This enables multiple implementations of an ISA that differ in characteristics such as performance, physical size, and monetary cost (among other things), but that are capable of running the same machine code, so that a lower performance, lower cost machine can be replaced with a higher cost, higher performance machine without having to replace software. It also enables the evolution of the microarchitectures of the implementations of that ISA, so that a newer, higher performance implementation of an ISA can run software that runs on previous generations of implementations. If an operating system maintains a standard and compatible application binary interface (ABI) for a particular ISA, machine code will run on future implementations of that ISA and operating system. However, if an ISA supports running multiple operating systems, it does not guarantee that machine code for one operating system will run on another operating system, unless the first operating system supports running machine code built for the other operating system. An ISA can be extended by adding instructions or other capabilities, or adding support for larger addresses and data values; an implementation of the extended ISA will still be able to execute machine code for versions of the ISA without those extensions. Machine code using those extensions will only run on implementations that support those extensions. The binary compatibility that they provide makes ISAs one of the most fundamental abstractions in computing.
Обзор
Архитектура набора инструкций отличается от микроархитектуры, которая представляет собой совокупность методов проектирования процессора, используемых в конкретном процессоре для реализации этого набора инструкций. Процессоры с различной микроархитектурой могут использовать общий набор инструкций. Например, Intel Pentium и AMD Athlon реализуют практически идентичные версии набора инструкций x86, но имеют принципиально разные внутренние конструкции. Концепция архитектуры, отличной от конструкции конкретной машины, была разработана Фредом Бруксом в IBM на этапе проектирования System/360. Некоторые виртуальные машины, использующие байт-код в качестве своей ISA, такие как Smalltalk, виртуальная машина Java и Common Language Runtime от Microsoft, реализуют это, переводя байт-код часто используемых участков кода в нативный машинный код. Кроме того, эти виртуальные машины выполняют менее часто используемые участки кода посредством интерпретации (см. JIT-компиляция). Transmeta реализовала набор инструкций x86 на базе VLIW-процессоров подобным образом.
Классификация ИСО
ISA может быть классифицирована несколькими различными способами. Распространенная классификация – по архитектурной сложности. Компьютер с расширенным набором команд (CISC) имеет множество специализированных инструкций, некоторые из которых могут использоваться редко в реальных программах. Компьютер с упрощенным набором команд (RISC) упрощает процессор, эффективно реализуя только те инструкции, которые часто используются в программах, в то время как менее распространенные операции реализуются в виде подпрограмм, а увеличение времени выполнения процессора, вызванное этим, компенсируется их нечастым использованием. К другим типам относятся архитектуры с очень длинными командами (VLIW) и тесно связанные с ними архитектуры явно параллельных вычислений (EPIC). Эти архитектуры стремятся использовать параллелизм на уровне команд, требуя меньше аппаратных ресурсов, чем RISC и CISC, перекладывая ответственность за выдачу и планирование инструкций на компилятор. Исследовались архитектуры с еще меньшей сложностью, такие как компьютер с минимальным набором команд (MISC) и компьютер с единственным набором команд (OISC). Эти типы важны с теоретической точки зрения, но не получили коммерческого распространения.
Обработка данных и операции памяти
Настройте регистр на фиксированное постоянное значение. Копирование данных из места в памяти или регистра в место в памяти или регистр (машинная инструкция часто называется операцией перемещения, однако этот термин может ввести в заблуждение). Они используются для сохранения содержимого регистра, содержимого другого места в памяти или результата вычисления, а также для извлечения сохраненных данных для последующих вычислений. Такие операции часто называют операциями загрузки и сохранения. Чтение и запись данных с аппаратных устройств.
Арифметические и логические операции
Сложение, вычитание, умножение или деление значений двух регистров, помещение результата в регистр и, возможно, установка одного или нескольких кодов состояния в регистр состояния. В некоторых ISA сохраняется операция выборки операнда в простых случаях. Выполняются побитовые операции, например, логическое И и ИЛИ соответствующих битов в паре регистров, а также инвертирование каждого бита в регистре. Сравнение двух значений в регистрах (например, для определения, какое из них меньше или равны ли они). Также выполняются арифметические операции над числами с плавающей точкой.
Операции по контролю потока
Перейти к другому месту в программе и выполнить инструкции там. Условно перейти к другому месту, если выполняется определенное условие. Перейти по косвенному адресу. Вызвать другой блок кода, сохраняя адрес следующей инструкции для возврата.
Инструкции копроцессора
Загрузка и хранение данных в сопроцессор и обмен данными с регистрами ЦП. Выполнение операций сопроцессора.
Кодирование инструкции
В традиционных архитектурах инструкция включает в себя опкод, который определяет выполняемую операцию, например, сложение содержимого памяти с регистром, – и ноль или более спецификаторов операндов, которые могут указывать регистры, ячейки памяти или непосредственные данные. Спецификаторы операндов могут иметь режимы адресации, определяющие их смысл, или располагаться в фиксированных полях. В архитектурах с очень длинными инструкциями (VLIW), включающих множество архитектур микрокода, в одной инструкции указывается несколько одновременных опкодов и операндов. Некоторые экзотические наборы инструкций не имеют поля опкода, например, архитектуры с триггерной передачей (ТТА), и содержат только операнд(ы). Большинство стековых машин имеют наборы инструкций "без операндов", в которых арифметические и логические операции не имеют полей спецификаторов операндов; спецификаторы операндов присутствуют только в инструкциях, помещающих операнды на стек вычислений или извлекающих операнды из стека в переменные. Набор инструкций выполняет большинство операций АЛУ с использованием операций постфиксной (обратной польской) нотации, которые работают только со стеком выражений, а не с регистрами данных или произвольными ячейками основной памяти. Это может быть очень удобно при компиляции языков высокого уровня, поскольку большинство арифметических выражений легко преобразуются в постфиксную нотацию. Условные инструкции часто имеют поле предиката – несколько битов, кодирующих конкретное условие, определяющее, выполнять операцию или нет. Например, инструкция условного перехода передаст управление, если условие истинно, и выполнение продолжится в другой части программы, а если условие ложно, то управление не будет передано, и выполнение продолжится последовательно. Некоторые наборы инструкций также имеют условные перемещения, при которых перемещение будет выполнено, и данные будут сохранены в целевой ячейке, если условие истинно, и не будут выполнены, а целевая ячейка останется неизменной, если условие ложно. Аналогично, в архитектуре IBM z/Architecture существует условная инструкция сохранения. В некоторых наборах инструкций поле предиката включено в каждую инструкцию; это называется предикацией переходов.
Представительство
Инструкции, составляющие программу, редко задаются в их внутренней числовой форме (машинном коде); они могут быть указаны программистами с помощью языка ассемблера или, что более распространено, генерируются из языков программирования высокого уровня компиляторами.
Дизайн
Конструирование наборов команд – сложная задача. В истории микропроцессоров можно выделить два этапа. Первым был CISC (Complex Instruction Set Computer), характеризующийся большим количеством различных команд. Однако в 1970-х годах такие компании, как IBM, провели исследования и выяснили, что многие команды в наборе можно исключить. Результатом стал RISC (Reduced Instruction Set Computer) – архитектура, использующая более компактный набор команд. Упрощенный набор команд может обеспечить потенциал для повышения скорости, уменьшения размера процессора и снижения энергопотребления. В то же время, более сложный набор команд может оптимизировать часто выполняемые операции, повысить эффективность использования памяти и кэша или упростить программирование. Некоторые разработчики наборов команд резервируют один или несколько кодов операций (опкодов) для системных вызовов или программных прерываний. Например, MOS Technology 6502 использует 00H, Zilog Z80 – восемь кодов C7, CF, D7, DF, E7, EF, F7, FFH, а Motorola 68000 – коды в диапазоне A000–AFFFH. Быстрые виртуальные машины гораздо проще реализовать, если набор команд соответствует требованиям виртуализации Попека и Голдберга. Метод NOP-слайда, используемый в программировании с учетом уязвимостей, гораздо легче реализовать, если "незапрограммированное" состояние памяти интерпретируется как NOP. В системах с несколькими процессорами неблокирующие алгоритмы синхронизации гораздо проще реализовать, если набор команд включает поддержку таких операций, как "fetch and add", "load link/store conditional" (LL/SC) или "atomic compare and swap".