Necesitamos tu ayuda para extender nuestras crónicas acerca de las ciencias de la computación.
Solución:
Las instrucciones de ensamblaje, además de un código de operación, a menudo tienen campos de bits que indican registros y modos de direccionamiento (absoluto, relativo, autoincremental y más).
La decodificación es el ciclo que interpreta el código de operación y esos otros campos de bits para determinar en qué operará la instrucción, o qué hará de otra manera.
Resumen: averigua los detalles opcionales de una instrucción
Ejemplo: 0x90 (10010000 binario) generalmente se considera un NOP
, ninguna operación, para el conjunto de instrucciones 8086.
Pero hay un XCHG
instrucción, representada como 10010reg binario (reg=3 bits), (0x90 + reg) que es un registro de intercambio de 16 bits con AX
instrucción. los 3 bits indicados como ‘reg’ definen con qué registro intercambiar.
‘reg’ de binario 000, significa ‘con registro AX
‘. Entonces 0x90 se decodifica como “intercambio AX
con AX
“, que no hace mucho, también conocido como No Operation NOP
Las instrucciones y los modos de direccionamiento son lo que se decodifica. Las instrucciones + los modos de direccionamiento consisten en un código de operación y cualquier dato inmediato (operando) que siga al código de operación.
Si es así, ¿por qué está codificado entonces?
Porque estamos usando valores en la RAM para “representar” instrucciones y modos de direccionamiento. Tiene que existir un esquema en el que X = cualquier instrucción + cualquier modo de direccionamiento. Similar a cómo ASCII/Unicode es un esquema que “representa” números, letras y códigos de control de terminal.
El paso de decodificación no sería necesario si tuviera una máquina que tuviera 1 interruptor para cada instrucción posible. El “equivalente de RAM” de esto sería 1 instrucción por bit en un byte de 8 bits (u otro), y si varios bits estuvieran activados, todas las instrucciones (y sí, estaría limitado a 8 de ellas) “dispararían” en ese paso Creo que la asamblea del PDP de finales de los 60 y principios de los 70 no está muy lejos de esto.
De hecho, entiendo la decodificación aquí de manera similar a como se decodifica un mensaje dado un key en el campo de la seguridad, que es lo que me confunde un poco.
No, es más como decodificar datos MPEG en datos de video sin procesar: los datos MPEG sin procesar no se pueden pintar directamente en la pantalla, deben procesarse y “descomprimirse” para averiguar qué significan exactamente.
Descodificar significa analizar la instrucción para determinar su significado.
Una instrucción típica consiste en un código de operación y (generalmente) uno o más argumentos. Estos argumentos pueden referirse a registros específicos o direcciones de memoria o pueden ser valores inmediatos para ser usados directamente durante la ejecución. Además, algunas instrucciones pueden tener prefijos (como LOCK
en x86) o códigos de función (como el funct
campo para algunas instrucciones MIPS) que alteran su funcionalidad.
Durante la decodificación, el procesador necesita:
- determinar qué instrucción está representada por el código de operación para que la instrucción pueda enviarse a la unidad de ejecución correcta y que se realice la operación correcta
- interpretar correctamente los argumentos, prefijos y otros valores adjuntos a la instrucción y pasar la información relevante al circuito correspondiente
- (en la mayoría de los diseños de procesadores modernos) divide la instrucción en sus microoperaciones correspondientes
Con los procesadores modernos, esta puede ser una operación compleja que requiere múltiples etapas en la tubería. Para acelerar este proceso, se puede usar un caché dedicado para almacenar microoperaciones para instrucciones que se ejecutan con frecuencia.
Para obtener más información sobre las técnicas utilizadas para ofrecer un alto rendimiento en los procesadores modernos, es posible que desee leer esta respuesta.
Sección de Reseñas y Valoraciones
No se te olvide mostrar este tutorial si te valió la pena.