EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de...

45
1/45 Estructura de Computadores Tema 3. Traducción de Programas Estructura de Computadores 25/Feb/2019

Transcript of EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de...

Page 1: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

1/45

Estructura de ComputadoresTema 3. Traducción de Programas

Estructura de Computadores

25/Feb/2019

Page 2: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

2/45

Estructura de ComputadoresTema 3. Traducción de Programas

Tema 3. Traducción de Programas

Page 3: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

3/45

Estructura de ComputadoresTema 3. Traducción de Programas

Desplazamientos lógicos

I Shift Left Logical: sll rd, rt, shamtI Desplaza rt a la izquierda el número de bits indicado en el

operando inmediato shamtI Shift Right Logical: srl rd, rt, shamt

I Desplaza rt a la derecha el número de bits indicado en eloperando inmediato shamt

I Las posiciones que quedan vacantes se rellenan con ceros

l i $t0 , 0 x33333333s l l $t1 , $t0 , 2 # $t1 = 0xCCCCCCCCs r l $t2 , $t0 , 2 # $t2 = 0x0CCCCCCC

Page 4: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

4/45

Estructura de ComputadoresTema 3. Traducción de Programas

Desplazamiento aritmético a la derecha

I Shift Right Arithmetic: sra rd, rt, shamtI Desplaza rt a la derecha el número de bits indicado en el

operando inmediato shamt

I Las posiciones que quedan vacantes a la derecha se rellenancon una copia del bit de signo de rt

l i $t0 , 0 x88888888s r a $t1 , $t0 , 1 # $t1 = 0xC4444444

Page 5: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

5/45

Estructura de ComputadoresTema 3. Traducción de Programas

Desplazamiento indicado en registro

I sllv rd, rt, rsI srlv rd, rt, rsI srav rd, rt, rsI El número de bits a desplazar se indica en los 5 bits de menor

peso del registro rs, el resto de bits se ignoran

Page 6: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

6/45

Estructura de ComputadoresTema 3. Traducción de Programas

Multiplicación y división por potencias de 2

I Desplazar a la izquierda equivale a multiplicar por unapotencia de 2I sll rd, rt, shamtI rd = rt × 2shamt

I Útil para calcular el offset de un vector dado el índiceI Desplazar a la derecha un natural (con srl) o un entero (con

sra) equivale a dividirlo por una potencia de 2I srl rd, rt, shamtI rd = rt/2shamt

Page 7: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

7/45

Estructura de ComputadoresTema 3. Traducción de Programas

Ejemplo

i n t vec [ 1 0 0 ] ;

v o i d main ( ) {i n t i = 12 ;vec [ i ] = 0 ;

}

. data

. a l i g n 2vec : . space 400

. t e x tmain : l i $t0 , 12 # $t0 = i

s l l $t1 , $t0 , 2l a $t2 , vecaddu $t2 , $t2 , $t1sw $zero , 0( $t2 )

Page 8: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

8/45

Estructura de ComputadoresTema 3. Traducción de Programas

Conversión de Ca2 a Ca1

I Representar en Ca1 un entero xs guardado en Ca2 en $t0I Se puede convertir de Ca2 a Ca1 restando el bit de signo

# Desplazamos e l b i t de s i g no a l a p o s i c i o n 0s r l $t1 , $t0 , 31

# Restamos e l b i t de s i g nosubu $t0 , $t0 , $t1

Page 9: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

9/45

Estructura de ComputadoresTema 3. Traducción de Programas

Traducción de los operadores de desplazamiento en C

I C define dos operadores de desplazamiento de bitsI Desplazamiento a la izquierda: <<

I Se traduce a la instrucción sllI Desplazamiento a la derecha: >>

I Para naturales, se traduce a la instrucción srlI Para enteros, se traduce a la instrucción sra

I Traducir a MIPS la siguiente sentencia en C (a y b sonenteros y están almacenados en $t0 y $t1)

a = ( a << b) >> 2 ;

s l l v $t4 , $t0 , $t1s r a $t0 , $t4 , 2

Page 10: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

10/45

Estructura de ComputadoresTema 3. Traducción de Programas

