Descargar

Ensamblador (página 2)


Partes: 1, 2, 3, 4

  • 1. Unidad de Proceso Central (UPC o CPU en inglés). Que forma el cerebro de la computadora y, en general, controla todo el funcionamiento de los demás componentes.

  • 2. Memoria. Dispositivo de almacenaje electrónico donde se guardan las instrucciones y datos necesarios para el funcionamiento del sistema.

  • 3. Dispositivos de Entrada y Salida (E/S o I/O). Son el eslabón entre la máquina y el humano. Varían en complejidad y tipo de acuerdo a los requerimientos de procesamiento.

  • 4. Interfases de Entrada/Salida. Son los dispositivos intermedios entre la UPC y los dispositivos de E/S y proveen los controles para que se puedan entender los dispositivos externos de E/S y la UPC.

  • 5. Un programa. Controla todo lo anterior y da la secuencia de eventos que permiten que un sistema funcione como tal y además pueda resolver problemas de procesamiento genérico para lo cual se construyó el sistema en primer lugar.

Las computadoras digitales usan la lógica digital para cumplir con cierta meta de procesamiento. Esta lógica digital o lógica binaria como también se le conoce, se basa en el hecho de que ciertos circuitos electrónicos pueden estar conduciendo electricidad o no (prendidos o apagados), estado que se determina por las características de operación. Esto nos da pie a definir dos estados o condiciones bien diferenciados, mutuamente excluyentes y opuestos.

Si contamos con un sólo circuito digital que nos indique uno de los dos posibles estados, se dice de este circuito contiene un dígito binario (BI- nary digiT) o BIT de información. Este dígito se puede designar como prendido o apagado o más comunmente 1 ó 0 que corresponden a los únicos dígitos utilizados dentro de los sistemas actuales de computadoras digitales.

Para sernos más utiles, los bits se agrupan en palabras que contienen N número de bits de acuerdo al fabricante, modelo de computadora u otros factores, aunque todos coinciden en que son potencias de 2. La longitud más común de palabra en las microcomputadoras es de 8 bits que se nombra byte, de 16 bits, de 32 ó de 64 bits.

Quizá el único atributo que diferencia a las computadoras de otras máquinas es que se les puede decir qué deben hacer. Esto se logra con palabras que contienen patrones de bits que son significativos para la computadora. Este significado preciso se lo da el fabricante de computadoras y así, un patrón puede significar suma dos números mientras que otro ligeramente distinto significará quizá guarda un resultado en una localidad específica.

El grupo de patrones definido por el fabricante forma lo que se llama el juego de instrucciones. La variedad de operaciones distintas que contiene este juego de instrucciones obedece a criterios de diseño del circuito. En general todo juego de instrucciones cuenta con operaciones aritméticas, de manipulación de bits, de comparaciones, de entrada y salida, etc. mismas que analizaremos en detalle para un circuito específico en los capítulos siguientes.

Todos los datos, tanto de instrucciones de programa como datos, son almacenados en una serie de circuitos conocidos como memorias pues tienen la particularidad de recordar la información contenida en ellos. Las memorias son organizadas como casilleros únicos en los que se guarda la información. Cada casillero o localidad de memoria tiene un identificador que lo hace distinto a cualquier otro casillero para propósitos de identificación y de almacenamiento de información. Aeste identificador se le llama dirección y sin entrar en más detalles hasta la siguiente sección baste decir que la dirección es única e irrepetible para evitar confusiones y que la capacidad del casillero forma la palabra de la computadora (número de bits que es posible almacenar en la memoria).

La Unidad de Proceso Central

Toda computadora tiene una especie de circuito de control genérico o UPC (central processing unit o CPU), que forma el "cerebro" de la máquina computadora. La UPC está formada por diferentes partes interconectadas entre sí en forma tal que permite ciertas operaciones lógicas. Las computadoras de hace 10 años requerían de un chasís bastante grande para albergar los componentes de la UPC. Varias tarjetas bastante grandes que contenían cientos de circuitos interconectadas por cables del tamaño de una manguera no era una vista extraña. Hoy en día, la UPC está contenida en unos pocos circuitos de alta integración o en el caso de las microcomputadoras en uno solo. La microcomputadora, junto con unos cuantos circuitos externos, forman una computadora funcional.

Los componentes del sistema de computación deben de interconectarse de alguna forma. La manera en que se realicen las conexiones y cómo se haga la comunicación, afecta las características de desempeño del sistema profundamente.

En las primeras computadoras y en algunas de las actuales, la UPC se interconectaba con cada uno de los dispositivos externos a la UPC por medio de un cable separado. Este método tiene la desventaja de que muchos cables (llamados buses) distintos deben ser controlados y se requiere de una cantidad considerable de circuitos.

Para realizar la interconexión de forma más económica y para estandarizar la lógica de interfase necesaria, una técnica muy popular consiste en interconectar a todos los sistemas externos a la UPC por medio de un sólo juego de cables o bus de interconexión. El bus consiste en los cables necesarios para encontrar a los distintos componentes, controlarlos y transferir datos de y hacia ellos.

