¿Cómo se traducen los voltajes de los transistores en las instrucciones de la computadora?

Bueno, la mayoría de las cosas que suceden en una computadora son muchos, muchos comandos. La forma más fundamental en que funciona una computadora es almacenando instrucciones en la memoria y luego ejecutando esas instrucciones. Una vez que tenemos la computadora básica, podemos escribir programas que realmente hacen diferentes instrucciones ejecutando muchos comandos de la computadora fundamental. Aquí solo describiré el proceso fundamental del hardware de la computadora.

Tomemos solo una instrucción de computadora como ejemplo.

Comencemos con una computadora simple de 8 bits. Cada ubicación de memoria tiene ocho bits. Esto significa que habrá 8 cables que transporten esos ocho bits de un lugar a otro. Estos 8 cables van por toda la computadora a todos los lugares que necesitan ir. Esto se llama el bus de direcciones.

8 bits, u 8 unos y ceros, pueden representar cualquier número entre 0 y 255. Cada vez que hablo de uno de estos números, en realidad estoy hablando de estos ocho bits y 8 cables que van a alguna parte. Estos ocho cables van desde todos los chips de memoria a la unidad central y esto se denomina bus de datos.

Cada instrucción de computadora comienza con el comando, también llamado y opcode, que representa la instrucción en sí. La instrucción consta de ocho bits que podemos representar como un número, pero solo lo llamaré e instrucción.

Las instrucciones también mueven datos o hacen algo a los datos. Dónde obtiene esos datos y dónde los coloca también es parte de la instrucción, y puede tomar más ubicaciones de memoria justo después del código de operación para indicar de dónde provienen los datos y a dónde van los datos.

Hay otro grupo de cables que van desde una unidad central en la computadora a todos los chips de memoria. Estos cables configuran los chips de memoria para una dirección dada en la memoria. Digamos que estos son otros ocho cables, por lo tanto, hay 256 ubicaciones de memoria.

La unidad central en la computadora tiene varias funciones. Una función es sacar las direcciones de memoria. Otra función es interpretar la instrucción y luego llevarla a cabo. Una tercera función hace toda la aritmética.

Cuando encendemos la computadora, el hardware en la computadora hace que vaya a alguna dirección inicial. Digamos que es la dirección cero. Esto significa que esas ocho líneas de dirección, llamadas bus de dirección, tendrán todos los ceros (00000000). Estos cables van a todos los chips de memoria.

Otro cable de la unidad central le dice a los chips de memoria que coloquen los datos de esa dirección en el bus de datos. Esto se llama memoria de lectura.

La unidad central toma esos datos del bus de datos y los coloca en el decodificador de instrucciones. El decodificador de instrucciones toma todos los pasos necesarios para configurar todo para hacer la siguiente parte de la instrucción.

Por ejemplo, digamos que se supone que esta instrucción lee una ubicación de memoria y la coloca en un lugar de espera en la unidad central.

Luego, la unidad central configura los cables en el bus de direcciones para leer la siguiente ubicación de memoria (00000001).

Esta ubicación de memoria en realidad contiene la dirección del número que la computadora quiere sacar de la memoria. Digamos que la dirección que el programador quería leer es la dirección número 128. (10000000).

La unidad central coloca esos bits en el bus de direcciones y luego se establece el cable que le dice a los chips que coloquen esos datos en el bus de datos.

La unidad central lee ese número del bus de datos.

La unidad central luego toma eso y luego lo coloca en el bus de direcciones y configura el bus de direcciones para obtener ese número de esa dirección.

Ese número se lee de la memoria y se lleva a la unidad central y se coloca en un lugar de espera llamado registro.

Este ejemplo muestra cómo la computadora ha realizado una instrucción que toma un número de la memoria y la coloca en la unidad central de procesamiento para hacer algo con ella.

Si quisiéramos agregar este número a otro número, digamos almacenado en la dirección 129, tendría que hacer esto nuevamente para obtener el número de esa dirección y llevarlo a otro lugar de espera en la unidad central.