Operaciones lógicas bit a bit en MIPS

I Repertorio de instrucciones lógicas

and rd, rs, rt rd = rs AND rtor rd, rs, rt rd = rs OR rtxor rd, rs, rt rd = rs XOR rtnor rd, rs, rt rd = rs NOR rt = NOT (rs OR rt)andi rt, rs, imm16 rt = rs AND ZeroExt(imm16)ori rt, rs, imm16 rt = rs OR ZeroExt(imm16)xori rt, rs, imm16 rt = rs XOR ZeroExt(imm16)

I imm16 ha de ser un natural

Page 11: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

11/45

Estructura de ComputadoresTema 3. Traducción de Programas

Operaciones lógicas bit a bit - C vs MIPS

I Asumiendo que a, b y c están en $t0, $t1 y $t2:

Lenguaje C Ensamblador MIPSc = a & b; and $t2, $t0, $t1c = a | b; or $t2, $t0, $t1c = a ˆ b xor $t2, $t0, $t1c = ∼a; nor $t2, $t0, $zeroc = a & 7; andi $t2, $t0, 7c = a | 7; ori $t2, $t0, 7c = a ˆ 7; xori $t2, $t0, 7

Page 12: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

12/45

Estructura de ComputadoresTema 3. Traducción de Programas

Ejemplo

I Traducir la siguiente sentencia en C:I a = ∼(a & b);

I Operador “∼”: Negación bit a bitI Asume que a y b se almacenan en los registros $t0 y $t1.

and $t4 , $t0 , $t1nor $t0 , $t4 , $ ze ro

Page 13: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

13/45

Estructura de ComputadoresTema 3. Traducción de Programas

Seleccionar bits

I La instrucción and se utiliza para seleccionar determinadosbits de un registro, poniendo el resto a 0

I Ejemplo: seleccionar los 16 bits de menor peso del registro $t0

and i $t1 , $t0 , 0xFFFF

I Ejemplo: extraer los bits 0, 2, 4, 6

and i $t1 , $t0 , 0 x0055

I La instrucción andi se puede utilizar para calcular el resto dela división por potencias de 2

Page 14: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

14/45

Estructura de ComputadoresTema 3. Traducción de Programas

Utilidad de las operaciones lógicas bit a bit

I Poner bits a 1I Ejemplo: poner a 1 los 16 bits de menor peso de $t0

o r i $t0 , $t0 , 0xFFFF

I Complementar bitsI Ejemplo: complementar los bits pares de $t0

l i $t1 , 0 x55555555xo r $t0 , $t0 , $t1

Page 15: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

15/45

Estructura de ComputadoresTema 3. Traducción de Programas

Comparaciones y operaciones booleanas

I En C las expresiones enteras admiten las operaciones decomparaciónI ==, !=, <, <=, >, >=

I No existe el tipo booleano, el resultado de una comparación esun enteroI 0: falsoI Distinto de 0: verdadero

I También existen expresiones lógicas formadas por operadoresbooleanosI &&, ||, !

I Los operadores booleanos devuelven un valor entero“normalizado”: 0 o 1

Page 16: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

16/45

Estructura de ComputadoresTema 3. Traducción de Programas

Repertorio de instrucciones de comparación

slt rd, rs, rt rd = rs < rt enterossltu rd, rs, rt rd = rs < rt naturalesslti rd, rs, imm16 rd = rs < Sext(imm16) enterossltiu rd, rs, imm16 rd = rs < Sext(imm16) naturalesI Generan un valor lógico normalizado:

I Si la comparación es falsa escriben 0 en rdI Si la comparación es cierta escriben 1 en rd

Page 17: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

17/45

Estructura de ComputadoresTema 3. Traducción de Programas

Comparaciones de tipo “<”

I Traducir a MIPS, suponiendo que a, b, c se almacenan en $t0,$t1, $t2

c = a < b ;

I Si a y b son naturales

s l t u $t2 , $t0 , $t1

I Si a y b son enteros

s l t $t2 , $t0 , $t1

Page 18: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

18/45

Estructura de ComputadoresTema 3. Traducción de Programas

Comparaciones “>”, “>=”, “<=”

