TALLER ARQUITECTURA DE COMPUTADORES

Post on 19-Jun-2015

282 views 1 download

description

TALLER

Transcript of TALLER ARQUITECTURA DE COMPUTADORES

TALLER ARQUITECTURA DE COMPUTADORES

1. ¿Cuál de las siguientes afirmaciones es falsa?a) El lenguaje ensamblador es un lenguaje de alto nivel. (F)b) El lenguaje ensamblador es un lenguaje muy cercano al procesador. Vc) Los programas en lenguaje ensamblador son habitualmente más largos VQue en lenguaje C.d) El lenguaje ensamblador es específico para cada tipo de procesador. V

R/ a) El lenguaje ensamblador es un lenguaje de alto nivel. (F)La afirmación es falsa Porque el lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.

7. ¿Qué modo de direccionamiento se utiliza en una instrucción de saltoIncondicional?a) Registrob) Relativo al PCc) Pseudo directod) Base más desplazamiento

R/ c) Pseudo directo

Instrucciones de salto (incondicional)Pseudo directo

la dirección de salto son los 26 bits menos significativos de la instrucción, desplazados 2 posiciones a la izquierda y concatenados con los 4 bits más significativos del PC.

Ejercicio 1

Suponemos: • Las variables a, b y c se almacenan en los registros $s0, $s1, $s2,

respectivamente. • La dirección del primer elemento de la tabla de palabras A (es decir

A[0]) se encuentra almacenada en el registro $s3. • La dirección del primer elemento de la tabla de palabras B (es decir

B[0]) se encuentra almacenada en el registro $s4. • Las variables i, j se almacenan en los registros $s5, $s6,

respectivamente.

Instrucciones:

• Solo podemos utilizar las instrucciones: add, addi, sub, lw y sw.

• No podemos usar más registros que los anteriormente comentados, salvo los registros temporales $t0-$t7.

1.1) Traduce las siguientes instrucciones a ensamblador: a) a = b + c; a = a + 10; a = a –b + 2; addi $s0,$t0,2a = b; add $s0, $s1, $s2

addi $s0, $s0, 10sub $t0, $s0, $s1addi $s0, $t0, 2add $s0, $s1, $0

b) a = b + c; a = a – A[2]; add $s0, $s1, $s2lw $t0, 8($s3) sub $s0, $s0, $t0

c) a = 2*(b+c) – 2*A[3]; B[2] = a + 4*c;

add $t0, $s1, $s2add $t0, $t0, $t0 lw $t1, 12 ($s3) add $t1, $t1, $t1sub $s0, $t0, $t1add $t0, $s2, $s2add $t0, $t0, $t0add $t0, $s0, $t0sw $t0, 8($s4)

d) A[i] = 2*A[i+1];add $t0, $s5, $s5add $t0, $t0, $t0 add $t1, $s3, $t0 lw $t3, 4($t1) add $t3, $t3, $t3sw $t3, 0(t1)

e) A[i] = B[j+1] + A[i+1]add $t0, $s5, $s5add $t0, $t0, $t0add $t1, $s3, $t0 lw $t2, 4($t1) add $t4, $s6, $s6

add $t4, $t4, $t4add $t5, $s4, $t4 lw $t6, 4($t5) add $t7, $t7, $t7sw $t7, 0($t1)

1.2) Traduce las instrucciones del ejercicio b a código máquina.

Ejercicio 2Suponemos:

• Inicialmente los registros $s0, $s1, $s2 almacenan los números enteros: 10, 12, 8, respectivamente.

• Inicialmente el registro $s3 contiene la dirección: 0x10000008 • En la memoria se almacenan los siguientes valores:

Dirección palabra Dato

0x00000014 50 0x10000010 40 0x1000000C 10 0x10000008 30 0x10000004 20 0x10000000 10

¿Qué contendrá el registro $t0 después de la ejecución de los siguientes programas?

a) add $s0,$s1,$s2 --$s0=20sub $t0,$s0,$s2 ---$t0=12 hexadecimal ( 0000000C)

Registros al finalizar ejecución del programa pcspim

Respuesta: el registro ---$t0= decimal (12) hexadecimal ( 0000000C)

