Cualquier CPU está diseñada desde cero para admitir un conjunto de instrucciones en particular. Un conjunto de instrucciones es un conjunto de operaciones codificadas que la CPU puede realizar. Estas operaciones pueden ser, por ejemplo, sumar dos números, saltar a una parte diferente del programa o comparar dos valores. Cada operación que puede realizar una computadora está representada únicamente por un código de operación.
códigos de operación
Al ejecutar un programa, la CPU usa un contador de programa para rastrear qué instrucción debe ejecutarse a continuación. Cuando se recupera una instrucción, el contador del programa se incrementa por la longitud de la instrucción para que apunte al inicio de la siguiente instrucción. Cada instrucción consta de un código de operación. Dependiendo de la instrucción, puede o no incluir operandos. Los operandos pueden ser un valor constante o un puntero a la ubicación de un valor en el registro de la CPU o en la RAM del sistema.
Una vez que se ha obtenido la instrucción completa, es necesario decodificarla. Este es el proceso en el que la CPU separa el código de operación y los operandos. El código de operación decodificado se usa para habilitar o deshabilitar rutas eléctricas específicas en la CPU que darán como resultado la operación correcta.
Una vez decodificada la instrucción, se ejecutará. El comportamiento exacto de la CPU dependerá de la operación. Una operación de suma sumará dos valores juntos. Una operación de salto calculará hacia dónde saltar en el programa. Una operación de comparación comparará dos valores. Una operación NOP permanecerá inactiva, ya que NOP significa Sin operación.
La mayoría de las instrucciones generarán el resultado de la operación. Esta salida puede ir a los registros del procesador y, si es necesario, a la RAM del sistema. Cada una de estas operaciones requiere un solo ciclo de reloj para completarse.
Códigos de operación ilegales
Cada arquitectura de CPU tiene su lista específica de códigos de operación publicada por el fabricante. Los valores de estos códigos de operación no son necesariamente los mismos entre plataformas, por lo que el software debe compilarse para diferentes arquitecturas. En algunos casos, el fabricante también incluye códigos de operación no documentados. Estos se conocen como "códigos de operación ilegales". Los códigos de operación ilegales, aunque no estén documentados, realizarán la misma función cada vez que se llamen. Sin embargo, como características no documentadas y no estándar, las actualizaciones de la arquitectura de la CPU pueden simplemente eliminarlas.
Algunos de los primeros juegos de computadora en Apple II se basaban en códigos de operación ilegales específicos. Luego sufrieron problemas de rendimiento y estabilidad en la revisión posterior de la CPU Apple IIc, ya que el IIc eliminó los códigos de operación ilegales que requerían los juegos. Los códigos de operación ilegales también se utilizaron en los círculos de protección de derechos de autor como un método de seguridad a través de la oscuridad en su lucha contra los piratas que descifran su contenido. Algunos códigos de operación ilegales son simplemente herramientas de depuración y controladores de errores.
El conjunto de instrucciones x86 contiene una gran cantidad de códigos de operación ilegales no documentados. Curiosamente, algunos de estos se comparten entre las CPU de Intel y AMD, lo que indica que ambas empresas son conscientes públicamente de su propósito aunque no estén documentadas.
Compiladores y Ensambladores
La mayoría de los programas están escritos en lenguajes de alto nivel. Estos son relativamente fáciles de leer, a menudo usan palabras en inglés o abreviaturas para minimizar las curvas de aprendizaje. Para que una computadora ejecute estos programas, es necesario compilarlos. Un compilador es básicamente un traductor. Toma el código de alto nivel y lo convierte en código de computadora, las instrucciones que la CPU puede entender.
También es posible, en algunos lenguajes, ejecutar código no compilado a través de un programa previamente compilado que genera código de máquina sobre la marcha. Assembly es un lenguaje de programación de bajo nivel que utiliza abreviaturas para permitir a los desarrolladores una visibilidad directa y control sobre las operaciones realizadas. NOP es un ejemplo de taquigrafía de ensamblaje.
Conclusión
Un conjunto de instrucciones es una lista de funciones oficiales que puede ejecutar una arquitectura de CPU. Es una lista de operaciones que se pueden realizar. Estas operaciones están codificadas en la CPU y se llaman usando sus respectivos códigos de operación.
El software generalmente usa un compilador para traducir de un código de alto nivel legible por humanos al código de máquina que la CPU puede leer. A veces, una arquitectura de CPU puede tener códigos de operación no documentados, llamados códigos de operación ilegales. Los códigos de operación ilegales son técnicamente parte del conjunto de instrucciones. Sin embargo, es posible que no estén disponibles de manera confiable en futuras iteraciones de la plataforma. No olvides dejar tus pensamientos en los comentarios a continuación.