En la figura 1.2 vemos el esquema de una unidad de procesamiento cen- tral. Se forma por la unidad aritmética y lógica (UAL o ALU, arithmetic logic unit) encargada de las operaciones lógicas y aritméticas, la unidad de control encargada de la coordinación general, una serie de registros donde se almacena información requerida por la UPC y la ALU de forma provisional y un bus de datos interno que interconecta a todas las unidades.

edu.red

Figura 1.2 Esquema de una Unidad de Proceso Central.

La función principal de la UPC será la de interpretar la información que reside en la memoria principal como instrucciones o datos y actuar de acuerdo a un plan determinado por el código de la instrucción generando las operaciones necesarias de acuerdo a ese plan. Ningún programa puede ser ejecutado por la UPC si no reside antes, en forma parcial o to- tal, en la memoria principal (descrita en la sección siguiente).

  • Interpretando el Contenido de la Memoria

Los datos almacenados en la memoria pueden ser interpretados como:

  • 1. Datos binarios puros

  • 2. Datos codificados en binario

  • 3. Un código de carácter

  • 4. Un código de instrucción

Estas cuatro categorías de interpretar datos pueden dividirse en dos más genéricas: datos e instrucciones.

Los datos binarios puros, los datos codificados en binario y los caracteres codificados tienen una cosa en común: son datos. El contenido de las palabras almacenadas en memoria puede ser usado por sí solo para operaciones o combinado con otras palabras de memoria en formas dirigidas por un programa.

  • rios puros

Consideremos primero a los datos binarios puros que no están sujetos a ninguna interpretación. Es importante resaltar que podemos representar este tipo de datos en papel como un número binario, octal o hexadecimal (por sencillez) sin que tenga ningún impacto en el dato de la palabra. Por ejemplo, una palabra arbitraria de 16 bits, en la que es posible representar 216 combinaciones, puede ser:

11011011100010112=1556138=DB8B16

Se puede observar que la notación en hexadecimal, además de ser más compacta, es mucho más fácil de apuntar y recordar, también evita confusiones, como veremos en el siguiente capítulo, por lo que la base 16 o hexadecimal es la preferida entre la gente dedicada a diseño lógico o programación a nivel máquina.

  • Codificados en Binario

El contenido de una palabra de memoria, interpretada como datos binarios puros, puede existir por sí solo o ser válido sólo cuando se combina con otras palabras para formar un código o un número mayor que sea utilizado con fines prácticos. No hay razón por la cual un dato binario no pueda formarse, por ejemplo con 2 o más palabras; más aún, las palabras pueden no ocupar localidades continuas de memoria, aunque se prefiere por fines prácticos que así sea.

La palabra puede también estar codificada de acuerdo a un código establecido de antemano como puede ser exceso 3, BCD, números con signo, etc. (todos ellos analizados en el capítulo 2).

  • Caracteres

Una computadora no sería muy práctica si tuviésemos que meter cada uno de los datos como largas secuencias de unos y ceros o si las respuestas consistieran de números o letras en una representación binaria. Debe ser posible para la computadora el manejar todo tipo de texto y otra información no numérica.

Para que el manejo de texto sea completo debe de incluir al menos las 26 letras en minúsculas y mayúsculas, los números y una serie de signos especiales que usamos diariamente en nuestra comunicación como son el punto, la coma, etc. En conjunto, los caracteres más usados suman alrededor de 87. Una palabra de 7 bits es suficiente para su representación pero es universalmente aceptada la codificación utilizando 8 bits (ver capítulo 2).

En algunos sistemas con longitud de palabra de 8 bits, se usa el código ASCII de 7 bits y el bit libre se utiliza para verificar errores en los datos por medio de un procedimiento llamado paridad. En otros sistemas se usa un código de 8 bits ASCII y se agrega a la memoria un bit más que sirve para la comprobación de paridad. Aeste bit se le conoce como bit de paridad.

La paridad consiste en una verificación sencilla de errores en la que se agrega un bit al código. La paridad puede ser:

  • Par

  • Impar

El bit de paridad se cambia a 1 ó a 0 para que el número de bits 1 de una palabra sea siempre par o impar, según el tipo de paridad que se haya escogido. Si el tipo de paridad que se escoge es par, el bit de paridad se limpia o fija para que el número total de unos de la palabra sea siempre par. Para clarificar el punto incluímos un ejemplo:

Palabra a proteger con un bit de paridad: 1010101

Como el número de 1 de la palabra ya es par, el bit de paridad será en este caso 0.

Muchos esquemas muy elaborados son usados para verificar la consistencia de los datos y asegurarse que no contengan errores, aún más, existen algoritmos para determinar dónde están los errores y tratar de corregirlos. Estas técnicas de detección de errores no tienen que ver nada en particular con la arquitectura de las computadoras o la programación en ensamblador y, por lo tanto, no se discuten aquí. Para mayor información consulte la bibliografía, en especial el libro Telecomunicaciones y Teleproceso.

  • Instrucciones

