Parte de una instrucción de máquina
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 instrucciones , [3] código de instrucción , [4] sílaba de instrucción , [5] [6] [7] [8] paquete de instrucción o cadena de operaciones [9] [2] ) es la parte de una instrucción en lenguaje de máquina que especifica la operación que se 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 abstracta como parte de sus especificaciones de código de bytes .
Descripción general
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 determinado 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 especificadores de operandos y códigos de operación, así como otros (la arquitectura x86 , por ejemplo) con una estructura más complicada y de longitud variable. [10] [11] Los conjuntos de instrucciones se pueden ampliar mediante el uso de prefijos de códigos de operación que agregan un subconjunto de nuevas instrucciones compuestas por códigos de operación existentes que siguen secuencias de bytes reservadas. [ cita requerida ]
Operandos
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 programa, 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 utiliza 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 generalmente son más fáciles de entender y escribir para los humanos. [10] Estos lenguajes deben compilarse (traducirse al lenguaje ensamblador) mediante un compilador específico del sistema o ejecutarse a través de otros programas compilados. [13]
Conjuntos de instrucciones de software
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 un dispositivo de hardware. Estos conjuntos de instrucciones basados en software a menudo emplean tipos de datos y operaciones de nivel ligeramente superior a la mayoría de sus contrapartes de hardware, pero, no obstante, están construidos de manera similar. Algunos ejemplos incluyen el código de bytes que se encuentra en los archivos de clase 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 , el lenguaje intermedio común (CIL) de .NET y muchos otros. [14]
Véase también
Referencias
- ^ ab Barron, David William (1978) [1971, 1969]. "2.1. Instrucciones simbólicas". Escrito en la Universidad de Southampton , Southampton, Reino Unido. En Floretin, J. John (ed.). Ensambladores y cargadores . Monografías informáticas (3.ª ed.). Nueva York, EE. UU.: Elsevier North-Holland Inc. p. 7. ISBN 0-444-19462-2.LCCN 78-19961 .(xii+100 páginas)
- ^ ab Chiba, Shigeru (2007) [1999]. "Javassist, un conjunto de herramientas de traducción de código byte de Java". Archivado desde el original el 2020-03-02 . Consultado el 2016-05-27 .
- ^ "Apéndice B - Códigos de máquina de instrucciones" (PDF) . Manual de programación en lenguaje ensamblador MCS-4 - Manual de programación del sistema de microcomputadoras INTELLEC 4 (edición preliminar). Santa Clara, California, EE. UU.: Intel Corporation . Diciembre de 1973. págs. B-1–B-8. MCS-030-1273-1. Archivado (PDF) desde el original el 2020-03-01 . Consultado el 2020-03-02 .
- ^ Raphael, Howard A., ed. (noviembre de 1974). «Las funciones de una computadora: registro de instrucciones y decodificador» (PDF) . Manual del usuario de MCS-40 para diseñadores lógicos . Santa Clara, California, EE. UU.: Intel Corporation . pág. viii. Archivado (PDF) desde el original el 3 de marzo de 2020. Consultado el 3 de marzo de 2020. [
…] Cada operación que puede realizar el procesador se identifica mediante un número binario único conocido como código de instrucción. […]
- ^ Jones, Douglas W. (junio de 1988). "Un CISC mínimo". ACM SIGARCH Computer Architecture News . 16 (3). Nueva York, EE. UU.: Association for Computing Machinery (ACM): 56–63. doi : 10.1145/48675.48684 . S2CID 17280173.
- ^ Domagała, Łukasz (2012). "7.1.4. Conjunto de pruebas comparativas". Aplicación de CLP a la programación de módulos de instrucciones para procesadores VLIW. Gliwice, Polonia: Jacek Skalmierski Computer Studio. págs. 80–83 [83]. ISBN 978-83-62652-42-6Archivado desde el original el 2020-03-02 . Consultado el 2016-05-28 .
- ^ Smotherman, Mark (2016) [2013]. "Multiple Instruction Issue". Facultad de Informática, Universidad de Clemson. Archivado desde el original el 28 de mayo de 2016. Consultado el 28 de mayo de 2016 .
- ^ Jones, Douglas W. (2016) [2012]. "Un CISC mínimo". Colección en línea de arquitectura informática . Iowa City, EE. UU.: The University of Iowa , Departamento de Ciencias de la Computación. Archivado desde el original el 2020-03-02 . Consultado el 28 de mayo de 2016 .
- ^ Schulman, Andrew (1 de julio de 2005). "Encontrar clones binarios con opstrings y resúmenes de funciones". Dr. Dobb's Journal . Parte I. Vol. 30, núm. 7. CMP Media LLC . págs. 69–73. ISSN 1044-789X. #374. Archivado desde el original el 2 de marzo de 2020. Consultado el 2 de marzo de 2020.; Schulman, Andrew (1 de agosto de 2005). "Encontrar clones binarios con opstrings y resúmenes de funciones". Diario del Dr. Dobb . Parte II. Vol. 30, núm. 8. CMP Media LLC . págs. 56–61. ISSN 1044-789X. #375. Archivado desde el original el 2 de marzo de 2020. Consultado el 28 de mayo de 2016.; Schulman, Andrew (1 de septiembre de 2005). "Encontrar clones binarios con opstrings y resúmenes de funciones". CMP Media LLC . Parte III. Vol. 30, núm. 9. United Business Media . págs. 64–70. ISSN 1044-789X. #376. Archivado desde el original el 2 de marzo de 2020. Consultado el 28 de mayo de 2016 .
- ^ abcdef Hennessy, John L.; Patterson, David A.; Asanović, Krste ; Bakos, Jason D.; Colwell, Robert P.; Bhattacharjee, Abhishek; Conte, Thomas M.; Duato, José; Franklin, Diana; Goldberg, David; Jouppi, Norman P.; Li, Sheng; Muralimanohar, Naveen; Peterson, Gregory D.; Pinkston, Timothy M.; Ranganathan, Parthasarathy; Wood, David A.; Young, Cliff; Zaky, Amr (2017-11-23). Arquitectura informática: un enfoque cuantitativo (6.ª ed.). Cambridge, Massachusetts, EE. UU.: Morgan Kaufmann Publishers . ISBN 978-0-12811905-1.OCLC 983459758 .
- ^ Mansfield, Richard (1983). "Introducción: ¿Por qué el lenguaje de máquina?". Lenguaje de máquina para principiantes. Compute! Books (1.ª edición). Greensboro, Carolina del Norte, EE. UU.: COMPUTE! Publications, Inc. , American Broadcasting Companies, Inc .; Small System Services, Inc. ISBN 0-942386-11-6Archivado desde el original el 13 de febrero de 2008. Consultado el 28 de mayo de 2016 .
- ^ "Popularidad de los lenguajes de programación". langpop.com . 2013-10-25. Archivado desde el original el 2015-04-11 . Consultado el 2015-10-10 .
- ^ Swanson, William (2001). "Introducción al lenguaje ensamblador". Swanson Technologies . Archivado desde el original el 2020-03-02 . Consultado el 2015-10-10 .
- ^ "Definición de bytecode". PC Magazine . Enciclopedia de PC Magazine. Archivado desde el original el 2012-10-06 . Consultado el 2015-10-10 .
Lectura adicional
- Hyde, Randall (2004). Write Great Code: Thinking Low-level, Writing High-level. Vol. 1. San Francisco, California, EE. UU.: No Starch Press . pág. 1. ISBN. 1-59327003-8. Recuperado el 10 de octubre de 2015 .