Опкод


В вычислениях используется код операции [1] [2] (сокращенно от кода операции , [1] также известный как машинный код инструкции , [3] код инструкции , [4] слог инструкции , [5] [6] [7] [8 ]. ] посылка инструкции или opstring [9] [2] ) — это часть инструкции машинного языка , которая определяет операцию, которая должна быть выполнена. Помимо самого кода операции, большинство инструкций также определяют данные, которые они будут обрабатывать, в виде операндов .. В дополнение к кодам операций, используемым в архитектуре набора команд различных ЦП , которые являются аппаратными устройствами, они также могут использоваться в абстрактных вычислительных машинах как часть их спецификаций байт-кода .

Спецификации и формат кодов операций изложены в архитектуре набора команд ( ISA ) рассматриваемого процессора, который может быть обычным ЦП или более специализированным процессором. [10] Коды операций для данного набора инструкций могут быть описаны с помощью таблицы кодов операций, в которой подробно описаны все возможные коды операций. Помимо самого кода операции, инструкция обычно также имеет один или несколько спецификаторов для операндов (т. е. данных), над которыми должна действовать операция, хотя некоторые операции могут иметь неявные операнды или вообще не иметь их. [10] Существуют наборы инструкций с почти одинаковыми полями для спецификаторов кода операции и операнда, а также другие ( x86архитектура) с более сложной структурой переменной длины. [10] [11] Наборы инструкций могут быть расширены за счет использования префиксов кодов операций , которые добавляют подмножество новых инструкций, состоящих из существующих кодов операций, следующих за зарезервированными последовательностями байтов.

В зависимости от архитектуры операнды могут быть значениями регистров , значениями в стеке , другими значениями памяти , портами ввода- вывода (которые также могут отображаться в памяти ) и т. д., указанными и доступными с использованием более или менее сложных режимов адресации . [ править ] Типы операций включают арифметические операции , копирование данных, логические операции и управление программой, а также специальные инструкции (такие как CPUID и другие). [10]

Язык ассемблера , или просто ассемблер , — это язык программирования низкого уровня , который использует мнемонические инструкции и операнды для представления машинного кода . [10] Это повышает удобочитаемость, сохраняя при этом точный контроль над машинными инструкциями. Большая часть программирования в настоящее время выполняется с использованием языков программирования высокого уровня [12] , которые обычно легче читать и писать. [10] Эти языки должны быть скомпилированы (переведены на язык ассемблера) системным компилятором или запущены через другие скомпилированные программы . [13]

Коды операций также можно найти в так называемых байтовых кодах и других представлениях, предназначенных для программного интерпретатора, а не для аппаратного устройства. Эти программные наборы инструкций часто используют типы данных и операции несколько более высокого уровня, чем большинство аппаратных аналогов, но, тем не менее, построены по аналогичному принципу. Примеры включают байтовый код, найденный в файлах классов Java, который затем интерпретируется виртуальной машиной Java (JVM), байтовый код, используемый в GNU Emacs для скомпилированного кода Lisp , .NET Common Intermediate Language (CIL) и многие другие. [14]