Код операции

Перейти к навигацииПерейти к поиску

Код операции, операционный код, опкод — часть машинного языка, называемая инструкцией и определяющая операцию, которая должна быть выполнена.

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

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

Язык ассемблера

Язык ассемблера, или просто ассемблер — низкоуровневый язык программирования, использующий мнемоники, инструкции и операнды для представления машинного кода. Это улучшает читаемость при сохранении полного контроля над машинными инструкциями. Также существуют языки высокого уровня, на которых проще писать объёмный код, чем на ассемблере. Такие языки необходимо компилировать для перевода на машинный язык или запускать при помощи других программ — эмуляторов или интерпретаторов.[2]

Программные наборы инструкций

Опкод можно найти и в так называемом байт-коде и прочих представлениях, разработанных скорее для программных интерпретаторов, чем для аппаратного обеспечения. Эти программные наборы инструкций часто задействуют несколько более высокоуровневые типы данных и операции, чем большинство аппаратных аналогов, но тем не менее они основаны на тех же принципах. Примерами может послужить Java Virtual Machine (JVM) языка программирования Java, байт-код, используемый в Emacs для скомпилированного кода Лисп и многие другие.[3]

Примечания

  1. Machine Language For Beginners — Introduction. Дата обращения: 21 июля 2008. Архивировано 13 февраля 2008 года.
  2. Introduction to Assembly Language. Дата обращения: 21 июля 2008. Архивировано 2 марта 2020 года.
  3. Bytecode Definition from PC Magazine Encyclopedia. Дата обращения: 13 апреля 2022. Архивировано 6 октября 2012 года.