Download Clase 5

Document related concepts

Extensión de signo wikipedia , lookup

Desbordamiento aritmético wikipedia , lookup

HDB3 wikipedia , lookup

ISAN wikipedia , lookup

Pista (CD) wikipedia , lookup

Transcript
Organización del Computador I Verano
Aritmética (1 de 3)
Basado en el capítulo 4 del libro de Patterson y Hennessy
Verano 2004
Profesora Borensztejn
Números
• Los números se representan con tiras de bits.
• La posición relativa de cada dígito binario determina su
valor (igual que en el sistema decimal: unidades, decenas,
centenas...)
• El valor decimal del número se calcula:
n 1

d i * 2i
i 0
• La cantidad de bits de la representación, n, determina el
máximo número representable.
• Por ejemplo: con 32 bits, se podrán representar los
números del 0..232-1.
• Muchas veces, después de una operación aritmética, el
resultado obtenido no es representable con los n bits de la
representaciónDesbordamiento
Representación de números
negativos
•
Signo y Magnitud:
000 = +0
001 = +1
010 = +2
011 = +3
100 = -0
101 = -1
110 = -2
111 = -3
Complemento a dos
000 = +0
001 = +1
010 = +2
011 = +3
100 = -4
101 = -3
110 = -2
111 = -1
• ¿Cual elegir? balanceo, número de ceros, facilidad para
el hardware
• Rango de la representación:
– Signo y magnitud: -(2n-1 -1)<=x<=2n-1 -1
– Complemento a 2: -(2n-1)<=x<=2n-1-1
Representación Complemento a 2
• Se llama complemento a 2 porque la suma de cualquier
número y su negativo dan 2n.
0001
0100
0111
1111

10000
1100

10000
1001

10000
• El complemento a 2 de un número x es: 2n –x
10000
0111
00111

01001
1001

10000
• Los números positivos tienen una serie infinita de ceros a
la izquierda, los números negativos tienen una serie infinita
de unos a la izquierda.
• El bit mas significativo se llama “bit de signo”
Representación Complemento a 2
• Los números enteros (positivos y negativos) se representan
mediante una tira de n bits, el valor decimal de dicha tira se
llama valor explícito.
xe  x mod 2 n
si x  0
 x
xe   n
2  x si x  0
• Ejemplo: n=4
5xe=x=5
-5xe=16-5=11
0101
1011
Representación Complemento a 2
•
Dado un valor explícito, el valor del número entero se
obtiene:
x  xe mod 2 n
•
Ejemplo:
si bit n -ésimo  0
 xe
x  n
 (2  xe ) si bit n -ésimo  1
0111
1001
x=xe=7
x= -(16-9)=-7
Propiedad de la Representación Complemento a 2
• Las operaciones de suma y resta se pueden hacer sin
tomar en cuenta el signo del operando, es decir, se
pueden sumar (o restar) directamente los valores
explícitos.
xe  x mod 2 n
si x  0
 x
xe   n
2  x si x  0
S  x y
• Se demuestra que
es equivalent e a hacer
S e  ( xe  ye )mod 2 n
Ejemplos con n=4 bits
Dato
X
Y
Xe
Ye
Se
S
Entero
3
-4
3
12
(3+12)mod16=15
-1
Natural
3
12
3
12
(3+12)mod16=15
15
Entero
-7
-2
9
14
(9+14)mod16=7
-9
Natural
9
14
9
14
(9+14)mod16=7
23
1001
1110

10111
El resultado (23) no
es representable con
4 bits
C=1, indica
desbordamiento
1111
1110

