Cualquier CPU está diseñada desde cero para soportar un conjunto de instrucciones concreto. 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 un ordenador puede realizar está representada de forma única por un opcode.
Opcodes
Cuando se ejecuta un programa, la CPU utiliza un contador de programa para saber qué instrucción debe realizarse a continuación. Cuando se obtiene una instrucción, el contador de programa se incrementa en la longitud de la instrucción para que apunte al inicio de la siguiente instrucción. Cada instrucción consta de un opcode. 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 memoria RAM del sistema.
Una vez que la instrucción completa ha sido obtenida, necesita ser decodificada. Este es el proceso en el que la CPU separa el opcode y cualquier operando. El opcode decodificado se utiliza para activar o desactivar vías eléctricas específicas en la CPU que darán lugar a la operación correcta.
Una vez que la instrucción ha sido decodificada, se ejecutará. El comportamiento exacto de la CPU dependerá de la operación. Una operación de suma sumará dos valores. Una operación de salto calculará a qué parte del programa hay que saltar. Una operación de comparación comparará dos valores. Una operación NOP se mantendrá inactiva, ya que NOP significa “No Operation”.
La mayoría de las instrucciones darán salida al 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 tarda un solo ciclo de reloj en completarse.
Opcodes ilegales
Cada arquitectura de CPU tiene su lista específica de opcodes publicada por el fabricante. Los valores de estos opcodes no son necesariamente los mismos entre plataformas, por lo que el software debe ser compilado para diferentes arquitecturas. En algunos casos, el fabricante también incluye opcodes no documentados. Estos se denominan “opcodes ilegales” Los opcodes ilegales, aunque no estén documentados, realizarán la misma función cada vez que sean llamados. Sin embargo, como características no documentadas y no estándar, las actualizaciones de la arquitectura de la CPU pueden simplemente eliminarlos.
Algunos de los primeros juegos de ordenador en el Apple II se basaban en opcodes ilegales específicos. Estos juegos sufrían problemas de rendimiento y estabilidad en la última revisión de la CPU del Apple IIc, ya que ésta eliminaba los opcodes ilegales que los juegos requerían. Los opcodes ilegales también se utilizaron en los círculos de protección de los derechos de autor como método de seguridad a través de la oscuridad en su lucha contra los piratas que crackean su contenido. Algunos opcodes ilegales están pensados simplemente como herramientas de depuración y manejadores de errores.
El conjunto de instrucciones x86 contiene un gran número de opcodes ilegales no documentados. Curiosamente, algunos de ellos son compartidos por las CPUs de Intel y AMD, lo que indica que ambas compañías son públicamente conscientes de su propósito mientras no están documentados.
Compiladores y ensambladores
La mayoría de los programas están escritos en lenguajes de alto nivel. Estos son relativamente fáciles de leer, y a menudo utilizan palabras en inglés o taquigrafía para minimizar las curvas de aprendizaje. Para que un ordenador 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 informático, 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 máquina sobre la marcha. El ensamblador es un lenguaje de programación de bajo nivel que utiliza una forma abreviada para permitir a los desarrolladores una visibilidad y un control directos sobre las operaciones realizadas. NOP es un ejemplo de taquigrafía en ensamblador.
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 utilizando sus respectivos opcodes.
El software generalmente utiliza un compilador para traducir del código de alto nivel legible por el ser humano al código máquina que la CPU puede leer. A veces, una arquitectura de CPU puede tener opcodes no documentados, llamados opcodes ilegales. Los opcodes ilegales son técnicamente parte del conjunto de instrucciones. Sin embargo, es posible que no estén disponibles de forma fiable en futuras iteraciones de la plataforma. No olvides dejar tu opinión en los comentarios de abajo.