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 en rs1.
  • lh rs1, dir: Leer una media palabra (16 bits) de memoria y guardarla en rs1.
  • lw rs1, dir: Leer una palabra (32 bits) de memoria y guardarla en rs1.
  • sb rs1, dir: Almacenar en memoria el byte (8 bits menos significativos) que hay en rs1.
  • sh rs1, dir: Almacenar en memoria la media palabra (16 bits menos significativos) que hay en rs1.
  • sw rs1, dir: Almacenar en memoria la palabra completa que hay en rs1.

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.

  1. lb x10, 0xFF13:

    • Lee el valor 0xDD en la dirección 0xFF13.
    • Resultado: x10 = 0xDD
  2. lh x11, 0xFF1A:

    • Lee 2 bytes en 0xFF1A y 0xFF1B. Valores: 0xCE y 0x0A.
    • Big-endian forma: 0xCE0A.
    • Resultado: x11 = 0xCE0A
  3. lw x14, 0xFF18:

    • Lee 4 bytes desde 0xFF18 alineado.
    • Valores consecutivos: 0xBE, 0xCA, 0xCE, 0x0A.
    • Resultado: x14 = 0xBECACE0A

(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:

  1. sb x10, 0xFF22: Escribe el byte menos significativo de x10 (0xDD) en 0xFF22.
  2. sw x11, 0xFF20: Escribe la palabra de x11 (0x0000CE0A) ocupando 4 bytes desde 0xFF20.
    • 0xFF20 <- 0x00
    • 0xFF21 <- 0x00
    • 0xFF22 <- 0xCE (Nota: Esta escritura sobrescribe el valor 0xDD puesto por la instrucción anterior).
    • 0xFF23 <- 0x0A
  3. sw x14, 0xFF2C: Escribe la palabra de x14 (0xBECACE0A) ocupando 4 bytes desde 0xFF2C.
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

Enlaces