b) lw $t1,4($s3) --- acceso mem 0x0000000C, t1 = 10addi $t0,$t1,10 --- t0 = 10 + 10 = 20t0 = 20

Registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal (20) hexadecimal (00000014)

c) sw $s0,8($s3) --- copia en mem 0x10000010 dato 10lw $t0,8($s3) ----- acceso mem 0x10000010, t0 = 10t0 = 10

Registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal(10) hexadecimal( 0000000A )

d) addi $t0,$s3,4 --- t0 = 0x10000008+4 = 0x0000000Clw $t0, 4($t0) -------acceso mem 0x0000000C + 4 = 0x10000010t0 = 40

Respuesta: el registro $t0 = decimal(40) hexadecimal(00000028)

Ejercicio 3

a) slt $t0, $s0, $s1 ---$t0=1 (00000001 )

Registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal (1) hexadecimal(00000001 )

b) slt $t1, $s0, $s1 ---10 < 12 -> 1 -> $t1=1beq $t1, $zero, fin ---No saltaslt $t1, $s0, $s2 --- 10 < 8 $t1=0beq $t1,$zero, fin ---Saltaaddi $t0, $s0, 10 fin: add $t0, $s0, $0---$t0=10 (0000000A)

registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal(10) hexadecimal(0000000A )

c) slt $t1, $s0, $s1 ---10 < 12 ---$t1=1beq $t1, $zero, fin --- No Salta slt $t1, $s2, $s0 ---8< 10 ---$t1=1beq $t1,$zero, fin --- No Salta $addi $t0, $s0, 10 fin: $add $t0, $s0, $0 ---- t0 = 10

registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal(10) hexadecimal (0000000A)

d) slt $t1, $s0, $s1 -----10 < 12 beq $t1, $zero, fin ----- NO slt $t1, $s0, $s2 ------10< 8 bne $t1,$zero, fin -------NO $addi $t0, $s0, 10 fin: $add $t0, $s0, $0----t0 = 10

registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal (10) hexadecimal (0000000A)

e) bne $s0, $s1, sino ---si pasa a la etiqadd $t0, $s0, $s1 j fin sino: sub $t0, $s1, $s0 ---$t0=2fin:

registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal (2) hexadecimal (00000002)

f) addi $s0, $s0,2 ---$s0=12bne $s0, $s1, sino ---no pasa a la etiqadd $t0, $s0, $s1 ---$t0=24j fin sino: sub $t0, $s1, $s0 fin:

registros al finalizar ejecución del programa

Respuesta: el registro $t0 = decimal (24) hexadecimal(00000018)

g)bucle: slt $t1, $s0, $s1 ----- 1, 5, 9beq $t1, $zero, fin_bucle---- 2, 6, 10addi $s0,$s0,1 # 3, 7j bucle # 4, 8fin_bucle: add $t0, $s0, $zero ---- 11 t0 = 12

registros al finalizar ejecución

Respuesta: el registro $t0 = decimal (12) hexadecimal (0000000c)

h)bucle: slti $t1, $s0, 16 ----- 1,5,9,13beq $t1, $zero, fin_bucle ----2,6,10,14addi $s0,$s0,2 #3,7,11j bucle #4,6,12fin_bucle: add $t0, $s0, $zero ------15 t0 = 16

registros al finalizar ejecución

Respuesta: el registro $t0 = decimal (16) hexadecimal (00000010)

i)bucle: beq $s0,$s1,fin_bucle -----1,4,7addi $s0, $s0, 1 -----2,5j bucle #3,6fin_bucle: add $t0, $s0, $zero -----8 t0 = 12

registros al finalizar ejecución

Respuesta: el registro $t0 = decimal (12) hexadecimal (0000000C)

j)b1: slt $t0, $s0, $s1 ----,1,5,9beq $t0, $zero, b2 ------2,6,10addi $s0, $s0, 1 ----------3,7j b1 #4,8b2: slt $t0, $s0, 17 ------11,15,19,23

beq $t0,$zero,fin ---------12,16,20,24addi $s0, $s0, 2 -----------13,17,21j b2 #14,18,22fin: add $t0,$s0,$zero ----25 t0 = 18

Registros al finalizar ejecución

Respuesta: el registro $t0 = decimal (18) hexadecimal (00000012 )