Examen: Parcial 2:2023_11_17:Teleco - myTeachingURJC/Arq-computadores-01 GitHub Wiki
Examen Parcial 2: 2023-11-17. Teleco
- Tiempo: 50 minutos
- Tipo de examen: Presencial. Realizado a través de Aula Virtual. Acceso a la wiki (Internet)
- Temario: 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 25% 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-x31). La anchura de memoria es de 64 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 0x010A0 y 0x010B0. Los valores están en HEXADECIMAL.
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x010A0 | AA | BB | CC | DD | 01 | 02 | 03 | 04 | A4 | A3 | A2 | A1 | A0 | 1F | 1E | 1A |
0x010B0 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
Se pide:
a) (2.5 ptos) Indicar el valor de los registros del x1 al x5 cuando se ejecutan estas instrucciones (secuencialente), así como el número de accesos a memoria que emplea cada instrucción de load para leer los datos:
li x1, 0x010A6
lb x2, (x1)
lh x3, (x1)
lw x4, (x1)
addi x1, x1, 6
ld x5, (x1)
b) (2.5 ptos) Suponiendo que inicialmente los registros del x1 al x5 contienen los siguientes valores: x1=0
,x2=0x22
, x3=0x2023
, x4=0x1A2B3C4D
, x5=0x44332211DDCCBBAA
Escribe el contenido de los 16 bytes de memoria situados desde la dirección 0x010B0 en adelante al terminar de ejecutarse las siguientes instrucciones e indica también el número de accesos a memoria que emplea cada instrucción de store para guardar los datos.:
li x1, 0x010B2
sd x5, (x1)
sh x3, (x1)
addi x1, x1, 10
sw x4, (x1)
sb x2, (x1)
Solución al problema
a)
El procesador usa ordenación big endian por lo que el byte leido en la primera posición es el de mayor peso
-
Inst 1: Cargar el valor inmediato 0x010A6 en x1. Las instrucciones li no acceden a memoria
x1 = 0x010A6
-
Inst 2: Leer el byte de la dirección 0x010A6. Para leer 1 byte siempre se realiza 1 único acceso a memoria.
x2 = 0x03, 1 acceso a memoria
-
Inst 3: Leer la media palabra de la dirección 0x010A6. La media palabra se encuentra en el primer bloque de memoria de 8 bytes, por lo que se raliza 1 único acceso.
x3 = 0x0304, 1 acceso a memoria
-
Inst 4: Leer la palabra de la dirección 0x010A6. La palabra se encuentra la mitad en el primer bloque de 32 bits, y la otra mitad en el siguiente, por lo que se necesitan 2 accesos a memoria
x4 = 0x0304A4A3, 2 accesos a memoria
-
Inst 5: Sumar el valor 6 al registro x1. Las instrucciones li no acceden a memoria
x1 = 0x010AC
-
Inst 6: Leer la doble palabra de la dirección 0x010AC. Como son 8 bytes de la doble palabra, se leen los 0 que hay en las siguientes direcciones de memoria. Se realizan 2 accesos por no estar en una dirrección alineada
x5 = 0xA01F1E1A00000000, 2 accesos a memoria
b)
- Inst 1:
Guarda en el registro x1 el valor de la dirección 0x010B2
- Inst 2:
Guarda la doble palabra de x5 a partir de la dirección 0x010B2
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x010B0 | 00 | 00 | 44 | 33 | 22 | 11 | DD | CC | BB | AA | 00 | 00 | 00 | 00 | 00 | 00 |
Realiza 2 accesos a memoria porque se almacena ocupando dos espacios de palabra doble (0x10B0-0x10B7 y 0x10B8-0x10BF)
- Inst 3:
Guarda la media palabra de x3 a partir de la dirección 0x010B2
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x010B0 | 00 | 00 | 20 | 23 | 22 | 11 | DD | CC | BB | AA | 00 | 00 | 00 | 00 | 00 | 00 |
Realiza 1 acceso a memoria porque se almacena en el primer bloque (0x10B0-0x10B7)
- Inst 4:
Suma 10 al valor de x1: x1 = 0x010B2 + 10 = 0x010BC
- Inst 5:
Guarda la palabra de x4 a partir de la dirección 0x010BC
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x010B0 | 00 | 00 | 20 | 23 | 22 | 11 | DD | CC | BB | AA | 00 | 00 | 1A | 2B | 3C | 4D |
Realiza 1 acceso a memoria porque se almacena en el segundo bloque (0x10B8-0x10BF)
- Inst 6:
Guarda el byte de x2 en la dirección 0x010BC
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x010B0 | 00 | 00 | 20 | 23 | 22 | 11 | DD | CC | BB | AA | 00 | 00 | 22 | 2B | 3C | 4D |
Realiza 1 acceso a memoria porque tiene tamaño de 1 byte
El resultado final de la memoria por lo tanto es:
Dirección | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x010B0 | 00 | 00 | 20 | 23 | 22 | 11 | DD | CC | BB | AA | 00 | 00 | 22 | 2B | 3C | 4D |
Autores
- Miguel Ángel de Miguel
- Juan González-Gómez (Obijuan)