Вы находитесь на странице: 1из 3

Ejercicio 1

El computador DLX no dispone de instrucciones CALL y RET para llamar a una rutina y volver al
cdigo principal. En cambio, dispone de otras instrucciones como JR RG (salto a una direccin
almacenada en un registro), ADDI (Suma de registro con operando inmediato) , LD, ST, y sobre
todo JAL dest (Salto a una direccin relativa a PC, guardando PC+4 en el registro R31). Se pide el
cdigo necesario para llamar a una rutina en el DLX, emulando, si es necesario, a las
instrucciones CALL y RET. Para resolver el ejercicio, vamos a suponer tres casos:

1) Dentro de la rutina invocada, no se requiere la llamada a otra rutina

En ese caso, la llamada a la rutina (en el cdigo principal) se realiza con JAL rut (siendo rut la
direccin relativa de la primera instruccin de la rutina). Cuando finaliza la rutina, volveremos al
cdigo principal con JR R31 :

2) Dentro de la rutina, se llama a otra subrutina, en la cual no se invoca a otra

Si dentro de la rutina se llamara a una subrutina sin las precauciones adecuadas, perderamos el
contenido de R31, y la capacidad para retomar el cdigo principal. Para resolver este
inconveniente, podemos hacer una copia de seguridad del R31 en un registro adicional (p.e., el
registro R30), y restaurarla antes de abandona la rutina:
3) Dentro de la rutina se llama a otra subrutina, en la que se llama a una tercera.

Siguiendo el procedimiento anterior, podramos utilizar el registro R29 para guardar copia de
seguridad de R30, y proceder as recursivamente mientras sea necesario, y mientras no agotemos
los registros disponibles. El alumno puede observar que estaramos usando el banco de registros
para almacenar una lista de direcciones de retorno anidadas, pero se da la circunstancia de que
dicha lista tendra una capacidad muy limitada (30, como mucho). Por qu no usar la memoria,
cuya capacidad es prcticamente ilimitada? Ahora, en lugar de usar el R30 (y sucesivos) como
almacn de copias de seguridad, se puede usar el registro como puntero al almacn de copias de
seguridad (pila).

Bsicamente, al iniciar una rutina, copiamos el registro R31 a la memoria, y dejndolo libre para
una instruccin JAL. El lugar de la memoria est establecido previamente (direccin de inicio de la
pila), y su valor se almacena en el registro R30. Tras la copia en memoria, cambiamos el valor del
puntero, para que, en caso de que necesitemos guardar otra direccin de retorno en la pila, no
machaque al anterior. Cuando termine la rutina, restablecemos el valor del puntero, y despus
restablecemos el valor del R31, dejndolo listo para volver al programa principal con JR R31. La
nica limitacin es la zona de memoria que reservemos para ir almacenando direcciones de
retorno. Si no se tiene cuidado, tenemos el riesgo de provocar un fallo en el cdigo de nombre
muy conocido (y demasiado frecuente en ciertos sistemas operativos): Stack Overflow.
Ejercicio 2. Preguntas cortas:

Cuntos accesos a memoria requiere un DLX para la instruccin ADD R3, R4, R5?

Slo 1, para buscar la instruccin. Todos los datos estn en registros.

Cuntos accesos a memoria requiere un DLX para la instruccin ADDI R3, R4,#2?

Slo 1, para buscar la instruccin. Todos los datos estn en registros o en el RI.

Cuntos accesos a memoria requiere un DLX para la instruccin LW R3, 0(R5)?

Dos: uno para buscar la instruccin y otro para traer un dato de memoria

Cuntos accesos a memoria requiere un DLX para la instruccin SW R3, 10(R0)?

Dos: uno para buscar la instruccin y otro para guardar un dato de memoria

Cul es el mnimo n de accesos a memoria de cualquier instruccin?

Uno: siempre hay que buscar la instruccin

Cul es el n de accesos a memoria de una instruccin RET?

Dos: Uno para buscar la instruccin, y otro para trasladar al PC un valor de la pila

Cul es el n de accesos a memoria de una instruccin CALL?

Dos: Uno para buscar la instruccin, y otro para trasladar el PC a un valor de la pila

Y las instrucciones PUSH R3 y POP R3?

Dos, por la misma razn que en CALL y RET, cambiando PC por R3

Invente una instruccin con 6 accesos a memoria

MOVE R4, [[[[R3]]]] (se buscan 1 instruccin, 4 punteros y un dato)

Un cdigo DLX tiene un 15% de loads y un 5% de stores cuntas veces accede a memoria?

Si ejecuta N instrucciones, la media ponderada es 0.8N1+0.15N 2+0,05N 2= 1.2N

Cul es el porcentaje de almacenamientos en memoria respecto al total de accesos?

0.05N/1.2N x 100 = 4.16%

Cul es el porcentaje de bsquedas en memoria respecto al total de accesos?

100-4,16 = 95,83% (incluye la bsqueda de instrucciones y de datos)

Вам также может понравиться