Любой ЦП изначально проектируется для поддержки определенного набора инструкций. Набор инструкций — это набор жестко закодированных операций, которые может выполнять ЦП. Этими операциями могут быть, например, сложение двух чисел, переход к другой части программы или сравнение двух значений. Каждая операция, которую может выполнить компьютер, однозначно представлена кодом операции.
Коды операций
При выполнении программы ЦП использует программный счетчик, чтобы отслеживать, какая инструкция должна быть выполнена следующей. При выборке инструкции счетчик программ увеличивается на длину инструкции, чтобы он указывал на начало следующей инструкции. Каждая инструкция состоит из кода операции. В зависимости от инструкции она может включать или не включать операнды. Операнды могут быть постоянным значением или указателем на расположение значения в регистре ЦП или в системной ОЗУ.
После получения полной инструкции ее необходимо декодировать. Это процесс, в котором ЦП разделяет код операции и любые операнды. Расшифрованный код операции используется для включения или отключения определенных электрических путей в ЦП, которые обеспечивают правильную работу.
Как только инструкция будет декодирована, она будет выполнена. Точное поведение ЦП будет зависеть от операции. Операция сложения суммирует два значения вместе. Операция перехода вычисляет, куда в программе нужно перейти. Операция сравнения сравнивает два значения. Операция NOP будет простаивать, так как NOP означает отсутствие операции.
Большинство инструкций затем выводят результат операции. Этот вывод может поступать в регистры процессора и, при необходимости, в оперативную память системы. Каждая из этих операций выполняется за один такт.
Недопустимые коды операций
Каждая архитектура ЦП имеет свой определенный список кодов операций, публикуемый производителем. Значения этих кодов операций не обязательно должны быть одинаковыми для разных платформ, поэтому программное обеспечение необходимо компилировать для разных архитектур. В некоторых случаях производитель также включает недокументированные коды операций. Они называются «незаконными кодами операций». Незаконные коды операций, хотя и недокументированные, будут выполнять одну и ту же функцию при каждом вызове. Однако, как недокументированные и нестандартные функции, обновления архитектуры ЦП могут просто удалить их.
Некоторые ранние компьютерные игры для Apple II полагались на определенные незаконные коды операций. Затем у них возникли проблемы с производительностью и стабильностью в более поздней версии процессора Apple IIc, поскольку IIc удалил незаконные коды операций, необходимые играм. Незаконные коды операций также использовались в кругах по защите авторских прав в качестве метода защиты через неизвестность в их борьбе с пиратами, взламывающими их контент. Некоторые незаконные коды операций предназначены просто как инструменты отладки и обработчики ошибок.
Набор инструкций x86 содержит большое количество недокументированных недопустимых кодов операций. Интересно, что некоторые из них являются общими для процессоров Intel и AMD, что указывает на то, что обе компании публично осведомлены о своих целях, хотя и не задокументированы.
Компиляторы и сборка
Большинство программ написано на языках высокого уровня. Их относительно легко читать, часто с использованием английских слов или сокращений, чтобы свести к минимуму время обучения. Чтобы компьютер мог выполнять эти программы, их необходимо скомпилировать. Компилятор по сути является транслятором. Он берет высокоуровневый код и преобразует его в компьютерный код, инструкции, понятные процессору.
В некоторых языках также возможно запускать нескомпилированный код через ранее скомпилированную программу, которая генерирует машинный код на лету. Ассемблер — это низкоуровневый язык программирования, в котором используются сокращения, позволяющие разработчикам напрямую видеть и контролировать выполняемые операции. NOP — это пример сокращения сборки.
Вывод
Набор инструкций — это список официальных функций, которые может выполнять архитектура ЦП. Это список операций, которые можно выполнить. Эти операции жестко закодированы в ЦП и вызываются с использованием соответствующих кодов операций.
Программное обеспечение обычно использует компилятор для преобразования удобочитаемого кода высокого уровня в машинный код, который может прочитать ЦП. Иногда архитектура ЦП может иметь недокументированные коды операций, называемые недопустимыми кодами операций. Недопустимые коды операций технически являются частью набора инструкций. Однако они могут быть недоступны в будущих итерациях платформы. Не забудьте оставить свои мысли в комментариях ниже.