I MIPS solo incluye instruciones de comparación “menor que”I Las otras desigualdades se pueden traducir usando “menor

que”I a > b ⇐⇒ b < aI a ≥ b ⇐⇒ (a < b)I a ≤ b ⇐⇒ (a > b) ⇐⇒ (b < a)

Page 19: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

19/45

Estructura de ComputadoresTema 3. Traducción de Programas

Comparación “>”

I a > b ⇐⇒ b < a

b

a

I Traducir c=(a>b); suponiendo que a, b y c se guardan en$t0, $t1 y $t2:

s l t $t2 , $t1 , $t0 # c = (b < a )

Page 20: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

20/45

Estructura de ComputadoresTema 3. Traducción de Programas

Negación lógica “!”

uns i gned char a = 0x55 ;uns i gned char b ;

b = ! a ; // b = 0

I Traducción a MIPS con comparación “menor que 1” comonatural

I sltiu $t1, $t0, 1 # $t0=a, $t1=bI Si $t0 es cero (falso): $t1 = 1 (cierto)I Si $t0 es distinto de cero (cierto): $t1 = 0 (falso)

Page 21: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

21/45

Estructura de ComputadoresTema 3. Traducción de Programas

Negación bit a bit “∼” vs Negación lógica “!”

I La negación bit a bit y la negación lógica puedan darresultado distinto

uns i gned char a = 0x55 ;uns i gned char b , c ;

b = ! a ; // b = 0c = ~a ; // c = 0xAA

I Traducción a MIPS (a, b y c están en $t0, $t1 y $t2):

s l t i u $t1 , $t0 , 1 # b = ! a ;nor $t2 , $t0 , $ ze ro # c = ~a ;

Page 22: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

22/45

Estructura de ComputadoresTema 3. Traducción de Programas

Comparación “>=”

I a ≥ b ⇐⇒ (a < b)a

b

I Traducir c=(a>=b); suponiendo que a, b, y c seguardan en $t0, $t1 y $t2:

s l t $t4 , $t0 , $t1 # aux = ( a < b )s l t i u $t2 , $t4 , 1 # c = ! aux

Page 23: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

23/45

Estructura de ComputadoresTema 3. Traducción de Programas

Comparación “<=”

I a ≤ b ⇐⇒ (a > b) ⇐⇒ (b < a)a

b

I Traducir c=(a<=b); suponiendo que a, b, y c seguardan en $t0, $t1 y $t2:

s l t $t4 , $t1 , $t0 # aux = (b < a )s l t i u $t2 , $t4 , 1 # c = ! aux

Page 24: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

24/45

Estructura de ComputadoresTema 3. Traducción de Programas

Conversión a valor lógico normalizado

I Valores lógicos en C:I 0: FalsoI Distinto de 0: Cierto

I Valores lógicos normalizados:I 0: FalsoI 1: Cierto

I Se puede normalizar el valor lógico con instrucción sltuI sltu $t1, $zero, $t0

I Si $t0 es 0: $t1 = 0I Si $t0 es distinto de 0: $t1 = 1

Page 25: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

25/45

Estructura de ComputadoresTema 3. Traducción de Programas

Comparaciones “==” y “!=”

I Se traducen a una resta seguida de una negación lógica o deuna normalización a 0 o 1

I Traducir c=(a==b); suponiendo que a, b y c se guardan en$t0, $t1 y $t2:

sub $t4 , $t0 , $t1 # v a l e c e r o s i son i g u a l e ss l t i u $t2 , $t4 , 1 # negac i on l o g i c a

I Traducir c=(a!=b); suponiendo que a, b y c se guardan en$t0, $t1 y $t2:

sub $t4 , $t0 , $t1 # v a l e c e r o s i son i g u a l e ss l t u $t2 , $zero , $t4 # no rma l i z a r a 0 o 1

Page 26: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

26/45

Estructura de ComputadoresTema 3. Traducción de Programas

Operador and booleano “&&”

I Se puede usar and si normalizamos antes los valores a 0 o 1I Traducir c = a && b; suponiendo que a, b y c se guardan en

$t0, $t1 y $t2:

