EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de...
Transcript of EstructuradeComputadores¨ncies/Sesión 05...3/45 Estructura de Computadores Tema 3. Traducción de...
1/45
Estructura de ComputadoresTema 3. Traducción de Programas
Estructura de Computadores
25/Feb/2019
2/45
Estructura de ComputadoresTema 3. Traducción de Programas
Tema 3. Traducción de Programas
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
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
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
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
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 )
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
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
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
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
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
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
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
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
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
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
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)
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 )
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)
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 ;
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
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
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
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
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
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
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
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
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
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
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
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
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:
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 :
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
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 :
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 :
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 ;
}
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)
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:
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 :
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 :
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;
}
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