Las palabras de memoria hasta ahora analizadas son conformadas por información de un tipo u otro pero el contenido también puede ser interpretado como un código solicitando una operación que se requiere de la computadora.

Considere el sencillo ejemplo de una suma binaria en donde solicitamos que la palabra almacenada en cierta área de memoria sea sumada a otra contenida en otra área distinta y que el resultado sea almacenado en una tercera área. Los pasos necesarios para lograr esta suma serían:

  • 1. Identificar la dirección de la primera palabra a sumar.

  • 2. Transferir el contenido de la dirección a los registros provisionales de almacenamiento dentro de lo que forma la Unidad de Procesamiento Central.

  • 3. Identificar la dirección de la segunda palabra a sumar.

  • 4. Sumar el contenido de esta última palabra a la que se encontraba en los registros de la UPC, obtenida en el paso 2, por medio de la Unidad Lógica y Aritmética (UAL).

  • 5. Identificar la dirección de memoria donde el resultado se almacenará.

  • 6. Transferir la suma almacenada en el registro adecuado de la

UPC a la dirección obtenida en el paso 5.

Ilustrar el concepto de un programa de computadora con estos seis sencillos pasos es sólo el comienzo. Tendremos que responder a lo largo del libro a las preguntas: ¿Cómo realiza la computadora las operaciones requeridas por los códigos de instrucciones que conforman el programa?

¿Qué es lo que la computadora demanda de la lógica externa para poder realizar su trabajo? ¿Cómo se escribe un programa de computadora?

Componentes de la Unidad de Proceso Central

Si consideramos el sencillo programa de suma descrito en la sección 1.2, podemos examinar algunos de los requerimientos internos a la UPC para poder satisfacer lo que se le solicita por medio del código de instrucción SUMA.

  • Registros

Es necesario un almacenamiento provisional (o varios) donde guardar los números para trabajar con ellos, así como un registro donde almacenar el resultado de las operaciones que llamamos acumulador y abreviaremos con A. En el acumulador podemos almacenar información tanto antes de operar con ella, como el resultado de las operaciones con los datos binarios. Por el momento y para simplificar las cosas consideremos que tenemos sólo un acumulador y que éste es de 8 bits.

Se requiere de este tipo de almacenamiento provisional por dos razones:

  • 1. El contenido de la memoria sólo se puede leer o escribir, no es posible operar sobre los registros de la memoria principal debido al diseño de las computadoras actuales.

  • 2. Es posible tomar los datos directamente de memoria, operar sobre ellos y regresar el resultado otra vez a la memoria principal, pero una cantidad adicional importante e innecesaria de circuitos lógicos serían requeridos para esto, complicando el diseño, subiendo el costo y disminuyendo la rapidez de las operaciones como será aparente según avancemos en el libro.

Para poder accesar una palabra de memoria, tanto para leer como para escribir su contenido, necesitamos tener su dirección y ésta se almacena en un registro especial que llamaremos registro contador de datos (data counter register) que abreviaremos con sus siglas en inglés: DC.

El tamaño de este registro depende de la cantidad de memoria principal que la computadora pueda accesar directamente. En la figura 1.3 suponemos un registro contador de datos de 16 bits que nos da una capacidad de memoria de 65,536 palabras o 64K bytes (si la palabra es de 1 byte).

Una computadora puede constar de más de un registro de este tipo pero una vez más, por simplicidad y por el momento, sólo consideraremos uno.

Necesitamos también un registro donde la instrucción sea contenida de forma que la UPC pueda hacer referencia a ese registro para ver de que instrucción, de las muchas de una computadora, se trata. A este tipo de registro se le denomina registro de instrucción (instruction register) que abreviaremos con I.

La dirección de la memoria de la que traeremos la siguiente instrucción (es nuestro ejemplo la de SUMA) es almacenada en el llamado contador de programa (program counter) que abreviaremos con sus siglas en inglés: PC.

El contador de programa es análogo al de datos pero se asume que uno contiene la dirección de los datos en memoria y el otro la dirección de la siguiente instrucción en memoria. Para explicar un poco más este punto: si la operación SUMA consta de un código de operación que sólo ocupa una palabra y le deben seguir dos palabras más de memoria que contengan los datos a sumar, el apuntador a la siguiente instrucción debe actualizarse sumando tres localidades para que salte los datos y apunte efectivamente a la siguiente instrucción; de forma similar el contador de datos se actualizará sumando 1 al registro contador de programa y luego 1 más para poder localizar el siguiente dato.

Como se puede ver en la explicación anterior, existe una diferencia con- ceptual grande entre el contador de programa y el contador de datos, pues mientras el contador de programa debe de incrementarse continuamente para encontrar la siguiente instrucción usando para ello la longitud en palabras de que consta la instrucción anterior, el contador de datos puede o no incrementarse de acuerdo a si la instrucción requiere de datos o no.