11101
¿Que sucede si
interpretamos los
números como
enteros?
C=1, NO indica
desbordamiento
Desbordamiento para números
con signo
• Al sumar:
– Cuando los operandos tienen el mismo signo y
se obtiene un resultado con signo contrario
• Al restar:
– Cuando se resta un número negativo de un
número positivo y el resultado es negativo
– Cuando se resta un número positivo a uno
negativo y el resultado da positivo.
Determinación de Desbordamiento para números
enteros
Xn-1
Yn-1
Cin
Cout
S
V
0
0
0
0
0
0
0
0
1
0
1
1
0
1
0
0
1
0
0
1
1
1
0
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
0
1
0
1
1
1
1
1
1
0
V  Cin  Cout
Restas: Restar Sumando
R= Y + (-X)
Necesitamos la operación de cambio de signo
-X = 2n –Xe
Pero: no queremos restar!!
-X = (2n – 1 ) – Xe + 1
Todos unos
C a 1 de X
C a 2 de X
Restas: Restar Sumando
1101
0011
0 1010
1101
1101
1 1010
MIPS
Números con signo de 32 bits:
0000
0000
0000
...
0111
0111
1000
1000
1000
...
1111
1111
1111
0000 0000 0000 0000 0000 0000 0000two = 0ten
0000 0000 0000 0000 0000 0000 0001two = + 1ten
0000 0000 0000 0000 0000 0000 0010two = + 2ten
1111
1111
0000
0000
0000
1111
1111
0000
0000
0000
1111
1111
0000
0000
0000
1111
1111
0000
0000
0000
1111
1111
0000
0000
0000
1111
1111
0000
0000
0000
1110two
1111two
0000two
0001two
0010two
=
=
=
=
=
+
+
–
–
–
2,147,483,646ten maxint
2,147,483,647ten
2,147,483,648ten
2,147,483,647ten minint
2,147,483,646ten
1111 1111 1111 1111 1111 1111 1101two = – 3ten
1111 1111 1111 1111 1111 1111 1110two = – 2ten
1111 1111 1111 1111 1111 1111 1111two = – 1ten
MIPS: Extensión de signo
• Se utiliza para convertir un número de n bits en un número de
mas de n bits.
– El operando inmediato de 16 bits debe convertirse en un
operando de 32 bits para operar.
– Se copia el bit más significativo (bit de signo)
0010
-> 0000 0010
1010
-> 1111 1010
• La instrucción load byte (lb) trata el número como un número
con signo, extendiendo el signo sobre el registro de 32 bits.
La instrucción load byte unsigned (lbu), simplemente rellena
con ceros los 24 bits del registro de 32.
MIPS: Efecto del
Desbordamiento
• Cuando se detecta desbordamiento, MIPS provoca una
excepción:
– El control del programa pasa a una dirección predefinida,
donde se ejecuta un código de error.
– La dirección del programa que ha causado la excepción se
guarda en un registro especial llamado EPC (exception
program counter).
– La instrucción mfc0 permite copiar la dirección guardada en
el EPC sobre un registro de propósito general para poder
retornar el programa original.
– Volveremos mas adelante sobre el tema de las
excepciones......
MIPS: Efecto del
Desbordamiento
• No siempre nos interesa detectar el desdordamiento:
por ejemplo, en la aritmética de direcciones (punteros),
números sin signo.
– MIPS diferencia dos tipos de instrucciones: las que ignoran
el desbordamiento (addu,addiu,subu, etc) y las que generan
excepciones (add, addi, sub, etc)
– Los compiladores usan una u otra versión.
– Observemos que, en las instrucciones con operando
inmediato hay extensión de signo, de 16 a 32 bits, tanto para
números con signo, como para números sin signo.
– También observemos que hay dos instrucciones de
comparación diferentes: sltu, (sltiu) y slt (slti).
Códigos para detectar
desbordamiento
addu
xor
slt
bne
xor
slt
Bne
$t0,$t1,$t2
$t3,$t1,$t2
$t3,$t3,$zero
$t3,$zero, no_hay
$t3,$t0, $t1
$t3,$t3,$zero
$t3,$zero, hay
addu
nor
sltu
bne
#suma sin deteccion
#para comprobar los signos
#$t3=1 si los signos difieren
# si los signos difieren no hay
# puede haber....
#los tres signos difieren=>hay
c
$t0,$t1,$t2
$t3,$t1, $zero
$t3,$t3, $t2
$t0, $zero, hay
FIN
Aritmética(1 de 3)