Luego, la unidad central tomaría esos dos lugares de espera y los colocaría en un sumador y obtendría la suma de esos dos números. Es posible que necesitemos otra instrucción que le indique a la computadora dónde guardar esa respuesta en la memoria.

Esto le da una idea del nivel muy bajo en el que trabajan las computadoras. Entonces, ya ves, cuando una computadora está funcionando, están sucediendo muchas cosas en estos pasos fundamentales.

Con suerte, todos los errores tipográficos corregidos …

En los términos más simples, eso es lo que son los programas. Combinaciones de código de nivel inferior que colectivamente realizan funciones de nivel superior. En el nivel más bajo de programación, los programadores escriben código que hace una instrucción a la vez. La instrucción se ejecuta cuando la CPU extrae el código de operación particular de la memoria y lo traduce a través de tablas de búsqueda y máquinas de estado intrínsecas a la CPU, en una sola operación pequeña como una operación aritmética o moviendo un byte o cuatro entre la memoria o los registros. Los unos y los ceros son los bits individuales que forman los bytes y las palabras que se operan a medida que se ejecuta cada instrucción individual. Un comando que ejecutas escribiendo algo en una línea de comando puede ser tal vez miles o millones de tales instrucciones, y algunas de ellas sin duda se ejecutarán varias veces. Redactar esas instrucciones es de lo que se trata la programación.

La respuesta a esta pregunta solía llevarme 2 semanas. Eso es 8 horas al día enseñando a las personas que pronto arreglarían mainframes. Aquí hay 4 párrafos en su lugar:

La diferencia en el código de operación entre una instrucción ADD y una instrucción Restar es si una (o 2) salida del transistor específico representa un 0 o 1. Esa salida está conectada a las puertas de entrada en el circuito de la (ALU) que realiza las matemáticas reales.

El código de operación de la próxima instrucción muy próxima es probablemente una combinación muy diferente de unos y ceros. Los voltajes de salida de los transistores de registro del código de operación también están conectados a las puertas de entrada de muchos otros circuitos (además de la ALU).

La combinación de unos y ceros que indica una instrucción de Depósito da como resultado la respuesta de una suma o resta que se escribe en la ubicación de memoria especificada en la parte de la dirección de la instrucción que se está ejecutando. En una máquina de 32 bits, eso significa que los voltajes de salida de 32 transistores están conectados a las entradas de los interruptores de selección de dirección de memoria.

He omitido cómo los códigos de operación también están conectados a los transistores de subcomando que se encargan de muchos detalles intermedios, algunas puertas a la vez. En los años 60, cuando alguien decía “Oh, computadoras, eso debe ser interesante. ¿Cómo trabajan?”. Nosotros (un grupo de instructores que enseñan Fundamentos de los sistemas digitales) aprendimos a responder “La respuesta a esa pregunta lleva 2 semanas”. Eso es 8 horas al día, más la tarea.

Puede encontrar información detallada sobre el conjunto de instrucciones para un procesador específico en la documentación del fabricante. Esto puede o no incluir descripciones de cómo se realizan las diversas funciones lógicas, que pueden ser bastante generalizadas. Pero todos los procesadores contienen secciones que realizan operaciones de memoria, y también una Unidad de lógica aritmética que maneja matemática (muy simple) como sumas, restas, etc. Los números binarios pueden multiplicarse por potencias de dos simplemente cambiando bits. El software combina estas operaciones básicas en funciones más complejas.

Un par de artículos de Wikipedia pueden ayudar a explicar:

Arquitectura del conjunto de instrucciones – Wikipedia

Código de máquina – Wikipedia

Los bits del código de operación son entradas a funciones que, en alguna condición, activan una señal. Por lo tanto, los códigos de operación controlan directamente lo que se hace mientras esa instrucción está activa.

Un conjunto de cables de señal podría, por ejemplo, controlar un multiplexor que selecciona una entrada a la ALU entre varios registros diferentes. Otra señal podría seleccionar qué operación realiza la ALU. Otro podría registrar un registro para cargar el resultado de la ALU. Otro podría desencadenar un incremento en el contador del programa o cargar una activación desde una nueva dirección en caso de un salto.