La información o datos (como se le quiera llamar) se carga en el ordenador, se procesa, y sale nueva información. Pero lo que verdaderamente nos interesa es lo que ocurre dentro del bloque que representa al ordenador.
![]() |
Fig. 1 Diagrama de bloques del ordenador. |
En primer lugar, necesitamos un conjunto de instrucciones que hemos de seguir. Sin definir por ahora cómo hemos de escribirlas, imaginemos que las instrucciones se encuentran en las casillas con las etiquetas instrucción 1, instrucción 2, instrucción 3, etc., y que el ordenador comenzará con la instrucción 1, avanzando paulatinamente paso a paso. Nosotros podemos identificar algunas instrucciones que nos serán útiles. STOP es la primera de ellas, y resulta suficientemente clara si se piensa en su significado.
La segunda no es tan facil de definir, pero no resulta dificil comprender que un ordenador que solamente avance de instrucción en instrucción tendría un uso bastante limitado. Seria muy útil poder decir: “Si el último resultado fue X, continúe con la siguiente instrucción; pero si el resultado no fue X, no continúe, vaya a la instrucción número N y prosiga a partir de ese punto.” Esto nos permitiria escribir programas flexibles. Volviendo nuevamente a nuestro ayudante y al recibo de la luz, podriamos comprobar si hay partidas pendientes para cada consumidor y, si el resultado fuese afirmativo, enviarle la correspondiente notificación en los términos adecuados. Finalmente necesitaremos las instrucciones aritméticas de suma y resta.
![]() | |||||
Fig. 2 Diagrama de bloques ampliado. |
De esta manera, la sustitución de nuestro ayudante por un equipo electrónico puede resumirse como se ilustra en la figura 2. En la parte superior del diagrama tenemos las palabras entrada de datos y salida de datos, que representan nuestra comunicación con la máquina. En el centro del diagrama tenemos la unidad aritmética, que equivale a la calculadora. A continuación se encuentra un bloque llamado acumulador consistente en un conjunto de controles biestables capaces de contener un número en binario. En el DIM-1 hay 16 controles biestables, de modo que puede contener cualquier número entre 0000000000000000 (cero) y 1111111111111111 (65535 en decimal). El acumulador es el equivalente de la hoja de papel y se usa para almacenar resultados intermedios.
A la derecha del acumulador se encuentra la memoria de datos que por su estructura suele ser comparada a una hilera de casillas de palomas, cada una con una dirección única. Cada casilla puede alojar un número. En el DIM-1 hay 4096 casillas que pueden contener otros tantos números binarios de 16 bits, dentro de los limites indicados en el parrafo anterior. El lector podrá preguntarse por qué un número tan extraño como el 4096. La respuesta es que cuando tengamos que dirigirnos a la memoria lo haremos en binario, y un número binario de doce bits nos permite el acceso a todas las posiciones comprendidas entre 000000000000 y 111111111111. El último número es 4095 en el sistema decimal, y por tanto hay 4096 posiciones a las que podemos dirigirnos con un número de doce bits. Esto es lo que se conoce como memoria de 4K (K indica mil, un tanto libremente). Generalmente, las memorias de los ordenadores están formadas por bloques de 4K, de modo que pueden encontrarse memorias desde 4K hasta 64K (actualmente 65536). Los equipos microprocesadores se venden a menudo con memorias de |K, lo que representa 1024 posiciones.
Asociado a la memoria está el almacenamiento intermedio de datos. Este es un registro de 16 bits, similar al acumulador, cuya función consiste en almacenar los datos sacados de la memoria mientras son utilizados. Del mismo modo, los datos que han de ser colocados en la memoria pasarán antes por el almacenamiento intermedio de la memoria.
A continuación, en una memoria de 4K idéntica a la de datos, tenemos las instrucciones. Más adelante veremos que esto es una complicación innecesaria y que los datos e instrucciones se almacenan en la misma memoria. No obstante, por el momento consideraremos que ambas están separadas. La memoria de instrucciones es idéntica a la de datos, que, como hemos visto, esta formada por una hilera de casillas, cada una capaz de almacenar un número de 16 bits. Estos números representan instrucciones para la maquina de manera que, por ejemplo, el número 1111000000000000 significa Stop. El acceso a las posiciones de esta memoria también se realiza mediante una dirección única.
Asociados con la memoria de instrucciones aparecen el contador de instrucciones y el almacenamiento intermedio de instrucciones. El contador de instrucciones es un registro que se usa para contener la dirección de la instrucción en curso. La memoria de instrucciones tiene 4K posiciones y, por consiguiente, son necesarios 12 bits para acceder a ella. El contador de instrucciones es por tanto, un registro de 12 bits.
En un programa normal avanzamos de instrucción en instrucción, de manera secuencial, a menos que encontremos la instrucción especial: “si ocurre X haga esto, sino haga lo otro” que mencionábamos anteriormente. Después de haber ejecutado una instrucción, el contador ha de ser incrementado para que nos indique la dirección de la siguiente instrucción. Por eso sería útil convertir este registro en un simple contador binario, ya que cada vez que ejecutásemos una instrucción sólo tendríamos que enviar un impulso al contador para obtener la dirección de la siguiente. La instrucción condicional requiere la incorporación de otros: medios en el contador de instrucciones, pero sobre este tema volveremos mas adelante.
La memoria de instrucciones cuenta también con un almacenamiento intermedio de instrucciones que realiza el mismo cometido que el almacenamiento de la memoria de datos. Al iniciarse el ciclo de ejecución de una instrucción, el contador se dirige a la memoria de instrucciones, y el número que se halle en la posición buscada es colocado en el almacenamiento intermedio de instrucciones. Este número representa la instrucción que ha de ser ejecutada.
Finalmente tenemos el control. Este enlaza todas las partes del ordenador y se encarga de que cada una de ellas lleve a cabo su cometido en el momento preciso, por lo que en cierta manera puede ser considerado como el “conductor”. Además, el control tiene la misión de comprobar qué número se encuentra en el almacenamiento intermedio de instrucciones y de decidir a qué instrucción representa.
Para comprender cómo se coordinan todas estas partes, veamos por donde se encamina el ordenador cuando ejecuta una instrucción. La instrucción en cuestión se halla en la posición 3220 y el número allí contenido representa: “Sumar el número que está en la posición 4057 al número del acumulador y colocar el resultado en el acumulador.” El número que pueda representar esta particular instrucción no nos preocupa por el momento; nos basta con saber que el control lo reconocerá.
Comenzaremos a seguir la máquina al final de la instrucción anterior (3219). El contador indicará la instrucción 3219. Cuando esta finaliza, el control envía un impulso al contador de instrucciones incrementándolo a 3220. En ese momento el control ordena a la memoria de instrucciones que lea, y el número que se encuentra en la posición de memoria 3220 es transferido al almacenamiento intermedio de instrucciones. El control examina este número y decide qué significa: “Sumar el número que está en la posición 4057 al número que se encuentra en el acumulador, y colocar el resultado en el acumulador.”
Ahora el control se dirige (“direccional”) la memoria de datos con la dirección 4057 y ordena su lectura. El número de la posición 4057 está ahora en el almacenamiento intermedio de la memoria, y el control exige a la unidad aritmética que sume los números contenidos en el acumulador y en el almacenamiento intermedio de la memoria. Una vez realizada esta operación, el control toma el resultado de la unidad aritmética y lo coloca en el acumulador.
Por último, el control envía un impulso al contador de instrucciones para incrementarlo a 3221, que es el número correspondiente a la siguiente instrucción. Esta acción completa el ciclo de ejecución de la instrucción.
Supongamos que la instrucción 3221 es: “Poner el número que se halla en el acumulador, en la posición de memoria 1750.” Sigamos los pasos de la máquina para ver cómo la ejecuta.
Ya hemos incrementado el contador de instrucciones y contiene el número 3221. El control se dirige a la memoria de instrucciones y le ordena que lea el número contenido en la posición 3221 y lo transfiera al almacenamiento intermedio de instrucciones, donde el control lo identifica como: “Poner el número que se halla en el acumulador, en la posición de memoria 1750.”
El control toma el número del acumulador y lo coloca en el almacenamiento intermedio de la memoria de datos. Después envia la dirección 1750 a la memoria de datos y le ordena que escriba en la posición 1750 los datos que están en el almacenamiento intermedio de la memoria. El control incrementa a 3222 el contador de instrucciones mediante el correspondiente impulso, y con ello se completa el ciclo de ejecución.
Como puede verse, cada ciclo se divide en dos partes distintas. En la primera el control se dirige a la memoria de instrucciones, transfiere la instrucción al almacenamiento intermedio, y “descifra” su significado; esto es, decide lo que representa el número que se encuentra en el almacenamiento intermedio.
En la segunda parte, el control ejecuta la instrucción. Normalmente esta operación implica el uso de la memoria de datos, ya que casi siempre se manejan datos de la memoria y datos del acumulador.
Esta segunda parte es común para todos los ordenadores y se le ha llamado “latido” del ordenador. A estas dos partes se les llama a menudo ciclo de instrucción y ciclo de datos.
El control en ningún momento accede simultáneamente a la memoria de datos y a la de instrucciones. Por consiguiente, en la figura 3 hemos simplificado el equipo utilizando sólo una memoria para datos e instrucciones. Esto es perfectamente factible dado que tanto los datos como las instrucciones se almacenan en la memoria en forma de números de 16 bits y la memoria no conoce el significado de su contenido.
![]() |
Fig. 3 Memoria de datos e instrucciones. |
El uso de la misma memoria para almacenar datos e instrucciones tiene una ventaja muy importante que posiblemente no se haga evidente de inmediato. No es sólo la propia memoria la que ignora si el número en una posición determinada representa una isntrucción o representa datos; el ordenador, en su conjunto, también lo ignora hasta que se produce el acceso a la posición mediante el ciclo de instrucción o el ciclo de datos. Esto significa que una instrucción puede ser tratada como datos y manejada por otras instrucciones.
De buenas a primeras esto puede parecer un poco alarmante, y para algunos la idea de que un ordenador modifique sus propias instrucciones puede resultarles totalmente siniestra. Pero como veremos más adelante al construir nuestro conjunto de instrucciones, el uso de este método no es cosa de otro mundo.
No hay comentarios:
Publicar un comentario