Examen: Parcial 2:2026_04_13:Robotica - myTeachingURJC/Arq-computadores-01 GitHub Wiki

Examen Parcial: 13 de abril de 2026. Datos
- Titulación: Robótica
- Fecha: 13 de abril de 2026
- Tipo de examen: Presencial.
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
- 9 preguntas tipo test
- Las respuestas incorrectas restan un 33% 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 a x31). La anchura de 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, rs, valor: Suma el valor del registro rs más valor y lo almacena en el registro rdlb rd, rs1: Leer un byte de memoria y guardarlo en rdlh rd, rs1: Leer una media palabra de memoria y guardarla en rdlw rd, rs1: Leer una palabra de memoria y guardarla en rdld rd, rs1: Leer una doble palabra de memoria y guardarla en rdsb rs1, rs2: Almacenar en memoria el byte que hay en rs1sh rs1, rs2: Almacenar en memoria la media palabra que hay en rs1sw rs1, rs2: Almacenar en memoria la palabra que hay en rs1sd 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 0x10A0 y 0x10B0. Los valores están en HEXADECIMAL.
| Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0x10A0 | 1A |
1B |
1C |
1D |
A1 |
A2 |
A3 |
A4 |
AA |
BB |
CC |
DD |
A0 |
1F |
1E |
1A |
| 0x10B0 | 00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
Se pide:
a) Indicar el valor de los registros del x10 al x13 cuando se ejecutan estas instrucciones secuencialmente:
li x1, 0x10A6
li x2, 0x10A2
li x3, 0x10AB
lb x10, x1
lh x11, x2
lw x12, x3
addi x1, x1, 4
ld x13, x1
b) Suponiendo que inicialmente los registros del x21 al x24 contienen los siguientes valores:
x21=0x44332211DDCCBBAAx22=0x2023x23=0x1A2B3C4Dx24=0x22
Escribe el contenido de los 16 bytes de memoria situados desde la dirección 0x10B0 en adelante al terminar de ejecutarse las siguientes instrucciones:
li x1, 0x10B8
li x2, 0x10B2
li x3, 0x10B0
sd x21, x1
sh x22, x1
sw x23, x2
sb x24, x3
c) Indica el número de accesos a memoria que emplea cada instrucción de load o store de los dos apartados anteriores (no tengas en cuenta el acceso a memoria para leer la instrucción):
d) Si el procesador no permitiera acceder a datos no alineados, ¿qué instrucciones de los dos apartados anteriores darían error?
Solución al problema
a)
Analizamos las instrucciones de carga ejecutadas de forma secuencial. Al ser un sistema Big-Endian, el byte más significativo se encuentra en la dirección de memoria más baja.
-
lb x10, x1(x1 = 0x10A6):- Se lee el byte en la posición 0x10A6. El valor de 0x10A6 corresponde a
A3. - Resultado:
x10 = 0xA3
- Se lee el byte en la posición 0x10A6. El valor de 0x10A6 corresponde a
-
lh x11, x2(x2 = 0x10A2):- Se lee una media palabra (2 bytes) desde 0x10A2. Los bytes son
1Cy1D. - Resultado:
x11 = 0x1C1D
- Se lee una media palabra (2 bytes) desde 0x10A2. Los bytes son
-
lw x12, x3(x3 = 0x10AB):- Se lee una palabra (4 bytes) desde 0x10AB. Los bytes consecutivos son
DD,A0,1Fy1E. - Resultado:
x12 = 0xDDA01F1E
- Se lee una palabra (4 bytes) desde 0x10AB. Los bytes consecutivos son
-
ld x13, x1(x1 = 0x10AA tras eladdi):- Se lee una doble palabra (8 bytes) desde 0x10AA. Los bytes son
CC,DD,A0,1F,1E,1Ay los dos ceros iniciales de la siguiente fila00,00. - Resultado:
x13 = 0xCCDDA01F1E1A0000
- Se lee una doble palabra (8 bytes) desde 0x10AA. Los bytes son
b)
Se muestra el estado de la memoria desde 0x10B0 tras ejecutar las instrucciones de almacenamiento. Inicialmente, esta zona estaba a cero.
sd x21, x1(x1 = 0x10B8): Almacena los 8 bytes de x21 (44332211DDCCBBAA) desde 0x10B8 hasta 0x10BF.sh x22, x1(x1 = 0x10B8): Escribe20y23en 0x10B8 y 0x10B9, sobrescribiendo el inicio del dato anterior.sw x23, x2(x2 = 0x10B2): Escribe1A,2B,3Cy4D(4 bytes) a partir de 0x10B2.sb x24, x3(x3 = 0x10B0): Escribe el byte22en 0x10B0.
Los valores en memoria quedan así:
| Dirección | 0x10B0 | 0x10B1 | 0x10B2 | 0x10B3 | 0x10B4 | 0x10B5 | 0x10B6 | 0x10B7 | 0x10B8 | 0x10B9 | 0x10BA | 0x10BB | 0x10BC | 0x10BD | 0x10BE | 0x10BF |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Valor | 22 |
00 |
1A |
2B |
3C |
4D |
00 |
00 |
20 |
23 |
22 |
11 |
DD |
CC |
BB |
AA |
c)
Número de accesos a memoria de datos para cada instrucción:
| Instrucción | Tipo | Accesos | Justificación |
|---|---|---|---|
lb x10, x1 |
Load | 1 | Acceso simple a un byte. |
lh x11, x2 |
Load | 1 | Media palabra alineada en dirección par. |
lw x12, x3 |
Load | 2 | Palabra desalineada (dirección impar 0x10AB). |
ld x13, x1 |
Load | 3 | Doble palabra que cruza tres fronteras de bus de 32 bits. |
sd x21, x1 |
Store | 2 | Doble palabra (64 bits) en bus de 32 bits. |
sh x22, x1 |
Store | 1 | Media palabra alineada. |
sw x23, x2 |
Store | 2 | Palabra desalineada (0x10B2 no es múltiplo de 4). |
sb x24, x3 |
Store | 1 | Acceso simple a un byte. |
d)
Si el procesador prohibiera el acceso a datos no alineados, las siguientes instrucciones fallarían:
lw x12, x3: Intenta acceder a una palabra en 0x10AB (no es múltiplo de 4).ld x13, x1: Intenta acceder a una doble palabra en 0x10AA (no es múltiplo de 8).sw x23, x2: Intenta escribir una palabra en 0x10B2 (no es múltiplo de 4).
Autores
- Miguel Ángel de Miguel
- Juan Ignacio Pérez
- Obijuan