En informática , un código de operación ( opcode , por sus siglas en inglés ) [ 1 ] [ 2 ] es un valor enumerado que especifica la operación a realizar. Los códigos de operación se emplean en dispositivos de hardware como unidades aritmético-lógicas (ALU), unidades centrales de procesamiento (CPU) y conjuntos de instrucciones de software. En las ALU, el código de operación se aplica directamente a los circuitos mediante un bus de señal de entrada. En cambio, en las CPU, el código de operación es la parte de una instrucción en lenguaje máquina que especifica la operación a realizar.
CPU
Los códigos de operación se encuentran en las instrucciones del lenguaje máquina de las CPU, así como en algunas máquinas de computación abstractas . En las CPU, un código de operación puede denominarse 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 instrucción o cadena de operación . [ 9 ] [ 2 ] Para cualquier procesador en particular (que puede ser una CPU general o una unidad de procesamiento más especializada), los códigos de operación están definidos por la arquitectura del conjunto de instrucciones (ISA) del procesador . [ 10 ] Se pueden describir mediante una tabla de códigos de operación . Los tipos de operaciones pueden incluir aritmética , copia de datos, operaciones lógicas , control de programa e instrucciones especiales (por ejemplo, CPUID ). [ 10 ]
Además del código de operación, muchas instrucciones especifican los datos (conocidos como operandos ) sobre los que actuará la operación, aunque algunas instrucciones pueden tener operandos implícitos o ninguno. [ 10 ] Algunos conjuntos de instrucciones tienen campos casi uniformes para los especificadores de código de operación y operando, mientras que otros (por ejemplo, la arquitectura x86 ) tienen una estructura menos uniforme y de longitud variable. [ 10 ] [ 11 ] Los conjuntos de instrucciones se pueden extender mediante prefijos de código de operación , que añaden un subconjunto de nuevas instrucciones formadas por códigos de operación existentes que siguen secuencias de bytes reservadas. [ 12 ]
Tabla de códigos de operación de ejemplo
Esta tabla muestra los códigos de operación de un microprocesador simple de 8 bits, el Intel 8008 de 1972.
Cada opcode tiene 8 bits de longitud. Cada uno se muestra como un patrón binario de unos y ceros en la columna Opcode . Se pueden incrustar hasta dos campos adicionales en el opcode. Algunos campos de 3 bits están etiquetados como DDD, SSS, CC y ALU. Los campos SSS (origen) y DDD (destino) especifican uno de los ocho registros o memoria posibles del 8008: A, B, C, D, E, H, L o M. CC especifica una de las ocho condiciones de resultado que activarán ciertas instrucciones JMP, CAL y RET. ALU especifica una de las ocho funciones de la unidad aritmético-lógica que se realizarán durante una instrucción, específicamente, suma, suma con acarreo, resta, resta con préstamo, AND lógico, XOR lógico, OR lógico y comparación. La X en algunos campos significa que se puede insertar un 1 o un 0 sin efecto .
Los unos y ceros fijos se combinan con los campos de parámetros para construir el código de operación de 8 bits. Además, la instrucción completa puede requerir uno o dos bytes adicionales de operandos . Estos se muestran en la segunda columna principal de la tabla, etiquetada como Operandos . Si no se requieren operandos, la columna se rellena con un guion ( — ).
Dado que los unos y los ceros son difíciles de recordar, la columna Mnemotécnica muestra un código de letras corto y fácil de recordar que un programador de lenguaje ensamblador puede usar para invocar el código de operación requerido.
La columna Descripción muestra la función que realiza el microprocesador cuando encuentra un código de operación específico.
Conjuntos de instrucciones de software
Los códigos de operación se encuentran en los códigos de bytes y otras representaciones destinadas a la ejecución por intérpretes de software. Estos suelen emplear tipos de datos y operaciones de nivel ligeramente superior a los que se encuentran en los códigos de operación de hardware, pero, no obstante, se construyen siguiendo líneas similares. Algunos ejemplos son el código de bytes que se encuentra en los archivos de clase de Java , que son interpretados por máquinas virtuales de Java , el código de bytes utilizado en GNU Emacs para el código Lisp compilado y el lenguaje intermedio común de NET . [ 13 ]
Véase también
Referencias
- ↑ 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ág. 7. ISBN 0-444-19462-2. LCCN 78-19961 . (xii+100 páginas)
- 1 2 Chiba, Shigeru (2007) [1999]. "Javassist, un conjunto de herramientas para traducir código de bytes de Java" . Archivado del original el 2 de marzo de 2020. Recuperado el 27 de mayo de 2016 .
- ↑ "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) del original el 1 de marzo de 2020. Consultado el 2 de marzo de 2020 .
- ↑ 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) del original el 3 de marzo de 2020. Consultado el 3 de marzo de 2020.
[…] Cada operación que el procesador puede realizar 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 del original el 2 de marzo de 2020. Consultado el 28 de mayo de 2016 .
- ↑ Smotherman, Mark (2016) [2013]. "Problema de instrucciones múltiples" . Escuela de Informática, Universidad de Clemson. Archivado del original el 28 de mayo de 2016. Recuperado el 28 de mayo de 2016 .
- ↑ Jones, Douglas W. (2016) [2012]. "A Minimal CISC" . Computer Architecture On-Line Collection . Iowa City, EE. UU.: The University of Iowa , Department of Computer Science. Archivado del original el 2 de marzo de 2020. Recuperado el 28 de mayo de 2016 .
- ↑ Schulman, Andrew (1 de julio de 2005). "Finding Binary Clones with Opstrings & Function Digests" . Dr. Dobb's Journal . Parte I. Vol. 30, n.º 7. CMP Media LLC . págs. 69–73 . ISSN 1044-789X . N.º 374. Archivado del 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 cadenas operacionales y resúmenes de funciones» . Dr. Dobb's Journal . Parte II. Vol. 30, n.º 8. CMP Media LLC . págs. 56-61 . ISSN 1044-789X . N.º 375. Archivado del original el 2 de marzo de 2020. Consultado el 28 de mayo de 2016 . Schulman , Andrew (1 de septiembre de 2005). "Finding Binary Clones with Opstrings & Function Digests" . CMP Media LLC . Parte III. Vol. 30, n.º 9. United Business Media . págs. 64–70 . ISSN 1044-789X . N.º 376. Archivado del original el 2 de marzo de 2020. Consultado el 28 de mayo de 2016 .
- 1 2 3 4 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 (23 de noviembre de 2017). Arquitectura de computadoras: Un enfoque cuantitativo (6.ª ed.). Cambridge, Massachusetts, EE. UU.: Morgan Kaufmann Publishers . ISBN 978-0-12811905-1OCLC 983459758
- ↑ Mansfield, Richard (1983). «Introducción: ¿Por qué el lenguaje máquina?» . Lenguaje máquina para principiantes . Compute! Books (1.ª ed.). Greensboro, Carolina del Norte, EE. UU.: COMPUTE! Publications, Inc. , American Broadcasting Companies, Inc .; Small System Services, Inc. ISBN 0-942386-11-6Archivado del original el 13 de febrero de 2008. Consultado el 28 de mayo de 2016 .
- ↑ Tanenbaum, Andrew S; Austin, Todd (2013). Organización estructurada de computadoras (Sexta ed.). Pearson Education, Inc. pág. 367. ISBN 0-13-291652-5.
- ↑ "Definición de código de bytes" . PC Magazine . Enciclopedia de PC Magazine. Archivado del original el 6 de octubre de 2012. Consultado el 10 de octubre de 2015 .
- Código máquina