Examen: Parcial 2:2022_04_01:Robotica - myTeachingURJC/Arq-computadores-01 GitHub Wiki

Examen Parcial 2: 2022-04-01. Robótica

  • Tiempo: 50 minutos
  • Tipo de examen: Presencial. Realizado a través de Aula Virtual. Acceso a la wiki (Internet)
  • Temario: S4, S4b y S5

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 64-bits que dispone de 32 registros de propósito general (x0-x31). La ordenación que usa es little-endian. Para acceder a los datos de la memoria utiliza un direccionamiento indirecto con desplazamiento. 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
  • lb rd, off(rs1): Leer un byte de memoria y guardarlo en rd
  • lh rd, off(rs1): Leer una media palabra de memoria y guardarla en rd
  • lw rd, off(rs1): Leer una palabra de memoria y guardarla en rd
  • ld rd, off(rs1): Leer una doble palabra de memoria y guardarla en rd
  • sb rs1, off(rs2): Almacenar en memoria el byte que hay en rs1
  • sh rs1, off(rs2): Almacenar en memoria la media palabra que hay en rs1
  • sw rs1, off(rs2): Almacenar en memoria la palabra que hay en rs1
  • sd rs1, off(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 0xE010 y 0xF000. Los valores están en HEXADECIMAL

Dir 0 1 2 3 4 5 6 7 8 9 A B C D E F
0xE010 FF A8 18 73 10 20 30 40 CA FE BA CA DA BA CA CA
0xF000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Se pide:

a) (2.5 ptos) Indicar el valor de los registros del x1 al x5 cuando se ejecutan estas instrucciones (secuencialente):

li x1, 0xE010
lb x2, 7(x1)
lh x3, 1(x1)
lw x4, 4(x1)
ld x5, 8(x1)

b) (2.5 ptos) Suponiendo que inicialmente los registros del x1 al x5 contienen los siguientes valores: x1=0,x2=0x73, x3=0x1801, x4=0x40302010, x5=0xCACABADACABAFECA

Escribe el contenido de los 16 bytes de memoria situados desde la dirección 0xF000 en adelante al terminar de ejecutarse las siguientes instrucciones:

li x1, 0xF000
sb x2, 8(x1)
sh x3, 9(x1)
sw x4, 0xB(x1)
sd x5, 0(x1)  #... <- Había errata en Enunciado. Ponía sb x5,0(x1)

Debido a la errata, ambas soluciones (con sb y con sd) se dan por válidas

Solución al problema

a)

  • x1 = 0xE010. Asignado por la instruccion li (direccionamiento inmediato)
  • x2 = 0x40. Se lee el Byte situado en la direccion E010 + 7
  • x3 = 0x18A8. Se lee la media palabra (2 bytes) de la direcion E010 + 1. El byte de E011 es el de menos peso (A8)
  • x4 = 0x40302010. Se lee la palabra (4 bytes) de la direccion E010 + 4. El byte de E014 es el de menor peso (10)
  • x5 = CACABADACABAFECA. Se lee la doble palabra (8 bytes) de la direccion E010 + 8. El byte de E018 es el de menor peso (CA)

b)

  • Se accede siempre a la direccion base 0xF000
  • El byte 0x73 se guarda en F000 + 8
  • La media palabra 0x1801 se guarda en F000 + 9. En F009 se almacena el byte de menor peso (01)
  • La palabra 0x40302010 se guarda en F000 + B. En F00B se almacena el byte de menor peso (10)
  • La doble palabra 0xCACABADACABAFECA se guarda en F000 + 0. Se almacena el byte de menor peso en F000 (CA)

El contenido de la memoria es (comenzando por la dirección F000):

0xCA, 0xFE, 0xBA, 0xCA, 0xDA, 0xBA, 0xCA, 0xCA, 0x73, 0x01, 0x18, 0x10, 0x20, 0x30, 0x40, 0x00

Si lo representamos en un tabla quedaría así:

Dir 0 1 2 3 4 5 6 7 8 9 A B C D E F
0xE010 FF A8 18 73 10 20 30 40 CA FE BA CA DA BA CA CA
0xF000 CA FE BA CA DA BA CA CA 73 01 18 10 20 30 40 0

NOTA: En el problema del examen había una errata. Donde dice sb x5,0(x1) debería decir sd x5, 0(x1). Por tanto, ambas soluciones se dan como buenas. La solución teniendo en cuenta la instrucción sb x5,0(x1) sería esta:

Dir 0 1 2 3 4 5 6 7 8 9 A B C D E F
0xE010 FF A8 18 73 10 20 30 40 CA FE BA CA DA BA CA CA
0xF000 CA 00 00 00 00 00 00 00 73 01 18 10 20 30 40 0

Se guarda el byte de menor peso de x5 en la dirección 0xF000. El resto de posiciones permanecen con su antiguo valor (0)

Autores

Licencia

Enlaces