Examen: Parcial 2:2022_11_30:GISAM - myTeachingURJC/Arq-computadores-01 GitHub Wiki
Examen Parcial 2: 2022-11-30. GISAM
- Tiempo: 50 minutos
- Tipo de examen: Presencial. Realizado a través de Aula Virtual. Acceso a la wiki (Internet)
- Temario: S5-S8
Contenido
Enunciado
El examen se ha realizado a través de Aula virtual. Tiene dos partes: Test y un problema
Test (5 ptos)
- Realizado a través de Aula virtual
- 10 preguntas tipo test
- Las respuesats incorrectas restan un 25% del valor de la pregunta
- Solución disponible en Aula virtual
Problema (5 ptos): Ordenacion/alineaiento/direccionamiento
Tenemos un computador de 32-bits que dispone de 16 registros de propósito general (x0-x15). La anchura de la memoria es de 32-bits. La ordenación que usa es Big-endian. Para acceder a los datos de la memoria utiliza un direccionamiento indirecto. Puede acceder tanto a datos alineados como no alineados. Estas son algunas de las instrucciones disponibles:
li rd, valor
: Carga del valor inmediato en el registro rdaddi rd, rs1, valor
: Almacer en rd la suma rs1 + valorsb rs1, (rs2)
: Almacenar en memoria el byte que hay en rs1, en la dirección indicada en rs2sh rs1, (rs2)
: Almacenar en memoria la media palabra que hay en rs1, en la dirección indicada en rs2sw rs1, (rs2)
: Almacenar en memoria la palabra que hay en rs1, en la dirección indicada en rs2
Resuelve los siguientes apartados, calculando el resultado y justificando cómo lo has obtenido
a) (2.5 ptos) Suponiendo que inicialmente los registros contienen los siguientes valores: x1=0
,x2=0x0022
, x3=0x3344
, x4=0xBACA
, x5=0xCABAFECA
, indica el contenido de los 16 bytes de memoria situados desde la direción 0x2002FFF0, al ejecutarse las siguientes instrucciones. Inicialmente la memoria de datos contiene 0x00 en todas sus posiciones
li x1, 0x2002FFF0
sb x2, (x1)
addi x1,x1,1
sb x2, (x1)
addi x1,x1,6
sh x3, (x1)
addi x1,x1,2
sw x4, (x1)
li x1, 0x2002FFFF
sw x1,(x1)
Indica el resultado en forma de tabla, rellenando TODOs los valores
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x2002FFF0 | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
b) (2.5 ptos) Indica cuántos accesos a memoria se realizan con cada instrucción de almacenamiento (store) del programa anterior
Solución al problema
Esta es la situación inicial: La memoria contiene 0x00 en todas sus posiciones:
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x2002FFF0 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
- El registro x1 se inicializa con el valor
0x2002FFF0
. Es el registro que se usa para acceder a memoria (direccionamiento indirecto) - Primer store: Se almacena el registro x1 en la dirección 0x2002FFF0. 0x22 --> (0x2002FFF0)
- Segundo store: Se almacena el mismo valor en la dirección siguiente: 0x22 --> (0x2002FFF1)
- Tercer store: Se almacena el valor 0x3344 a partir de la dirección 0x2002FFF7. Como es big endian los valores guardados son: 0x33 y 0x44
- Cuarto store: Se almacena el valor 0xBACA a partir de la dirección 0x2002FFF9. Como es big endian los valores son: 0x00, 0x00, 0xBA y 0xCA
- Quinto store: Se actualiza el registro x1 con el valor 0x2002FFFF. Se guarda la palabra en x1 (0x2002FFFF) a partir de la dirección 0x2002FFFF: Como es big endian los valores serán: 0x20, 0x02, 0xFF y 0xFF
La memoria final quedaría así:
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x2002FFF0 | 22 | 22 | 0 | 0 | 0 | 0 | 0 | 33 | 44 | 0 | 0 | BA | CA | 0 | 0 | 20 |
0x20030000 | 02 | FF | FF | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Pero cómo sólo piden los 16 primeros bytes, el resultado es este:
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x2002FFF0 | 22 | 22 | 0 | 0 | 0 | 0 | 0 | 33 | 44 | 0 | 0 | BA | CA | 0 | 0 | 20 |
b) La memoria tiene una achuran de 32-bits, por lo que la dibujamos así (Con los valores que se han escrito)
Direccion | +0 | +1 | +2 | +3 |
---|---|---|---|---|
0x2002FFF0 | 22 | 22 | ||
0x2002FFF4 | 33 | |||
0x2002FFF8 | 44 | 0 | 0 | BA |
0x2002FFFC | CA | 20 | ||
0x20030000 | 02 | FF | FF |
- Primer store: 1 acceso (es la escritura de 1 byte)
- Segundo store: 1 acceso (es la escritura de 1 byte)
- Tercer store: Se escribe una meida palabra en las direcciones 0x2002FFF7 y 0x2002FFF8: 2 accesos
- Cuarto store: Se escribe una palabra en las direcciones 0x2002FFF9, 0x2002FFFA, 0x2002FFFB y 0x0x2002FFFC: 2 accesos (Palabra 0x2002FFF8 y 0x2002FFFC)
- Quinto store: Se escribe una palabra en las direcciones 0x2002FFFF, 0x20030000, 0x2003001 y 0x2003002: 2 accesos (Palabras 0x2002FFFC y 0x2003000)
En total se necesitan realizar 8 accesos a memoria
Autores
- Katia Leal Algara
- Juan González-Gómez (Obijuan)