Debe, por lo tanto, permitírsele gran flexibilidad al programador para poder modificar el registro contador de datos, mientras que, usualmente, al registro contador de programas no se tiene acceso más que de forma indirecta.

edu.red

Figura 1.3 Registros típicos de una UPC.

  • Forma de Usar los Registros

Para poder comprender en su totalidad el uso de los distintos registro que forman parte de la UPC, realizaremos paso a paso una suma como se describe en el algoritmo de la sección 1.1.2.4.

Para realizar la suma asumiremos que la UPC puede interpretar 3 instrucciones sencillas: CARGA, SUMA y GUARDA. Cada una de estas instrucciones está definida de antemano rígidamente y se deben seguir los pasos que el fabricante explica. Supondremos que las instrucciones realizan estos pasos:

SUMA: Toma el contenido de la dirección formada por el contenido de las siguientes dos palabras y súmala a la que está en el Acumulador dejando el resultado en el Acumulador. Inventamos el código de instrucción 30 hexadecimal que al ser encontrado por la UPC en una localidad de memoria sea interpretado como la instrucción SUMA.

CARGA: Toma el contenido de la dirección formada por el contenido de las siguientes dos palabras y guárdala en el Acumulador. Inventamos el código de instrucción 40 hexadecimal que al ser encontrado por la UPC en una localidad de memoria sea interpretado como la instrucción CARGA.

GUARDA: Toma el contenido del Acumulador y guardalo en la dirección de memoria formada por el contenido de las siguientes dos palabras. Inventamos el código de instrucción 50 hexadecimal que al ser encontrado por la UPC en una localidad de memoria sea interpretado como la instrucción GUARDA.

Recuerde que el Contador de Programa debe de incrementarse continuamente para apuntar así a la siguiente dirección de memoria donde se almacena una instrucción o dato.

Nuestro programa de suma sería entonces (las direcciones en hexadeci- mal):

CARGA E0E0

SUMA E0E1

GUARDA E0E2

Notemos que aquí se introduce un nuevo concepto llamado mnemónico que nos auxilia en recordar qué realiza cada código de instrucciones de la computadora en cuestión, pues en la palabra de memoria no se guarda las letras de la instrucción sino un simple código que representa a la instrucción:

40 E0 E0

30 E0 E1

50 E0 E2

Recordemos a su vez, que cada número en hexadecimal tiene su equivalente en binario y a su vez, cada número en binario se resume en si hay corriente o no en cada uno de los circuitos que conforman el registro en cuestión, ya sea de memoria o interno a la UPC.

Coloquemos estos códigos en un mapa de memoria en una localidad arbitraria, por ejemplo en la dirección C000 hexadecimal (suponemos que tenemos una memoria total de 64K bytes por lo que bastan con 16 líneas de dirección, 16 bits binarios o 4 hexadecimales para conocer su localización). En la figura 1.4 colocamos de alguna forma nuestro programa en la memoria.

edu.red

Figura 1.4 El manejo de los registros en un programa.

Podemos seguir paso a paso el contenido de los registros hasta ahora analizados en la siguiente secuencia:

  • 1. De una forma por ahora desconocida, el registro contador de programa o PC contiene la dirección de la primera instrucción: C0 00.

  • 2. La UPC carga el contenido de la palabra de memoria apuntada por el PC al registro de instrucciones o I, en este caso el número 40 hexadecimal (CARGA), e incrementa en uno el contenido del registro PC.

  • 3. El código 40 que aparece en el registro de instrucciones hace que la lógica de la UPC realice dos pasos. Primero, el contenido de la palabra de memoria direccionado por el registro PC es traído de la memoria pero se almacena en el bit más significativo del registro contador de datos (DC). La Unidad de Procesamiento Central incrementa posteriormente el contenido del PC en uno. El segundo paso consiste en traer el contenido de la palabra de memoria apuntado por PC y guardado en el bit menos significativo del registro DC. Ahora, se utiliza el contenido del registro DC como apuntador para traer la palabra de memoria indicada al registro acumulador (A). Una vez más la UPC incrementa el contenido del registro PC en uno. Con esto la instrucción número 1 (CARGA) se completa.

  • 4. Una vez terminada la instrucción anterior la UPC trae el contenido de la palabra de memoria direccionado por el registro PC e incrementa en uno este registro. Puesto que no le hemos dado ninguna otra instrucción específica a la UPC, el contenido de la palabra que se trae de la memoria se almacena en el registro I para ser interpretado como una instrucción.

  • 5. Algo muy similar al paso 3 sucede en esta etapa. El registro DC contiene ahora la dirección de la palabra de memoria a suma (E0 E1) y la UPC pasa el contenido de esta palabra y el del acumulador a la UAL para su suma, el resultado se almacena en el acumulador y el contador de programa se ha incrementado en 2 para quedar apuntando a la siguiente instrucción.

  • 6. La última instrucción de nuestro pequeño programa es algo muy similar a la instrucción 1 pero en lugar de traer los datos de la dirección apuntada por el registro DC, se almacena en esa dirección.

  • Banderas de Estado

