Código de operación


En informática , un código de operación [1] [2] (abreviado de código de operación , [1] también conocido como código de máquina de instrucción , [3] código de instrucción , [4] sílaba de instrucción , [5] [6] [7] [8 ] paquete de instrucciones u opstring [9] [2] ) es la parte de una instrucción en lenguaje de máquina que especifica la operación a realizar. Además del código de operación en sí, la mayoría de las instrucciones también especifican los datos que procesarán, en forma de operandos .. Además de los códigos de operación utilizados en las arquitecturas de conjuntos de instrucciones de varias CPU , que son dispositivos de hardware, también se pueden utilizar en máquinas de computación abstractas como parte de sus especificaciones de códigos de bytes .

Las especificaciones y el formato de los códigos de operación se establecen en la arquitectura del conjunto de instrucciones ( ISA ) del procesador en cuestión, que puede ser una CPU general o una unidad de procesamiento más especializada. [10] Los códigos de operación para un conjunto de instrucciones dado se pueden describir mediante el uso de una tabla de códigos de operación que detalla todos los códigos de operación posibles. Aparte del código de operación en sí, una instrucción normalmente también tiene uno o más especificadores para operandos (es decir, datos) sobre los que debe actuar la operación, aunque algunas operaciones pueden tener operandos implícitos , o ninguno en absoluto. [10] Hay conjuntos de instrucciones con campos casi uniformes para el código de operación y los especificadores de operando, así como otros (el x86arquitectura, por ejemplo) con una estructura de longitud variable más complicada. [10] [11] Los conjuntos de instrucciones se pueden ampliar mediante el uso de prefijos de código de operación que agregan un subconjunto de nuevas instrucciones compuestas por códigos de operación existentes siguiendo secuencias de bytes reservadas.

Dependiendo de la arquitectura, los operandos pueden ser valores de registro , valores en la pila , otros valores de memoria , puertos de E / S (que también pueden estar mapeados en memoria ), etc., especificados y accedidos usando modos de direccionamiento más o menos complejos . [ cita requerida ] Los tipos de operaciones incluyen aritmética , copia de datos, operaciones lógicas y control de programas, así como instrucciones especiales (como CPUID y otras). [10]

El lenguaje ensamblador , o simplemente ensamblador , es un lenguaje de programación de bajo nivel , que usa instrucciones mnemotécnicas y operandos para representar código de máquina . [10] Esto mejora la legibilidad al mismo tiempo que brinda un control preciso sobre las instrucciones de la máquina. La mayor parte de la programación se realiza actualmente utilizando lenguajes de programación de alto nivel , [12] que suelen ser más fáciles de leer y escribir. [10] Estos lenguajes necesitan ser compilados (traducidos al lenguaje ensamblador) por un compilador específico del sistema , o ejecutados a través de otros programas compilados. [13]

Los códigos de operación también se pueden encontrar en los llamados códigos de bytes y otras representaciones destinadas a un intérprete de software en lugar de a un dispositivo de hardware. Estos conjuntos de instrucciones basados ​​en software a menudo emplean tipos de datos y operaciones de nivel ligeramente más alto que la mayoría de sus homólogos de hardware, pero, no obstante, se construyen en líneas similares. Los ejemplos incluyen el código de bytes que se encuentra en los archivos de clases de Java que luego son interpretados por la Máquina Virtual Java (JVM), el código de bytes utilizado en GNU Emacs para el código Lisp compilado , .NET Common Intermediate Language (CIL) y muchos otros. [14]