s l t u $t3 , $zero , $t0s l t u $t4 , $zero , $t1and $t2 , $t3 , $t4

Page 27: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

27/45

Estructura de ComputadoresTema 3. Traducción de Programas

and bit a bit “&” vs and lógica “&&”I El operador and bit a bit y el operador and lógico puedan dar

resultado distinto

uns i gned char a = 0x55 , b = 0xAA , c ;c = a & b ; // c = 0c = a && b ; // c = 1

I Traducción a MIPS (a, b y c están en $t0, $t1 y $t2):

and $t2 , $t1 , $t0 # c = a & b ;

# c = a && b ;s l t u $t3 , $zero , $t0s l t u $t4 , $zero , $t1and $t2 , $t3 , $t4

Page 28: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

28/45

Estructura de ComputadoresTema 3. Traducción de Programas

Operador or booleano “||”

I Usar instrucción or y normalizar el resultadoI Traducir c = a || b; suponiendo que a, b y c se guardan en

$t0, $t1 y $t2:

o r $t2 , $t1 , $t0s l t u $t2 , $zero , $t2

Page 29: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

29/45

Estructura de ComputadoresTema 3. Traducción de Programas

Saltos condicionales relativos al PC

beq rs, rt, label si (rs == rt) PC = PCup + Sext(offset16)bne rs, rt, label si (rs != rt) PC = PCup + Sext(offset16)b label beq $0, $0, label

I La dirección de destino del salto se especifica mediante unaetiqueta en ensamblador

I La instrucción incluye un inmediato de 16 bits (offset16)I El offset16 codifica la distancia a saltar respecto al PC

I Diferencia entre la dirección de destino y la dirección de lainstrucción siguiente

I offset16 = (label − PCup)/4I PCup = PC + 4I Permite saltar dentro del rango [−215, 215 − 1]

I Modo de direccionamiento relativo al PC

Page 30: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

30/45

Estructura de ComputadoresTema 3. Traducción de Programas

Macros de salto

blt rs, rt, label si(rs<rt) salta a label slt $at, rs, rtbne $at, $zero, label

bgt rs, rt, label si(rs>rt) salta a label slt $at, rt, rsbne $at, $zero, label

bge rs, rt, label si(rs>=rt) salta a label slt $at, rs, rtbeq $at, $zero, label

ble rs, rt, label si(rs<=rt) salta a label slt $at, rt, rsbeq $at, $zero, label

I Para naturales, las macros bltu, bgtu, bgeu y bleu seexpanden de la misma forma, usando sltu

Page 31: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

31/45

Estructura de ComputadoresTema 3. Traducción de Programas

Saltos incondicionales

I La macro b está restringida al rango [−215, 215 − 1]I Para saltos que superen el rango, se utilizan las siguientes

instrucciones:j target PC = targetjr rs PC = rsjal target PC=target; $ra = PCupjalr rs, rd PC=rs; rd=PCup

I Se utilizan para implementar subrutinas

Page 32: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

32/45

Estructura de ComputadoresTema 3. Traducción de Programas

Saltos incondicionales en modo pseudodirecto

I Las instrucciones j y jal se codifican en el formato JI La dirección de destino se codifica en los 26 bits de menor

peso de la instrucción

Page 33: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

33/45

Estructura de ComputadoresTema 3. Traducción de Programas

Modos de direccionamiento

I Modo registroI addu $t0, $t0, $t1

I Modo immediatoI addiu $t0, $t0, 4

I Modo memoriaI lw $t0, 0($t1)

I Modo pseudodirectoI j label

I Modo relativo al PCI beq $t0, $zero, label

Page 34: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

34/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia if-then-else

if (condicion)sentencia_then

elsesentencia_else

evaluar condiciónsalta si es falsa a sinotraducción de sentencia_thensalta a fisi

sino:traducción de sentencia_else

fisi:

Page 35: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

35/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia if-then-else

I Traduce a MIPS el código en C, suponiendo que a, b, c, y dson enteros almacenados en $t0, $t1, $t2 y $t3:

i f ( a >= b)d = a ;

e l s ed = b ;

