Story Transcript
UNIDAD DE CONTROL La función principal de la unidad de control de la UCP es dirigir la secuencia de pasos de modo que la computadora lleve a cabo un ciclo completo de ejecución de una instrucción, y hacer esto con todas las instrucciones de que conste el programa. Los pasos para ejecutar una instrucción cualquiera son los siguientes: I. Ir a la memoria y extraer el código de la siguiente instrucción (que estará en la siguiente celda de memoria por leer). Este paso se llama ciclo de fetch en la literatura computacional (to fetch significa traer, ir por). II. Decodificar la instrucción recién leída (determinar de que instrucción se trata). III. Ejecutar la instrucción. IV. Prepararse para leer la siguiente casilla de memoria (que contendrá la siguiente instrucción), y volver al paso 1 para continuar. La unidad de control ejecutara varias veces este ciclo de cuatro instrucciones alambradas a una enorme velocidad. Se llama así a estas instrucciones porque no residen en memoria, ni fueron escritas por ningún programador, sino que la maquina las ejecuta directamente por medios electrónicos, y lo hará mientras este funcionando (mientras este encendida) en una computadora es a razón de cientos de miles (o incluso millones) de veces por segundo. Se ha definido ya el modelo de von Neumann. Ahora se pondrá a funcionar sobre nuestro pequeño programa de ejemplo (que ya esta cargado en la memoria). PASOS PARA LA EJECUCION DE UN PROGRAMA Se describirán todos los pasos con detalle por única vez, para que el lector pueda estudiarlos con detenimiento hasta estar seguro de haberlos comprendido. • En virtud de que el programa comienza a partir de la celda numero 10, se debe indicar a la unidad de control que esa celda contiene la primera instrucción. Esto se hace por medio de un apuntador (que forma parte de los circuitos electrónicos de la unidad de control) que recibe el nombre de contador de programa (CP). Así pues, el primer paso debe consistir en apuntar a la casilla 10, y esto se representara por CP−10. (obsérvese que este paso es externo, esto es, no forma parte del programa, sino que se tiene que hacer desde afuera para iniciara la operación de la computadora) • La unidad de control ejecutara el paso I e ira a la casilla 10 para leer su contenido, que es21. • La unidad de control ejecuta el paso II, con lo que decodifica el 21 recién leído y determina que se trata de una operación CARGA_Ac. En este momento sucede algo de primordial importancia: como la instrucción 21 tiene una longitud de dos celdas cuyo valor se cargara en el acumulador (que en este caso de casualidad también es 21), la maquina deberá ajustar el valor del contador de programa para que este apunte a celda siguiente. • La unidad de control ejecuta el paso III, con la que efectivamente efectuara la operación de carga. Por esto, la computadora debe ir a la celda 11 y extraer su contenido, pero ahora ya no lo considera como instrucción si no como dirección por la cual ira a la celda 21 para extraer el valor que contenga.
1
En este momento hay que tener cuidado para que no haya confusión: el primer 21 (el de la celda 10) es la instrucción CARGA_Ac; el segundo 21 ( El de la celda 11) es la dirección de la celda de memoria cuyo valor se desea cargar en el acumulador. Esta instrucción completa 21, 21, puede leerse de la siguiente manera: cargar el acumulador con el valor que este contenido en la celda cuya dirección aparece a la derecha de donde sé esta leyendo ahora. Conviene tener muy en claro antes de seguir adelante. • La unidad de control ejecuta el paso IV, para luego ejecutar todo el ciclo de nuevo. Obsérvese que es un ciclo ilimitado, que solo terminara cuando se ejecute la instrucción ALTO. En este caso, el contador de programa se hará igual a 12; esto es, apuntara a la celda numero 12. • Se ejecuta (por segunda vez) el paso I de la unidad de control. Como CP=12, se leerá esa celda, que contiene un 57. • Se decodifica esa instrucción, que es SUMA_Ac, por lo que la CP se prepara para apuntar a la siguiente celda. (Recuérdese que la instrucción SUMA_Ac ocupa 2 celdas: una para el código de operación y otra para la dirección de la celda cuyo contenido se sumara al acumulador.) • Se ejecuta la instrucción 57, con lo que se añade el contenido de la celda 22 al acumulador(la dirección 22 reside en la celda 13, es a la que actualmente apunta el contador de un programa como resultado del paso anterior). Ahora el acumulador contendrá un 12. • La CP se actualiza para apuntar a la celda 14, en la cual (y no es casualidad) reside el código de la siguiente instrucción. • Se lee la celda 14 y se extrae su código: 96. • Se decodifica la instrucción, que es GUARDA_Ac, por lo que el CP sea lista para apuntar a la siguiente celda, que contendrá la dirección de la celda en donde se guardara el contenido del acumulador. • Al ejecutarse esta instrucción se deposita el valor del acumulador (12) en la celda numero 23, o sea, se deja el resultado de la suma en la celda que de antemano se había separado para tal fin. • La unidad de control regresa al paso I no sin antes actualizar el contador de programas para que apunte a la celda 16 es donde reside la siguiente instrucción. • Se lee la celda 16 y se extrae su contenido: 70. • Se decodifica esta instrucción, que es ALTO. El CP no se prepara para extraer un dato de la siguiente celda porque la instrucción 70 ocupa una sola celda. • Se ejecuta esta instrucción, lo que detiene a la unidad de control y a la maquina. De esta manera se rompe el ciclo de los 4 pasos. De estos 16 pasos sobre sale lo siguiente: • Dado el contenido de una celda, la computadora no puede distinguir si se trata de un instrucción o de un dato o dirección. • Debido a lo anterior, es responsabilidad de quien maneja la maquina indicarle cual es la celda donde comienza el programa (esto se hizo por medio del paso 0, que se describió externo al programa). • Una vez que el contador de un programa apunta a la celda que contiene la primera instrucción, el resto del proceso ocurre de manera automática e invisible para el programador. Esto se debe a los ajustes internos que hace al CP (en el paso II) que a su vez, dependen de la longitud de la instrucción que sé esta ejecutando. COMO EJECUTAR UN PROGRAMA Sí el archivo. EXE esta en la unidad por omisión, podría usar el DOS para cargarlo para su ejecución introduciendo: P05ASM1.EXE o PO5ASM1
2
Si omite la extensión del archivo el DOS supone que es. EXE (o .COM). Sin embargo, ya que este programa no produce resultados visibles, se sugiere que lo ejecute con DEBUG y avance paso por paso en su ejecución en comandos de rastreo. (T. Teclee lo siguiente incluyendo la extensión. EXE: DEBUG D:P05ASM1.EXE DEBUG carga el modelo del programa.EXE. Y MUESTRA SU INDICACION (un guión). Para ver el segmento de la pila teclee: D SS:0. La pila contiene solo ceros ya que fue la forma de visualizarla. Para ver el segmento de datos teclee: D DS:0. La operación muestra tres elementos de datos. FA 00 7D 00 00 00, con los bytes de cada palabra en orden inverso para ver el segmento de código, teclee: D CS:0. Compare el código de maquina mostrando con el segmento de código del listado del ensamblado: D8−−−−8ED8A10000... En este caso el listado del ensamblador no muestra de manera precisa el código de maquina ya que el ensamblador no conoce la operación del operando de la primera instrucción. Ahora puede determinar esta instrucción examinando el código desplegado. Teclee R para ver los registros y rastree la ejecución del programa con sucesivos comandos T. Amedida que avance el programa, fíjese en el contenido de los registros. Cuando llegue a la ultima instrucción, puede utilizar L para volver a cargar y correr el programa o Q para salir de la sesión con DEBUG.
3