Examen: Parcial 2:2025_11_13:Teleco - myTeachingURJC/Arq-computadores-01 GitHub Wiki

Examen Parcial 2: 2025-11-13. Teleco
- Tiempo: 50 minutos
- Tipo de examen: Presencial. Realizado a través de Aula Virtual. Acceso a la wiki (Internet)
- Temario: S4,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 33% del valor de la pregunta
- Solución disponible en Aula virtual
Problema (5 ptos): Ordenacion/alineamiento/direccionamiento
Tenemos un computador de 32-bits con las siguientes características:
- Registros: 16 registros de propósito general (
x0-x15). - Endianness: Big-endian.
- Direccionamiento: Directo.
- Anchura de memoria: 16 bits.
- Restricciones: Sólo permite el acceso a datos alineados.
Instrucciones Disponibles
lb rs1, dir: Leer un byte de memoria (con extensión de signo) y guardarlo enrs1.lh rs1, dir: Leer una media palabra (16 bits) de memoria y guardarla enrs1.lw rs1, dir: Leer una palabra (32 bits) de memoria y guardarla enrs1.sb rs1, dir: Almacenar en memoria el byte (8 bits menos significativos) que hay enrs1.sh rs1, dir: Almacenar en memoria la media palabra (16 bits menos significativos) que hay enrs1.sw rs1, dir: Almacenar en memoria la palabra completa que hay enrs1.
Estado de la Memoria (Volcado Hexadecimal)
Los valores están en HEXADECIMAL.
| Dirección | 0xFF10 | 0xFF11 | 0xFF12 | 0xFF13 | 0xFF14 | 0xFF15 | 0xFF16 | 0xFF17 | 0xFF18 | 0xFF19 | 0xFF1A | 0xFF1B | 0xFF1C | 0xFF1D | 0xFF1E | 0xFF1F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Valor | 0xAA |
0xBB |
0xCC |
0xDD |
0x10 |
0xA0 |
0xB0 |
0xFF |
0xBE |
0xCA |
0xCE |
0x0A |
0x0C |
0xAB |
0xFA |
0xCA |
Código a Ejecutar
#-- BLOQUE I (Cargas)
lb x10, 0xFF13
lh x11, 0xFF1A
lh x12, 0xFF11
lw x13, 0xFF1A
lw x14, 0xFF18
ld x15, 0xFF18
lb x16, 0xFF10
#-- BLOQUE II (Almacenamiento)
sb x10, 0xFF22
sw x11, 0xFF20
sh x12, 0xFF25
sw x13, 0xFF2A
sw x14, 0xFF2C
Sabiendo que todos los registros y el resto de la memoria están inicializados a 0, se pide:
a) Indica qué instrucciones darían error al ejecutarse en el procesador y por qué
b) Considera sólo las instrucciones que sí se ejecutarían (no darían error) y determina el valor de los registros que cambian tras ejecutar el Bloque I
c) Escribe los valores para cada dirección de memoria que estarían almacenados almacenados desde la dirección 0xFF20 a la 0xFF2F después de ejecutar las instrucciones que no darían error del Bloque II.
d) Para cada instrucción válida, indica el número de accesos a memoria que produciría (no consideres el acceso a memoria para leer la propia instrucción)
Solución al problema
a)
| Instrucción | Tipo de Error | Justificación |
|---|---|---|
lh x12, 0xFF11 |
Fallo de Alineamiento | Una media palabra (2 bytes) requiere una dirección par (múltiplo de 2). 0xFF11 es impar. |
lw x13, 0xFF1A |
Fallo de Alineamiento | Una palabra (4 bytes) requiere una dirección múltiplo de 4. 0xFF1A (termina en 26 decimal) no es divisible por 4. |
ld x15, 0xFF18 |
Instrucción Ilegal | La instrucción ld (Load Double) no pertenece al set de instrucciones definido para un procesador de 64 bits. |
lb x16, 0xFF10 |
Registro Inválido | El procesador tiene registros del x0 al x15. El registro x16 no existe. |
sh x12, 0xFF25 |
Fallo de Alineamiento | Intenta guardar 16 bits en una dirección impar (0xFF25). |
sw x13, 0xFF2A |
Fallo de Alineamiento | Intenta guardar 32 bits en una dirección no divisible por 4 (0xFF2A). |
b)
Analizamos solo las instrucciones válidas del Bloque I. Se asume extensión de signo al cargar bytes (lb) y medias palabras (lh) en registros de 32 bits.
-
lb x10, 0xFF13:- Lee el valor
0xDDen la dirección0xFF13. - Resultado:
x10 = 0xDD
- Lee el valor
-
lh x11, 0xFF1A:- Lee 2 bytes en
0xFF1Ay0xFF1B. Valores:0xCEy0x0A. - Big-endian forma:
0xCE0A. - Resultado:
x11 = 0xCE0A
- Lee 2 bytes en
-
lw x14, 0xFF18:- Lee 4 bytes desde
0xFF18alineado. - Valores consecutivos:
0xBE,0xCA,0xCE,0x0A. - Resultado:
x14 = 0xBECACE0A
- Lee 4 bytes desde
(Nota: también serían válidos los resultados considerando la extensión de signo).
c)
Ejecutamos las instrucciones válidas del Bloque II en orden secuencial:
sb x10, 0xFF22: Escribe el byte menos significativo de x10 (0xDD) en0xFF22.sw x11, 0xFF20: Escribe la palabra de x11 (0x0000CE0A) ocupando 4 bytes desde0xFF20.0xFF20<-0x000xFF21<-0x000xFF22<-0xCE(Nota: Esta escritura sobrescribe el valor0xDDpuesto por la instrucción anterior).0xFF23<-0x0A
sw x14, 0xFF2C: Escribe la palabra de x14 (0xBECACE0A) ocupando 4 bytes desde0xFF2C.
| Dirección | 0xFF20 | 0xFF21 | 0xFF22 | 0xFF23 | 0xFF24 | 0xFF25 | 0xFF26 | 0xFF27 | 0xFF28 | 0xFF29 | 0xFF2A | 0xFF2B | 0xFF2C | 0xFF2D | 0xFF2E | 0xFF2F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Valor | 0x00 |
0x00 |
0xCE |
0x0A |
0x00 |
0x00 |
0x00 |
0x00 |
0x00 |
0x00 |
0x00 |
0x00 |
0xBE |
0xCA |
0xCE |
0x0A |
d)
Considerando una anchura de memoria de 16 bits, cada acceso al bus transfiere 2 bytes. (No se contabiliza el acceso para leer la propia instrucción, "Instruction Fetch").
| Instrucción Válida | Tamaño dato | Accesos Datos | Explicación |
|---|---|---|---|
lb x10, 0xFF13 |
8 bits | 1 | 8 bits caben en una transferencia de 16 bits. |
lh x11, 0xFF1A |
16 bits | 1 | 16 bits ocupan exactamente una transferencia completa del bus. |
lw x14, 0xFF18 |
32 bits | 2 | 32 bits requieren dos transferencias consecutivas de 16 bits. |
sb x10, 0xFF22 |
8 bits | 1 | Se realiza un ciclo de escritura (o lectura-modificación-escritura). |
sw x11, 0xFF20 |
32 bits | 2 | Se necesitan dos ciclos de escritura para enviar los 32 bits. |
sw x14, 0xFF2C |
32 bits | 2 | Se necesitan dos ciclos de escritura para enviar los 32 bits. |
Autores

Licencia