Muchas veces es necesario saber en detalle qué es lo que realiza la UAL para poder decidir si la operación que se ordenó fue completada con éxito o no o para tomar ciertas medidas con el resultado que nos entrega la UAL.

A los registros especializados en decirnos el resultado de las operaciones se les llama registros de estado (estatus register) o banderas y consisten en una memoria de un bit que nos indica varias situaciones dentro de la UAL.

Algunas de estas situaciones en las que las banderas son modificadas que nos son de interés se resumen en los siguientes puntos:

  • 1. El resultado fue cero.

  • 2. Hay un acarreo.

  • 3. Hay signo en la operación.

  • 4. Hubo un desbordamiento en la operación.

  • 5. Indicador de paridad.

  • 6. Si la operación a realizar es suma o resta.

  • 7. Acarreo a la mitad de los bits que forman la palabra.

Aquellas instrucciones que afectan o no a las banderas de estado son cuidadosamente seleccionadas por el fabricante y varían de computadora a computadora.

Ejecución de Instrucciones

Como en casi toda la lógica digital, la UPC es controlada por un reloj. Este reloj puede ser tan sencillo como una sola señal o una combinación de varias señales de reloj requeridas por la UPC.

La ejecución de una instrucción puede ser dividida en dos partes principales:

  • Traer la instrucción (fetch en inglés)

  • Ejecutar la instrucción (ejecute en inglés)

Si recordamos nuestro ejemplo anterior de un programa, cada instrucción comienza con el código que se carga en el registro de instrucción (I). Aesta operación le llamamos traer la instrucción (fetch).

Durante la etapa donde se trae la instrucción, la UPC tiene que colocar el contenido del registro del contador de programa (PC) en el bus de direcciones junto con las señales necesarias para informar a la lógica ex- terior que se trata de una lectura a la palabra de memoria indicada por el contenido del bus de direcciones. Por lo que a la lógica externa concierne, esto se trata de una simple lectura.

Mientras la lógica externa responde, la UPC usa su lógica interna para sumar 1 al contenido del registro PC. El contador de programas ahora apunta a la siguiente localidad de memoria de la que el código de la instrucción se trajo.

Una vez que el código de instrucción se encuentra en el registro de instrucciones, dispara una serie de eventos controlados por la Unidad de Control que constituyen la ejecución de la instrucción.

En su forma más sencilla, dos periodos de reloj son necesarios para ejecutar la instrucción. Uno de ellos marca el tiempo para traer la instrucción y el otro para ejecutarla.

Si consideramos las interconexiones necesarias para esto necesitaremos hasta el momento por lo menos las siguientes:

  • 1. Las líneas necesarias para la dirección de memoria. Por simplicidad consideraremos un diseño en el que se puedan accesar únicamente 65,535 localidades distintas de memoria ó 64K bytes para lo que se requiere de 16 líneas. En conjunto forman el llamado bus de direcciones.

  • 2. Las líneas necesarias para leer o escribir información a la memoria. Una vez más, por simplicidad, consideraremos un diseño de 8 bits de longitud de palabra por lo que se requieren de 8 líneas de datos que en conjunto forman el llamado bus de datos.

  • 3. La alimentación del circuito/circuitos que forma la UPC formado como mínimo con una línea de voltaje y otra de tierra.

  • 4. Las señales adecuadas para informar a la lógica externa que se trata de una lectura o escritura a la memoria.

  • 5. La línea del reloj.

Mostramos en la figura 1.5 el diagrama parcial y esquematizado de un circuito de UPC.

edu.red

Figura 1.5 Una microcomputadora con sus líneas externas.

Algunas veces se requieren de más líneas que las que físicamente permite el empaque. Se utiliza entonces una técnica llamada multiplexión en la que las mismas interconexiones externas sirven para varios propósitos. Por ejemplo, si se requieren de 20 líneas de dirección y sólo tenemos disponibles 14 conexiones, podemos mandar en el momento t la dirección parte baja por las 14 conexiones disponibles y las restantes 6 en el momento t+1 por las mismas interconexiones.

La Unidad de Control

La unidad de control se puede representar funcionalmente como una caja negra tal como en la figura 1.1, pero en realidad consiste de un gran número de elementos lógicos que pueden ser activados por una secuencia de señales habilitadoras. La IEEE define a la unidad de control como la parte de una computadora que lee las instrucciones en secuencia, vigila su aplicación y genera los comandos y señales adecuadas para la Unidad Aritmética y Lógica (UAL) y otros circuitos para su correcta aplicación.

La unidad de control puede utilizar otros elementos contenidos en la UPC. Por ejemplo, la UC puede utilizar el complementador de la Unidad Aritmética y Lógica. Una señal única de la Unidad de Control activa al complementador.

Sin embargo, el complementar el contenido de una memoria provi- sional, aunque útil, no nos sirve de mucho. Lo que sí tiene valía es complementar el contenido del Acumulador y esto implica mover la información al complementador y una vez realizada la operación, regresar el resultado al Acumulador.

