Examen: Parcial 2:2023_11_17:Teleco - myTeachingURJC/Arq-computadores-01 GitHub Wiki

Examen Parcial 2: 2023-11-17. Teleco

  • Tiempo: 50 minutos
  • Tipo de examen: Presencial. Realizado a través de Aula Virtual. Acceso a la wiki (Internet)
  • Temario: S5,S6,S7 y 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/alineamiento/direccionamiento

Tenemos un computador de 64-bits que dispone de 32 registros de propósito general (x0-x31). La anchura de memoria es de 64 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, rs valor: Suma el valor del registro rs más valor y lo almacena en el registro rd
  • lb rd, (rs1): Leer un byte de memoria y guardarlo en rd
  • lh rd, (rs1): Leer una media palabra de memoria y guardarla en rd
  • lw rd, (rs1): Leer una palabra de memoria y guardarla en rd
  • ld rd, (rs1): Leer una doble palabra de memoria y guardarla en rd
  • sb rs1, (rs2): Almacenar en memoria el byte que hay en rs1
  • sh rs1, (rs2): Almacenar en memoria la media palabra que hay en rs1
  • sw rs1, (rs2): Almacenar en memoria la palabra que hay en rs1
  • sd rs1, (rs2): Almacenar en memoria la doble palabra que hay en rs1

Este es un volcado de la memoria, correspondiente a las direcciones que comienzan en 0x010A0 y 0x010B0. Los valores están en HEXADECIMAL.

Dirección 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x010A0 AA BB CC DD 01 02 03 04 A4 A3 A2 A1 A0 1F 1E 1A
0x010B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Se pide:

a) (2.5 ptos) Indicar el valor de los registros del x1 al x5 cuando se ejecutan estas instrucciones (secuencialente), así como el número de accesos a memoria que emplea cada instrucción de load para leer los datos:

li x1, 0x010A6
lb x2, (x1)
lh x3, (x1)
lw x4, (x1)
addi x1, x1, 6
ld x5, (x1)

b) (2.5 ptos) Suponiendo que inicialmente los registros del x1 al x5 contienen los siguientes valores: x1=0,x2=0x22, x3=0x2023, x4=0x1A2B3C4D, x5=0x44332211DDCCBBAA

Escribe el contenido de los 16 bytes de memoria situados desde la dirección 0x010B0 en adelante al terminar de ejecutarse las siguientes instrucciones e indica también el número de accesos a memoria que emplea cada instrucción de store para guardar los datos.:

li x1, 0x010B2
sd x5, (x1)
sh x3, (x1)
addi x1, x1, 10
sw x4, (x1)
sb x2, (x1)

Solución al problema

a)

El procesador usa ordenación big endian por lo que el byte leido en la primera posición es el de mayor peso

  • Inst 1: Cargar el valor inmediato 0x010A6 en x1. Las instrucciones li no acceden a memoria

    x1 = 0x010A6

  • Inst 2: Leer el byte de la dirección 0x010A6. Para leer 1 byte siempre se realiza 1 único acceso a memoria.

    x2 = 0x03, 1 acceso a memoria

  • Inst 3: Leer la media palabra de la dirección 0x010A6. La media palabra se encuentra en el primer bloque de memoria de 8 bytes, por lo que se raliza 1 único acceso.

    x3 = 0x0304, 1 acceso a memoria

  • Inst 4: Leer la palabra de la dirección 0x010A6. La palabra se encuentra la mitad en el primer bloque de 32 bits, y la otra mitad en el siguiente, por lo que se necesitan 2 accesos a memoria

    x4 = 0x0304A4A3, 2 accesos a memoria

  • Inst 5: Sumar el valor 6 al registro x1. Las instrucciones li no acceden a memoria

    x1 = 0x010AC

  • Inst 6: Leer la doble palabra de la dirección 0x010AC. Como son 8 bytes de la doble palabra, se leen los 0 que hay en las siguientes direcciones de memoria. Se realizan 2 accesos por no estar en una dirrección alineada

    x5 = 0xA01F1E1A00000000, 2 accesos a memoria

b)

  • Inst 1:

Guarda en el registro x1 el valor de la dirección 0x010B2

  • Inst 2:

Guarda la doble palabra de x5 a partir de la dirección 0x010B2

Dirección 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x010B0 00 00 44 33 22 11 DD CC BB AA 00 00 00 00 00 00

Realiza 2 accesos a memoria porque se almacena ocupando dos espacios de palabra doble (0x10B0-0x10B7 y 0x10B8-0x10BF)

  • Inst 3:

Guarda la media palabra de x3 a partir de la dirección 0x010B2

Dirección 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x010B0 00 00 20 23 22 11 DD CC BB AA 00 00 00 00 00 00

Realiza 1 acceso a memoria porque se almacena en el primer bloque (0x10B0-0x10B7)

  • Inst 4:

Suma 10 al valor de x1: x1 = 0x010B2 + 10 = 0x010BC

  • Inst 5:

Guarda la palabra de x4 a partir de la dirección 0x010BC

Dirección 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x010B0 00 00 20 23 22 11 DD CC BB AA 00 00 1A 2B 3C 4D

Realiza 1 acceso a memoria porque se almacena en el segundo bloque (0x10B8-0x10BF)

  • Inst 6:

Guarda el byte de x2 en la dirección 0x010BC

Dirección 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x010B0 00 00 20 23 22 11 DD CC BB AA 00 00 22 2B 3C 4D

Realiza 1 acceso a memoria porque tiene tamaño de 1 byte

El resultado final de la memoria por lo tanto es:

Dirección 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x010B0 00 00 20 23 22 11 DD CC BB AA 00 00 22 2B 3C 4D

Autores

Licencia

Enlaces