Guía de resolución de práctica:
Pasando a citar los
pasos entro en profundidad a explicar aquellos que puedan generar dudas.
1. Abra el programa de nombre Programa1.
2. Pinche sobre el botón
ensamblar y compruebe que no se produce ningún error.
3. Si ha habido errores repase
la sintaxis de las instrucciones ayudándose del manual. En caso contrario,
pique sobre ejecutar para iniciar el proceso de simulación de ejecución del
programa recién creado.
4. Observe en la nueva ventana la zona que se destacan
en la figura 2 además del código ubicado en el segmento de texto.
Vemos en la imagen un camino de datos en donde
en naranja se resaltan las señales de control, en naranja levemente resaltado
encontramos que esas señales de control son las que van a intervenir durante el
paso de datos, y las líneas remarcadas en azul son aquellas por las que deben
pasar los datos en las fases de la instrucción.
5. Haciendo uso del botón “Ciclo
siguiente” avance hasta la primera instrucción lw.
6. Localice e indique los elementos necesarios del
camino de datos que realiza esta instrucción de tipo I:
La
respuesta a esta pregunta es que se activan PC para incrementarse en 4 y
apuntar a la siguiente instrucción, y la unidad de control al leer los bits del
31 al 26 activa los siguientes : LeerMem(que lee de memoria), MemoReg (activa
el multiplexor para permitir el paso de datos si esta en 0 el dato habrá salido
de memoria y si esta en 1 no lo habrá necesitado), ALUOp (que selecciona la
operación que va a realizar, FuenteALU( Que activa el multiplexor si esta en 0
permite el dato de un registro y si esta a 1 permitira que sea el offset de la
instrucción) y por último EscrReg (se encarga de almacenar el resultado en un
registro).
7. Las conexiones entre los elementos del camino de
datos aparecen resaltados en verde. Describa con palabras y con lenguaje RTL
todas las operaciones que tienen lugar hasta completar esta instrucción lw
$s0,0($t1).
1º PC
incrementado para la siguiente instrucción.
2º Mem.
Instrucciones decodifica la instrucción y la identifica.
3º Extension
de signo entra 0x0 en 32 bits.
4º ALU opera.
5º Lee de
memoria y pasa el dato para que se cargue en el registro destino.
Y respecto a
la unidad de control :
1ºRegDest: es
0, para que entre en el registro $s0.
2ºFuentePC: es
0 por que no es de salto.
3ºSaltoCond:es
0 porque no se utiliza.
4ºLeerMem:es 1
porque lee el dato de $t1.
5ºMemoReg:es 1
dado que el dato sale de memoria desplazado(aunque el desplazamiento sea 0).
6ºALUOp:Suma.
7ºEscriMem:es
0 porque no se escribe nada.
8ºFuenteALU:
es 1 para que sume el offset.
9ºEscrReg:será
$s0.
10ºEscrDato:0
porque no escribe en memoria.
Indique el valor, en hexadecimal, que toman los
siguientes registros y buses:
-Nota
aclaratoria: Ante la duda poner las respuestas de todas las formas posibles.
PC: Pasa
a valer en hexadecimal 0x00400008.
Instrucción [31-0]:La instrucción sería en binario agrupado en
grupos de 4 bits para verlo más sencillo
1000 1011
0011 0000 0000 0000 0000 0000 y en hexadecimal 0x8d300000.
Instrucción [25-21]:En este caso al coger los bits vemos que son
11001 = $t1 = 0x19 en hexadecimal.
Instrucción [20-16]:En este caso los bits son 10000 = $s0 = 0x10 en hexadecimal.
Instrucción [15-0]:Esta parte corresponde al Offset que vemos
que es todo 0 (0x0000).
Bus de 32 bits tras la extensión de signo: Para instrucciones de 32 bits la extensión es
de 8 ceros por lo que sería 0x00000000.
Dato leído 1:Siendo $t1 vemos que su dirección corresponde
a 0x10010000.
Resultado de la ALU (o dirección de memoria de datos): En este caso sería la misma que la dirección
de memoria desplazada 0 posiciones y por tanto corresponde a 0x10010000.
Dato leído en memoria de datos: Lee el dato con valor 10 que es 0x0000000a en
hexadecimal.
Dato a escribir en el banco de registros: En este caso ya que el
desplazamiento es 0 el resultado sería el mismo que el leído en la memoria de
datos y por tanto valdría 10 = 0x0000000a
9. Haciendo uso del botón “Ciclo siguiente” avance
hasta la última instrucción lw.¿Cambia en algo el proceso ya descrito de
realización de la instrucción lw?. ¿Qué valores toman ahora los
siguientes registros y buses?
Instrucción [15-0]: este offset corresponde a 0x000c que es un
desplazamiento de 12
Bus de 32 bits tras la extensión de signo: Al rellenar el hueco para que sea de 32 bits
quedaría como la anterior pero con 4 ceros más por la izquierda de manera que
se vería 0x0000000c pero aun valdría 12.
10. Haciendo uso del botón “Ciclo siguiente” avance
hasta la instrucción add. Observando el camino de datos destacado en
verde, explique con sus palabras qué operaciones tienen lugar para la
realización de la instrucción add.
Se
incrementa el contador de programa o PC en 4 para que apunte a la siguiente
instrucción, la instrucción selecciona los registro con los que va a operar
pasándolos por la ALU para sumarlos, y mediante activaciones de multiplexores
llegan de vuelta al registro destino sin pasar por memoria.
11. ¿Se trata del mismo camino de datos utilizado para
la instrucción Lw? Justifique su respuesta.
Son caminos de
datos diferentes por varios motivos:
la instrucción ADD no necesita acceder a memoria ya que trabaja con los
registros, y por tanto será más rápida de ejecutar.
Por tanto las señales de control también se verán modificadas para que
el dato llegue al registro destino sin pasar por dicha memoria.
12. Vuelva a la instrucción lw y observe cómo
algunas líneas de control aparecen destacadas sobre las demás usando otro tono
del color naranja. ¿Qué líneas de control actúan para cada una de las
instrucciones analizadas?
Lw:
Las líneas de control que se activan son :
Activados: PC
= PC+4 y respecto a la unidad de control le llegan bits del 31-26 y activa
LeerMem,
MemoReg, ALUOp,
FuenteALU y EscrReg con EscrDato.
Explico este último ya que los demás los explique anteriormente, este
último permite el paso del dato activando el multiplexor.
Add: en esta instrucción las líneas activadas son PC para
incrementarse en 4 para apuntar a la siguiente instrucción en la unidad de
control (RegDest, ALUOp y EscrReg) y registros varios para que el dato llegue a
registro $t0.
No hay comentarios:
Publicar un comentario