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 rdlb rd, off(rs1)
: Leer un byte de memoria y guardarlo en rdlh rd, off(rs1)
: Leer una media palabra de memoria y guardarla en rdlw rd, off(rs1)
: Leer una palabra de memoria y guardarla en rdld rd, off(rs1)
: Leer una doble palabra de memoria y guardarla en rdsb rs1, off(rs2)
: Almacenar en memoria el byte que hay en rs1sh rs1, off(rs2)
: Almacenar en memoria la media palabra que hay en rs1sw rs1, off(rs2)
: Almacenar en memoria la palabra que hay en rs1sd 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 + 7x3 = 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
- Katia Leal Algara
- Juan González-Gómez (Obijuan)