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 rd
  • addi rd, rs1, valor: Almacer en rd la suma rs1 + valor
  • sb rs1, (rs2): Almacenar en memoria el byte que hay en rs1, en la dirección indicada en rs2
  • sh rs1, (rs2): Almacenar en memoria la media palabra que hay en rs1, en la dirección indicada en rs2
  • sw 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

Licencia

Enlaces