Complementar el contenido del Acumulador requiere entonces de 5 pasos:

  • 1. Mover el contenido del Acumulador al Bus de Datos interno.

  • 2. Mover el contenido del Bus de Datos al Complementador.

  • 3. Activar la lógica del complementador.

  • 4. Mover el contenido del Complementador al Bus de Datos interno.

  • 5. Mover el contenido del Bus de Datos al Acumulador.

A cada uno de estos 5 pasos se les llama microinstrucción. Cada microinstrucción es habilitada por una señal de la Unidad de Control. Si la Unidad de Control manda la combinación de señales adecuadas, cualquier número de microinstrucciones pueden ser ejecutadas para re- sponder a una macroinstrucción que es la respuesta aceptada de la Unidad de Procesamiento Central a un código de una instrucción de lenguaje de máquina, muy similares a las ya descritas (SUMA, CARGA y GUARDA).

Para complementar el contenido del Acumulador en nuestro ejemplo previo, la Unidad de Control requirió de 5 códigos binarios que dispararon las señales de control apropiadas. La secuencia de códigos binarios que residen en la Unidad de Control son llamados microprogramas y generar esta secuencia de códigos binarios se le conoce como microprogramación.

Existe un paralelo muy cercano entre lo que es microprogramar y la programación en lenguaje de ensamblador. Un microprograma se guarda como una serie de códigos binarios dentro de la Unidad de Control. Un programa en ensamblador es guardado como una serie de códigos binarios dentro de la memoria principal (RAM o ROM). Al programa en ensamblador se le conoce con el nombre de macroprograma y a cada macroinstrucción le corresponden uno o más microprogramas dentro de la Unidad de Procesamiento Central que deben ser ejecutados para generar la respuesta esperada.

Un microprograma guardado en la Unidad de Control tiene memoria para datos, que consiste en los registros de la UPC, ademas de almacenamiento interno a la misma Unidad de Control. Un macroprograma también tiene una área de almacenamiento, ya sea provi- sional (RAM) o definitiva (ROM) como describimos en la siguiente sección.

La complejidad de las operaciones asociadas con una macroinstrucción es función directa del tamaño del microprograma que la macroinstrucción inicia. Pero existe el límite impuesto por el tamaño físico que puede tener la Unidad de Control y esto se hace más patente en las microcomputadoras, donde toda la UPC se encuentra contenida en un solo circuito.

La Unidad de Control de cada computadora no es más que un microprograma. Si se permite al usuario modificarlo se dice que la computadora es microprogramable. Si la Unidad de Control se diseña como parte del diseño lógico de la computadora y forma parte inalterable de la Unidad de Procesamiento Central, entonces, la computadora no es microprogramable.

Unidad Aritmética y Lógica

La Unidad Aritmética y Lógica (UAL, en inglés ALU) que es parte de la Unidad de Procesamiento Central (UPC, Central Processing Unit CPU) es la sección de la computadora que realiza las operaciones matemáticas y lógicas en los datos de entrada procesados por el computador. Esta sección de la máquina puede ser relativamente pequeña consistiendo en quizá uno o dos circuitos de integración a gran escala (LSI), formar parte de la propia UPC como en el caso de la microcomputadora o ser una serie considerable de circuitos lógicos de alta velocidad como en las macrocomputadoras o supercomputadoras. No importando el tamaño y la complejidad de estos circuitos, las máquinas pequeñas realizan generalmente las mismas operaciones lógicas y aritméticas usando los mismos principios que en las grandes máquinas. Lo que cambia es la velocidad de las compuertas lógicas y los circuitos utilizados; también, técnicas especiales son utilizadas para realizar varias operaciones en paralelo.

Aunque muchas funciones pueden ser realizadas por los UAL de las máquinas de hoy en día, las operaciones aritméticas básicas (suma, resta, multiplicación y división) continúan siendo las operaciones más utilizadas. Inclusive las especificaciones de una computadora nos dan evidencia de la naturaleza fundamental de estas operaciones: en cada máquina nueva se describen los tiempos requeridos para la suma y multiplicación como características significativas.

Es importante resaltar que existe, como ya se explicó, otra parte de la computadora llamada Unidad de Control que dirige las operaciones del UAL. Todo lo que hace el UAL es sumar, restar, acarrear, etc. cuando se le provee de la secuencia correcta de las señales de entrada. Depende del elemento de control el proveer de estas señales así como es función de la unidad de memoria proveer a los elementos aritméticos de la información que usarán.

edu.red

Figura 1.6 La Unidad Aritmética y Lógica esquematizada.

La Memoria

La memoria de la computadora no está concentrada en un sólo lugar; los dispositivos de almacenaje están distribuidos en toda la máquina. En la parte más interna encontramos a los registros de operación que son registros utilizados por la unidad de control y la aritmética de la computadora. Los cálculos se realizan con los datos que se toman de estos registros, por ejemplo, la suma, multiplicación y corrimientos son todos realizados en estos almacenamientos provisionales. El proceso ac- tual de información se realiza en la localidad de estos registros.