b l t $t0 , $t1 , s i n omove $t3 , $t0b f i s i

s i n o :move $t3 , $t1

f i s i :

Page 36: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

36/45

Estructura de ComputadoresTema 3. Traducción de Programas

Evaluación “lazy”

I En C, los operadores lógicos “&&” y “||” se evaluan deizquierda a derecha de forma “lazy”I Si la parte izquierda determina el resultado, la parte derecha

NO se evalúa

Page 37: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

37/45

Estructura de ComputadoresTema 3. Traducción de Programas

Evaluación “lazy”

I Traduce a MIPS el código en C, suponiendo que a, b, c y dson enteros almacenados en $t0, $t1, $t2 y $t3:

i f ( a >= b && a < c )d = a ;

e l s ed = b ;

b l t $t0 , $t1 , s i n obge $t0 , $t2 , s i n omove $t3 , $t0b f i s i

s i n o :move $t3 , $t1

f i s i :

Page 38: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

38/45

Estructura de ComputadoresTema 3. Traducción de Programas

Evaluación “lazy”

I Traduce a MIPS el código en C, suponiendo que a, b, c y dson enteros almacenados en $t0, $t1, $t2 y $t3:

i f ( a >= b | | a < c )d = a ;

e l s ed = b ;

bge $t0 , $t1 , l l a v o r sbge $t0 , $t2 , s i n o

l l a v o r s :move $t3 , $t0b f i s i

s i n o :move $t3 , $t1

f i s i :

Page 39: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

39/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia switch

sw i t ch ( e x p r e s s i o ) {ca se cons t1 :

s e n t e n c i e s 1 ;b reak ;

ca s e cons t2 :s e n t e n c i e s 2 ;b reak ;

d e f a u l t :s e n t e n c i e s _ d e f a u l t ;

}

Page 40: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

40/45

Estructura de ComputadoresTema 3. Traducción de Programas

Traducción sentencia switch

I La sentencia switch se puede traducir a una cadena desentencias if-then-else

I Es más eficiente definir un vector de punteros que apunten alas direcciones de código y que se indexe con el resultado dela expresiónI Cada puntero apunta al inicio de una cláusula case (o a default

si no existe la cláusula)

Page 41: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

41/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia while

I Bucle while en C

while (condicion)sentencia_cuerpo_while

I Bucle while en MIPS

while:evaluar condiciónsalta si es falsa a fiwhiletraducción de sentencia_cuerpo_whilesalta a while

fiwhile:

Page 42: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

42/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia while

I Traduce a MIPS el código en C, suponiendo que dd, dr y qson enteros almacenados en $t1, $t2 y $t3:

q = 0 ;wh i l e ( dd >= dr ) {

dd = dd − dr ;q++;

}

move $t3 , $ze rowh i l e :

b l t $t1 , $t2 , f i w h i l esubu $t1 , $t1 , $t2add iu $t3 , $t3 , 1b wh i l e

f i w h i l e :

Page 43: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

43/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia while - Evaluar la condición al final del bucle

I Traduce a MIPS el código en C, suponiendo que dd, dr y qson enteros almacenados en $t1, $t2 y $t3:

q = 0 ;wh i l e ( dd >= dr ) {

dd = dd − dr ;q++;

}

move $t3 , $ze rob l t $t1 , $t2 , f i w h i l e

wh i l e :subu $t1 , $t1 , $t2add iu $t3 , $t3 , 1bge $t1 , $t2 , wh i l e

f i w h i l e :

Page 44: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

44/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia for

for (s1; condicion; s2)s3;

I Es equivalente a un while:

s1;while (condicion) {

s3;s2;

}

Page 45: EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de Programas Desplazamientoslógicos I ShiftLeftLogical:sll rd, rt, shamt I Desplazart

45/45

Estructura de ComputadoresTema 3. Traducción de Programas

Sentencia do-while

I Ejecuta una o más iteraciones mientras se cumpla la condición(la primera iteración siempre se ejecuta)

dosentencia_cuerpo_do

while (condicion);I Bucle do-while en MIPS

do:traducción de sentencia_cuerpo_doevaluar condiciónsalta si es cierta a do