1 00:00:01,649 --> 00:00:08,830 Vamos a ver a continuación un vídeo que realicé después de la pandemia sobre el ciclo de ejecución de una instrucción. 2 00:00:09,810 --> 00:00:17,170 Este vídeo tiene una ayuda prácticamente visual, dado que voy siguiendo las diapositivas. 3 00:00:18,109 --> 00:00:29,670 El orden en que se sigue en el libro de Paraninfo, de cada una de las micro órdenes que va a enviar la ejecución de una instrucción. 4 00:00:29,670 --> 00:00:40,630 Esta instrucción se trata de una instrucción de resta y tiene un pequeño fallo al final que espero que seáis capaces de ver. 5 00:00:41,229 --> 00:00:43,250 Vamos a comenzar. 6 00:00:44,509 --> 00:00:55,070 Como veis está realizado con la herramienta de Teams que nos permitía a la vez que dábamos una conferencia grabar un vídeo. 7 00:00:55,070 --> 00:01:00,710 La ejecución de una instrucción consta de dos fases, la fase de búsqueda y la fase de ejecución 8 00:01:00,710 --> 00:01:08,150 Vamos a comenzar por esa fase de búsqueda y como os he dicho se va a tratar de una resta de dos números 9 00:01:08,150 --> 00:01:15,849 El primer paso que va a enviar va a ser que la unidad de control va a enviar una microorden 10 00:01:15,849 --> 00:01:20,790 para transferir el contenido del contador del programa al registro de dirección de memoria 11 00:01:21,329 --> 00:01:32,310 Veamos el ejemplo. Aquí vemos el contador de programa y como a través de los buses va a ir al registro de dirección de memoria y va a copiar esa dirección. 12 00:01:34,180 --> 00:01:45,680 Después se selecciona la posición de memoria que indica el registro de dirección de memoria y se realiza una lectura depositando en el registro de intercambio de memoria lo que se ha leído, que evidentemente será la instrucción a ejecutar. 13 00:01:45,680 --> 00:01:58,780 ejecutar. Es decir, se lo paso al selector, el 0010, y después lo selecciono y lo que contiene 14 00:01:58,780 --> 00:02:08,000 es una instrucción que va a ir al registro de intercambio de memoria, machacando el valor que 15 00:02:08,000 --> 00:02:15,150 contenga. Se ordena el traslado por parte de la unidad de control de lo que hay en el registro 16 00:02:15,150 --> 00:02:19,729 de intercambio de memoria al registro de instrucción, con lo que en el registro de 17 00:02:19,729 --> 00:02:25,030 instrucción se va a almacenar la instrucción que se va a ejecutar. Cogemos ese valor que es una 18 00:02:25,030 --> 00:02:34,930 instrucción y por el bus del sistema lo llevamos al registro de instrucción. Esa instrucción está 19 00:02:34,930 --> 00:02:40,750 dividida en cuatro bloques y el decodificador es el que va a proceder a interpretar y analizar 20 00:02:40,750 --> 00:02:50,199 la instrucción que en este caso se trata de una resta. Ese es el código de operación que pasamos 21 00:02:50,199 --> 00:03:02,180 al decodificador y le indicamos que se trata de una resta al circuito operacional. ¿Por qué sabemos 22 00:03:02,180 --> 00:03:08,099 que es una resta? Porque en el ejercicio me lo tienen que dar, entonces me dicen las direcciones 23 00:03:08,099 --> 00:03:13,780 y el código de operación a realizar se codifican con cuatro dígitos y que la resta se representa 24 00:03:13,780 --> 00:03:34,180 por el código 0001, como vemos en el decodificador. El contador del programa es incrementado con lo 25 00:03:34,180 --> 00:03:39,060 que su contenido será la dirección de la próxima instrucción a ejecutar y si la instrucción que se 26 00:03:39,060 --> 00:03:44,060 está ejecutando es de ruptura de secuencia, el contador de programa tomará la dirección que 27 00:03:44,060 --> 00:03:49,520 corresponda. En nuestro caso van a ser todas las instrucciones secuenciales para hacerlo mucho más 28 00:03:49,520 --> 00:03:57,060 básico. Entonces vemos que la siguiente instrucción después de la 0010 va a ser la 0011 y ese es el 29 00:03:57,060 --> 00:04:02,819 valor que tenemos que registrar ahora en el contador de programa, que siempre va a registrar 30 00:04:02,819 --> 00:04:06,620 la siguiente dirección de la siguiente 31 00:04:06,620 --> 00:04:10,699 instrucción a ejecutar. Vamos a la fase 32 00:04:10,699 --> 00:04:15,000 de ejecución. Vamos a buscar el primer dato en la memoria. Entonces el registro 33 00:04:15,000 --> 00:04:18,879 de instrucción contendrá una instrucción con el código de operación, pero 34 00:04:18,879 --> 00:04:22,899 también con las direcciones de memoria donde están los dos operandos, así como 35 00:04:22,899 --> 00:04:26,839 la dirección de memoria donde se debe almacenar el resultado. Con lo cual 36 00:04:26,839 --> 00:04:30,720 vamos a coger la dirección del primer operando, que serían 37 00:04:30,720 --> 00:04:37,420 los cuatro bis siguientes del registro de instrucción y lo vamos a pasar al registro 38 00:04:37,420 --> 00:04:43,360 de dirección de memoria. Siempre a través del decodificador y el que se va a encargar 39 00:04:43,360 --> 00:04:49,279 de ello va a ser el secuenciador y lo va a enviar por el bus del sistema. Luego el 1011 40 00:04:49,279 --> 00:04:55,620 lo pasamos al registro de dirección de memoria. Ahora seleccionamos la posición de memoria 41 00:04:55,620 --> 00:05:00,500 que contiene el registro de dirección de memoria y se realiza una lectura depositándose 42 00:05:00,500 --> 00:05:06,639 lo leído, primero operando en el registro de instrucción de intercambio de memoria. 43 00:05:08,300 --> 00:05:16,319 Entonces, el 1011 pasa al selector, seleccionamos en la memoria central el SAT de dirección 44 00:05:16,319 --> 00:05:21,860 y lo que contiene la celda se lo llevamos al registro de intercambio de memoria. 45 00:05:24,459 --> 00:05:31,000 Ya tenemos el primer dato, pero tenemos que colocarle, por lo tanto, la unidad de control 46 00:05:31,000 --> 00:05:37,160 ordena que se transfiera desde ese registro de intercambio de memoria al registro de operando 1 47 00:05:37,160 --> 00:05:43,439 para que el circuito operacional ya tenga en su entrada el primer dato. 48 00:05:45,529 --> 00:05:48,290 A continuación vamos a buscar el segundo dato en la memoria. 49 00:05:48,529 --> 00:05:51,170 El proceso es exactamente el mismo. 50 00:05:51,629 --> 00:05:56,410 Se transfiere la dirección del segundo operando desde el registro de instrucción al registro de dirección de memoria, 51 00:05:57,009 --> 00:05:59,689 siempre a través del decodificador y del secuenciador. 52 00:05:59,689 --> 00:06:13,689 Luego esos cuatro siguientes números los paso al decodificador y se los pasa al registro de dirección de memoria, que sería el 1100, y se los paso, como veremos ahora, al selector. 53 00:06:16,000 --> 00:06:25,459 Luego selecciona la posición de memoria del registro de dirección de memoria y se lee de memoria dejándolo leído, que es el segundo operando en el registro de intercambio de memoria. 54 00:06:25,459 --> 00:06:58,399 Lo seleccionamos, vamos a ir a la 1100, no lo había cambiado todavía y el dato se le pasamos al registro de intercambio de memoria y después se lo transferimos a la entrada de la unidad aritmetecológica, la siguiente entrada, 55 00:06:58,399 --> 00:07:06,480 Porque siempre en una operación necesito tener dos datos. Entonces, para poder restar un número de otro necesito el segundo dato. 56 00:07:07,699 --> 00:07:22,139 Como podemos ver, ya tengo los dos datos y ahora tenemos que realizar la operación y almacenar en memoria el resultado, que sería el tercer paso de esa fase de ejecución. 57 00:07:22,139 --> 00:07:29,240 Entonces el secuenciador envía una micro orden a la unidad aritmético-lógica para que realice la resta. 58 00:07:30,300 --> 00:07:38,180 Como los números están en binario, lo ideal es pasarlo a decimal, restarlo y luego volverlo a pasar a binario. 59 00:07:39,600 --> 00:07:50,699 Entonces la resta sería del 8, que es el número 00000, del 00010, que es el 2. 60 00:07:50,699 --> 00:08:14,779 Y el resultado sería igual a 6. Luego 0000 terminado en 0110. Ya tenemos en el acumulador el resultado de la operación y se lo transferimos al registro de intercambio de memoria. 61 00:08:14,779 --> 00:08:38,230 y se transfiere la dirección donde debe almacenarse el resultado desde el registro de instrucción que es el que lo contiene 62 00:08:38,230 --> 00:08:48,289 una vez analizado por el decodificador y enviado a través del secuenciador al registro de dirección de memoria, que es la 1011. 63 00:08:48,629 --> 00:08:58,059 Se selecciona la posición de memoria donde se va a almacenar el resultado y se escribe en esa posición de memoria lo que hay en el registro de intercambio de memoria. 64 00:08:58,059 --> 00:09:18,049 Aquí es donde podéis observar el fallo, la dirección es la 1011 pero a la hora de ir a seleccionar esa celda me he equivocado y he ido a la 1101 65 00:09:18,049 --> 00:09:25,370 Y como veis el proceso ya estaría terminado 66 00:09:25,370 --> 00:09:33,110 Este vídeo no está subtitulado porque prácticamente el alumno puede ir leyendo las diapositivas 67 00:09:33,110 --> 00:09:45,889 Es más, en un principio tampoco tenía el proceso, se podía ver a través de la voz.