Viendo hacia afuera, la siguiente categoría de registros de almacenamiento que encontramos es llamada memoria de alta velocidad, memoria interna o memoria principal. Esta sección de la memoria de la computadora consiste en un conjunto de registros de almacenamiento, cada uno de los cuales es identificado con una dirección (localización de cada registro de memoria) que permite a la unidad de control, ya sea escribir o leer, de un registro en particular. Para que un programa (conjunto de instrucciones) pueda ser ejecutado es necesario que resida antes en esta memoria.

Es deseable que la velocidad de operación en esta sección de la memoria de la computadora sea tan rápida como sea posible, puesto que la mayoría de las transferencias de datos de y hacia la sección de procesamiento de la información de la máquina será a través de la memoria principal; por esta razón los dispositivos de almacenamiento con un tiempo de acceso (tiempo que transcurre entre el momento que se solicita la información y el momento en que el dispositivo tiene una respuesta) rápido son generalmente elegidos para la memoria principal.

Desafortunadamente los dispositivos disponibles en el momento, que son lo suficientemente rápidos para realizar esta función satisfactoriamente, no poseen la capacidad de almacenamiento que algunas veces es requerida ni un costo aceptable. Como resultado, memoria adicional, llamada memoria auxiliar o memoria secundaria, es agregada a la mayoría de las máquinas. Esta sección de la memoria de la computadora se caracteriza por un bajo costo por dígito almacenado, pero generalmente tiene una velocidad de operación mucho menor que los registros de operación o que la memoria principal. Esta sección de la memoria es algunas veces designada como memoria de respaldo, pues su función es manejar cantidades de datos en exceso a las que pueden ser almacenadas en la memoria interna.

Los dispositivos más externos y últimos de almacenamiento son usados para introducir información a la computadora del "mundo externo" y para guardar los resultados de la computadora para el usuario de la computadora. Este medio de almacenaje consiste generalmente en tarjetas perforadas (en desuso), cinta de papel perforada (en desuso), cintas magnéticas o discos magnéticos y las salidas de la máquina consisten generalmente en caracteres impresos ya sea en pantalla o en papel.

Cada una de las divisiones de la memoria tiene ciertas características. Por ejemplo la importancia de velocidad es muy alta en los registros de operación. Estos registros generalmente deben realizar operaciones a varias veces la velocidad de la memoria principal. La memoria principal también requiere grandes velocidades de operación, pero como es deseable almacenar grandes cantidades de datos (de 600,000 a 109 bits) en esta sección de la memoria, un compromiso entre el costo y la velocidad debe buscarse. El mismo tipo de compromiso se realiza en el caso de la memoria auxiliar en el que se almacenan entre 360,000 y 1015 bits, siendo muy caro utilizar los mismos dispositivos que para la memoria principal.

Es importante darse cuenta al considerar la velocidad de operación, que antes de que una palabra puede ser leída, es necesario localizarla. El tiempo para localizar y leer una palabra de memoria es llamado tiempo de acceso. El procedimiento para localizar información puede ser dividido en dos clases:

  • Acceso Aleatorio

  • Acceso Secuencial

Los dispositivos de almacenaje que tiene acceso aleatorio son aquellos en los que la localización dentro del dispositivo puede ser seleccionada arbitrariamente sin seguir ningún orden y el tiempo aproximado de acceso es aproximadamente igual para cada una de las localidades de memoria del dispositivo. Los registros internos de trabajo o la memoria principal es un ejemplo de un dispositivo de almacenamiento de acceso aleatorio.

Por otro lado los dispositivos de acceso secuencial necesitan ser recorridos en orden para llegar a cierta localidad de memoria, por lo que el tiempo de acceso varia de acuerdo a la localidad.

Otra forma de subdividir los dispositivos de almacenaje es de acuerdo a si son dispositivos del tipo

  • Dinámicos

  • Estáticos

En los estáticos, la información, una vez grabada en su localidad, no es olvidada o borrada por el tiempo en que el dispositivo tenga energía eléctrica o la información no sea cambiada explícitamente. Como contraparte, en un dispositivo dinámico, una vez guardada la información en una localidad, ésta se olvida en un tiempo finito, por lo que se debe recordar o "refrescar" constantemente.

  • Memoria de Acceso Aleatorio

La memoria de una computadora se organiza en palabras de X longitud, cada una de ella ocupa una localidad o dirección predeterminada dentro de la memoria. Como se puede observar en la figura 1.7 una memoria dada se divide generalmente en N palabras donde N es una potencia de 2. Cada palabra tiene el mismo número de bits llamados la longitud de la palabra.

edu.red

Figura 1.7 La memoria vista como arreglo lineal.

La dirección de los números en la memoria corren consecutivamente comenzando con la dirección cero hasta la máxima que la computadora puede direccionar. Es importante entender la diferencia entre contenido de la memoria y la dirección de la memoria. Una memoria es como un gran gabinete que contiene tantos cajones como direcciones hay en memoria. En cada cajón hay una palabra y la dirección de la palabra está escrita en la parte externa del cajón. No removemos la palabra en una dirección cuando la movemos; únicamente cambiamos el contenido de la dirección cuando almacenamos o escribimos una nueva palabra.

Desde el punto de vista externo, una memoria principal de alta velocidad es muy similar a una "caja negra" con un número de localidades o direcciones en las que los datos pueden ser almacenados o leídos. Cada dirección o localidad contiene un número fijo de bits binarios, y a este número se le llama longitud de la palabra de la memoria. Una memoria que contenga 4,096 localidades distintas de memoria, cada una de ellas capaz de almacenar 16 bits binarios, es llamada "memoria de 16 bits 4,096 palabras" o en el lenguaje vernáculo de la computadora "memoria de 4K 16 bits". Puesto que las memorias generalmente vienen en potencias de 2, el sufijo K significa en este caso 1,024 y no 103, como en el caso decimal, pues se entiende que las 2N localidades de memoria están disponibles. Por ejemplo una memora de 16 bits de 216 palabras es llamada "memoria de 64K 16 bits".

Las memorias puede ser leídas (los datos pueden ser tomados de) o escritas (los datos son almacenados en la memoria). Las memorias en las que es posible leer y escribir son llamadas memorias de lectura y escritura y erróneamente conocidas como RAM (Random Access Mem- ory, memoria de acceso aleatorio) ya que las memorias de sólo lectura (ver siguiente párrafo) también entran en esta clasificación. A las memorias en las que solamente es posible leer y no permiten escritura son llamadas memorias de sólo lectura o ROM (Read only memory).

Una palabra de información binaria puede ser almacenada en grupos, por ejemplo 8 bits en unidades de memoria. Las entradas y salidas de estas unidades se encuentran interconectadas de forma que el grupo de bits binarios entre y salga de forma serial o secuencial (uno a la vez), o sean movidos en paralelo (todo el grupo a la vez).

Cuando se trata de registros dentro de la UPC (CPU) los programadores usualmente los representan como pequeñas cajas una junto a otra y dentro de ellas un cero o uno lógico que representa su contenido.

  • Dirección

Incrementando el número de unidades de memoria de almacenamiento podemos aumentar el número de bits disponibles. Pero un problema fun- damental surge: ¿Cómo poder accesar a cada una de las localidades sin confusión?

La solución es usar una forma de dirección. Podemos aplicar un único grupo de dígitos binarios a una serie de líneas de selección y de esta forma una localidad única queda disponible. En la figura 1.8 mostramos una memoria de semiconductores estática típica arreglada de forma que sus "celdas" puedan ser seleccionadas independientemente con un código binario único llamado palabra de dirección.

edu.red

Figura 1.8 La memoria y sus conexiones extrenas.

Una vez que la celda ha sido localizada, un 0 o un 1 puede ser escrito a la celda. Dentro del circuito las celdas se organizan en una matriz de x por y, con la mitad de las líneas de dirección localizando las coordenadas de y. Pero para nuestros propósitos es suficiente considerar a las celdas como una larga cadena y a la dirección como un selector de alguna forma de la celda correcta.

  • La Memoria de Sólo Lectura

La memoria de sólo lectura (ROM Read Only Memory) es un dispositivo de memoria utilizado para guardar información que no cambia. Hay una operación inicial en que la información se graba en la memoria y posteriormente sólo es posible leer de ella y no sobre escribir la información. Generalmente la información es puesta en su lugar por el fabricante del dispositivo. Es deseable, sin embargo, en muchas ocasiones poder grabar la información uno mismo en el dispositivo pues el costo de fabricar unos pocos ROMs es prohibitivo. Existen en el mercado una serie de circuitos que cumplen con esta característica y que son programables: las memorias de sólo lectura programables o PROM (programmable read only memory)memoria de sólo lectura programable. Estos circuitos permiten grabar la información una sola vez y de ahí en adelante se comportan exactamente igual a un ROM. Si se realizan circuitos experimentales y son constantes los cambios de diseño de datos y programas en la etapa inicial o se requiere de la flexibilidad de poder borrar de vez en cuando el contenido de la memoria ROM y reprogramarla, se utilizan los circuitos de memoria de sólo lectura programables y borrables o EPROM (erasable programmable read only memory). Estos circuitos pueden ser programados, tal como los PROM pero tienen una ventana de cuarzo en la parte superior del empaque por la que se puede borrar la información usando una luz ultravioleta.

El atributo más importante de la memoria ROM es que la información grabada en ella no se borra si el voltaje que requiere el circuito para funcionar es interrumpido. Tales memorias son conocidas como no volátiles. En contraste, casi todo tipo de memoria RAM es volátil.

Partes: 1, 2, 3, 4
 Página anterior Volver al principio del trabajoPágina siguiente