You are on page 1of 59

Aritmtica del computador

Departamento de Arquitectura de
Computadores
Contenido
La unidad aritmtico lgica (ALU)
Representacin posicional. Sistemas numricos
Representacin de nmeros enteros
Aritmtica con enteros
Suma y resta
Multiplicacin
Mutiplicacin secuencial
Algoritmo de Booth
Divisin
Con restauracin
Sin restauracin
Representacin en coma flotante
Estndar IEEE 754
Aritmtica en coma flotante
Suma y resta
Multiplicacin y divisin
Precisin
La unidad aritmtico lgica (ALU)
La ALU es la parte del computador que realiza las operaciones
aritmticas y lgicas con los datos.
La unidad aritmtico-lgica se basa en el uso de dispositivos lgicos
digitales sencillos que pueden almacenar dgitos binarios y realizar
operaciones lgicas booleanas elementales.
Representacin posicional. Sistemas
numricos
Los sistemas de representacin mas empleados son los denominados:
sistemas posicionales.
TEOREMA FUNDAMENTAL DE LA NUMERACIN
La frmula general para construir un nmero N' en un sistema de
numeracin posicional de base b es la siguiente:
k n
= d ... d , d d ... d N
1 0 1 1

=
=
1 n
k
i
i
b . d N
i
Sistema decimal
El sistema decimal comn es un sistema de numeracin posicional
que emplea 10 smbolos y donde la base es 10:
Smbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Sistema binario
Los sistemas digitales pueden representar de forma "natural"
nmeros en base 2, usando los smbolos {0,1}
Equivalencia entre los primeros 16
nmeros
Conversin entre sistemas de
numeracin
Conversin al sistema decimal:
Dada una cantidad expresada en un sistema con base b su valor en base
decimal puede obtenerse por aplicacin del Teorema Fundamental de la
Numeracin:
Ejemplos:

=
=
1 n
k
i
i
b . d N
i
Conversin entre sistemas de
numeracin
Conversin de decimal a base B:
Parte entera: dividiendo sucesivamente por la base y tomando los restos
Parte decimal: multiplicando sucesivamente por la base y tomando la
parte entera
Cambios entre las bases 2, 8 y 16
1 cifra octal -> 3 cifras binarias
1 cifra hexadecimal -> 4 cifras binarias
Representacin de nmeros enteros con
signo
Existen diversos sistemas para representar nmeros enteros con
signo:
Signo-magnitud
Complemento a 1
Complemento a 2
El bit mas a la izquierda de un nmero binario con signo es el bit de
signo:
En todas las representaciones los nmeros positivos tienen
idntica representacin.
Un bit de signo 0 indica que es un nmero positivo
Un bit de signo 1 indica que es un nmero negativo
Signo-magnitud
En un palabra de n bits, los n-1 bits de la derecha representan la magnitud
del entero:
Rango de representacin:
Limitaciones:
Para operar es preciso que la ALU tenga en cuenta los signos
Doble representacin del 0: 000000 y 100000
Ampliacin de la longitud: el bit de signo se conserva y se aaden entre
este y la magnitud los 0s necesarios:
0011 -> 0 000011
1011 -> 1 000011
Complemento Restringido a la Base &
Complemento a la Base
Definicin Cab-1: complemento a la b-1 de N:
Definicin Cab: complemento a la b de N:
Donde -> b: base, N: nmero, n: nmero de dgitos de la parte
entera.
Ampliacin de la longitud: el bit de signo se conserva y se aaden
entre este y la magnitud los bits necesarios coincidiendo con el
valor del bit de signo:
0011 -> 0 000 011
1011 -> 1 111 011
N b N Cab
n
= 1 ) ( 1
N b N Cab
n
= ) (
Complemento a 1 con n bits
Nmeros positivos
Se representa el nmero en base 2
El primer bit debe ser cero
Ej: 21
10
= 00010101
C1
Nmeros negativos
La representacin es el C1 del opuesto
El primer bit debe ser uno
Ej: -21
10
= 11101010
C1
Representaciones del 0: 00000000, 11111111
Rangos:
Mtodo operativo para obtener el complemento a 1:
Se complementan todos los bits.
Ampliacin de la longitud: Se limita a repetir el bit de la izquierda
Ejemplo: 0010 -> 0000 0010 1010-> 1111 1010
Complemento a 2 con n bits
Nmeros positivos
Se representa el nmero en base 2
El primer bit debe ser cero
Ej: 21
10
= 00010101
C2
Nmeros negativos
La representacin es el C2 del opuesto
El primer bit debe ser uno
Ej: -21
10
= 11101011
C2
Representacin nica del 0: 00000000
Rango:
Mtodos operativos para obtener el complemento a 2:
Se complementan uno a uno todos los bits del nmero (donde hay un 0 se pone un 1 y
viceversa) y al resultado se le suma 1
Comenzando por el LSB, se conservan los bits a cero y el primer uno, complementando el
resto.
Ampliacin de la longitud: Se aaden a la izquierda tantos bits como sean necesario.
El valor de estos bits adicionales coincide con el bit de signo:
Ejemplo: 0010 -> 0000 0010 1010-> 1111 1010
Representacin en exceso a Z
Un nmero binario representa su valor binario menos Z (binario
puro):
01010 en exceso 16 representa el nmero 10 16 = - 6
La representacin binaria de un nmero en exceso Z, se obtiene
sumando Z al nmero
Representacin de -6 en exceso 16 con 5 bits es 10: 01010
Representacin de -8 en exceso 16 con 5 bits es 8: 01000
Representacin de 8 en exceso 16 con 5 bits es 24: 11000
El rango de valores que se pueden representar con n bits en exceso
2
n-1
es:
Nmeros con signo. Resumen
Aritmtica binaria. Suma en S-M
Si los dos nmeros son del mismo signo, la magnitud del resultado se
corresponde con la suma de las magnitudes y el signo del resultado es el
mismo que el de cualquiera de los sumandos.
Si los dos nmeros son de distinto signo, la magnitud del resultado se
determina calculando la diferencia entre la magnitud mayor y la menor. El
bit de signo se corresponde con el del nmero de mayor magnitud
Problemas:
el computador debe analizar el signo de los operadores para saber que operacin
realizar.
Pueden ser necesarios n+1 bits para representar el resultado (Desbordamiento:
4+4 necesita 5 bits).
Aritmtica binaria. Suma en C2
Este sistema puede sumar nmeros positivos y negativos sin hacer diferencia
entre ellos, descartando cualquier bit de acarreo superior (bits c
n-1
)
La suma de dos nmeros positivos/negativos da una nmero positivo/negativo:
00000111 7
+ 00000100 +4
00001011 11
La suma de un nmero positivo y un nmero negativo menor en valor absoluto da como
resultado un nmero positivo
00001111 15
+ 11111010 + -6
1 00001001 9
La suma de un nmero positivo y un nmero negativo mayor en valor absoluto o la suma de
dos nmeros negativos da como resultado un nmero negativo en complemento a 2:
00010000 16 11111011 -5
+11101000 + -24 + 11110111 + -9
11111000 -8 1 11110010 -14
Condicin de desbordamiento (overflow): 01111101 125
+ 00111010 +58
10110111 183
Aritmtica binaria. Suma en C1
En complemento a uno se puede sumar con cantidades negativas,
pero si existe acarreo al bit n (si c
n-1
= 1) se debe incrementar el
resultado en una unidad.
Condicin de desbordamiento (overflow)
Cuidado con las conversiones
Sumador completo
El sumador completo (full adder) es un circuito que suma dos bits de entrada a
i
y b
i
ms un acarreo de entrada c
i-1
y devuelve un bit de resultado z
i
y un bit de acarreo c
i
Sumador con propagacin en acarreo
serie (Ripple Carry Adder RCA)
Se construye asociando n sumadores elementales completos (full
adder) que reciben y procesan todos ellos los datos en paralelo, si
bien el acarreo se propaga en serie de un sumador a otro (circuito
lento).
Temporizacin
tiempo de suma = tsum = 2t (t = retardo de una
puerta)
tiempo de acarreo = tcarry = 3t
Cn (n-1) * tcarry + tsum
Sumador con acarreo anticipado (Carry
Look-Ahead Adder CLA)
Los acarreos se evalan anticipadamente con lgica de niveles de puertas.
Las sumas se realizan posteriormente en paralelo
No se basa en las ecuaciones directas para Ci+1 y Si, sino en dos funciones
adicionales llamadas de generacin (Gi) y de propagacin (Pi), para cada bit i (i = 0,
1, 2) calculadas en paralelo:
Generacin de Acarreo: tiene lugar cuando el sumador completo genera internamente un
acarreo de salida. Solo cuando ambos bits son 1 se genera acarreo
Propagacin de Acarreo: tiene lugar cuando el acarreo de entrada se transmite como
acarreo de salida. Solo cuando un de los bits de entrada es 1 se propaga el acarreo
i i B A Pi =
i i i B A G =
Sumador de acarreo anticipado
La limitacin mas importante es que a medida que aumenta el
nmero de etapas (bits), la ecuacin de acarreos se hace ms larga
aumentando as la complejidad del sistema.
Sumador de acarreo anticipado
Sumador con seleccin de arrastres
Duplicar el n de sumadores de forma que se calculen en paralelo los
resultados para c
i
=0 y c
i
=1.
Los resultados se calculan en paralelo
Cuando se conoce el carry real se selecciona el valor adecuado.
Sumador con seleccin de arrastres
Sumador/Restador C2
El uso del complemento a 2 permite realizar sumas y restas con un
sumador mas unas pequea lgica combinacional:
Multiplicacin de enteros sin signo
La multiplicacin se suele realizar utilizando un sumador-restador y un
algoritmo adecuado:
Algoritmo Suma-desplazamiento
Algoritmo de Booth
Mtodo tradicional de multiplicacin:
Obtener los productos parciales
Cada producto parcial debe estar desplazado una posicin a la izquierda
respecto al producto parcial anterior
Una vez calculados todos los productos parciales se suman para obtener el
producto
Para un multiplicando de n bits y un multiplicador de m bits el producto
ocupa como mximo n+m bits
Multiplicacin de enteros sin signo
Ruta de datos:
3 registros: multiplicando, multiplicador y producto
1 sumador de 2 entradas, en cada iteracin sumar el producto parcial obtenido a
la suma de los anteriores
Para alinear correctamente los productos parciales, en cada iteracin desplazar
el multiplicando a la izquierda
Para leer del mismo lugar cada uno de los bits del multiplicador, en cada iteracin
desplazarlo a la derecha
Multiplicacin de enteros sin signo
Ejemplo
Multiplicacin de enteros con signo en
C2
Algoritmo de Booth
Permite multiplicar directamente enteros representados en C2.
Evita ejecutar sumas consecutivas cuando el multiplicador presenta
cadenas de 0s o de 1s.
Idea: Convertir el multiplicador en un nmero recodificado sobre un
sistema binario no cannico bajo la forma de dgitos con signo:
Sistema binario cannico D={0,1} => Sistema binario no cannico D={-1,0,1}.
A la hora de realizar el algoritmo basta almacenar el valor binario del
multiplicador y fijarse en el bit anterior para averiguar si se trata de un +1,
un -1 o un 0 en la codificacin de Booth.
Las combinaciones:
00 y 11 corresponden a 0
01 corresponde a un +1
10 corresponde a un -1
Algoritmo de Booth
Algoritmo de Booth
A
Algoritmo de multiplicacin
1. M multiplicando Q multiplicador P = Q
-1
0
2. Si Q
0
Q
-1
=00 Q
0
Q
-1
=11 => Dder(P,Q,Q
-1
)
Si Q
0
Q
-1
=10 => P P-M | Dder(P,Q, Q
-1
)
Si Q
0
Q
-1
=01 => P P+M | Dder(P, Q, Q
-1
)
El paso 2 se realiza n veces, siendo n el nmero de bits del multiplicador.
Una vez finalizado, el resultado se hallar en los registros P (parte ms
significativa) y Q (parte menos significativa).
Ruta de datos
Algoritmo de Booth
Ejemplo:
Divisin de enteros sin signo
Al igual que con la multiplicacin, para realizar esta operacin se utiliza un sumador-
restador y un algoritmo adecuado.
Mtodo tradicional de divisin:
Examen de los bits del dividendo de izquierda derecha, hasta que el divisor sea capaz de dividir al
dividendo.
si el resto parcial es mayor que el divisor, aadir un 1 al cociente; el nuevo resto parcial ser la
resta del resto parcial y del divisor
si el resto parcial es menor que el divisor, aadir un 0 al cociente y ampliar el resto parcial con
un bit ms del dividendo.
Divisin con restauracin
Usar 3 registros: resto/dividendo, divisor y cociente
Para alinear correctamente los restos parciales y el divisor, en cada
iteracin desplazar el divisor a la derecha
Para escribir en el mismo lugar cada uno de los bits del cociente, en cada
iteracin desplazarlo a la izquierda
Para evitar tener un comparador y un restador, usar ste ltimo para
comparar: el signo de la resta determinar si el resto parcial cabe entre el
divisor
Divisin con restauracin
Ejemplo:
Divisin sin restauracin
Divisin sin restauracin
considerar la secuencia de operaciones que se realiza tras la resta en S2:
si D
msb
= 0 (cabe) se desplaza D a la izquierda y se resta d. Queda: 2D-d
si D
msb
= 1 (no cabe) se suma d, se desplaza el resultado y se resta d. Queda: 2(D+d)-d
= 2D+d
entonces, en lugar de restaurar:
sumar o restar d en funcin de D
msb
en la ltima iteracin restaurar el resto (sumndole d) si es necesario
Divisin sin restauracin
Ejemplo
Algoritmo divisin con signo
Inicializar registros:
M => divisor expresado en n bits siendo n el nmero de bits del dividendo
A, Q => dividendo expresado en C2 de 2n bits
Desplazar A y Q una posicin de bit a la izquierda
Si M y A tienen el mismo signo:
A = A M
En caso contrario:
A = A + M
La operacin anterior tiene xito si el signo de A es el mismo antes y
despus de la operacin:
Si la operacin tiene xito (A=0 AND Q=0) Q
0
= 1
Si la operacin no tiene xito y (A != 0 OR Q != 0 ) Q
0
= 0 y restablecer el valor
anterior de A
Repetir los pasos 2 a 4 tantas veces como nmero de bits tenga Q
El resto est en A. Si los signos del divisor y del dividendo eran iguales, el
cociente est en Q; en caso contrario, el cociente correcto es el C2 de Q.
Algoritmo divisin con signo: ejemplo
Ejemplo
Representacin en coma flotante (I)
La representacin en coma flotante est basada en la notacin cientfica:
La coma decimal no se halla en una posicin fija dentro de la secuencia de bits, sino que su
posicin se indica como una potencia de la base:
En todo nmero en coma flotante se distinguen tres componentes:
Signo: indica el signo del nmero (0= positivo, 1=negativo)
Mantisa: contiene la magnitud del nmero (en binario puro)
Exponente: contiene el valor de la potencia de la base (sesgado)
La base queda implcita y es comn a todos los nmeros, la ms usada es 2.
El valor de la secuencia de bits ( s, e
p-1
, ..., e
0
, m
q-1
, ..., m
0
) es: (-1)
s
.V(m).2
V(e)
Dado que un mismo nmero puede tener varias representaciones (0.1102
5
= 1102
2
=
0.01102
6
) los nmeros suelen estar normalizados:
un nmero est normalizado si tiene la forma 1,xx...2
xx...
( 0.1xx ...2
xx...
)
dado que los nmeros normalizados en base 2 tienen siempre un 1 a la izquierda, ste suele
quedar implcito (pero debe ser tenido en cuenta al calcular el valor de la secuencia)
Representacin en coma flotante (II)
Sea el siguiente formato de coma flotante de 32 bits (base 2, normalizado):
El rango de valores representable por cada uno de los campos es:
Exponente (8 bits con sesgo de 128) : -128 ... +127
Mantisa (23 bits normalizados) : los valores binarios representables oscilan entre
1.00... y 1.11..., es decir entre 1 y 2-2
-23
Estndar IEEE 754
2 formatos con signo explcito, representacin sesgada del exponente (sesgo igual a
(2
n-1
-1=127), mantisa normalizada con 1 bit implcito (1.Mantisa) y base 2.
precisin simple (32 bits): 1 bit de signo, 8 de exponente, 23 de mantisa
1.02
-126
... (2-2
-23
)2
127
= 1.210
-38
.. 3.410
38
precisin doble (64 bits): 1 bit de signo, 11 de exponente, 52 de mantisa
1.02
-1022
... (2-2
-52
)2
1023
= 2.210
-38
.. 1,810
38
2 formatos ampliados para clculos intermedios (43 y 79 bits).
Codificaciones con significado especial
Excepciones:
Operacin invlida: , 0, 00, , x mod 0, x cuando x<0, x=
Inexacto: el resultado redondeado no coincide con el real
Overflow y underflow
Divisin por cero
Precisin
El estndar exige que el resultado de las operaciones sea el mismo que se obtendra
si se realizasen con precisin absoluta y despus se redondease. Hacer la
operacin con precisin absoluta no tiene sentido pues se podran necesitar
operandos de mucha anchura.
El IEEE 754 ofrece cuatro modos de redondeo:
Redondeo al mas cercano (al par en caso de empate)
Redondeo a mas infinito (por exceso)
Redondeo a menos infinito (por defecto)
Redondeo a cero (truncamiento)
Al realizar una operacin cuntos bits adicionales se necesitan para tener la
precisin requerida?
Un bit r para el redondeo
Un bit s (sticky lgica de los bits que se desprecian)
Aritmtica en coma flotante
La siguiente tabla resume las operaciones bsicas de la aritmtica en coma
flotante:
En sumas y restas es necesario igualar los exponentes
La multiplicacin y divisin son ms directas.
Suma/resta en coma flotante (I)
Mtodo de suma/resta :
Extraer signos, exponentes y magnitudes.
Tratar operandos especiales (por ejemplo, alguno de ellos a cero)
Desplazar la mantisa del nmero con exponente ms pequeo a la derecha |e1-e2| bits
Fijar el exponente del resultado al mximo de los exponentes
Si la operacin es suma y los signos son iguales, o si la operacin es resta y los signos son
diferentes, sumar las mantisas. En otro caso restarlas
Detectar overflow de la mantisa
Normalizar la mantisa, desplazndola a la derecha o a la izquierda hasta que el dgito ms
significativo est delante de la coma decimal.
Redondear el resultado y renormalizar la mantisa si es necesario.
Corregir el exponente en funcin de los desplazamientos realizados sobre la mantisa.
Detectar overflow o underflow del exponente
Suma/resta en coma flotante (II)
Redondeo
El estndar exige que el resultado de las operaciones sea el mismo que se obtendra si se
realizasen con precisin absoluta y despus se redondease. Hacer la operacin con
precisin absoluta no tiene sentido pues se podran necesitar operandos de mucha anchura.
Suma/resta en coma flotante (III)
Suma/resta en coma flotante (IV)
Suma/resta en coma flotante (V)
Multiplicacin coma flotante
Sean x e y dos nmeros representados en coma flotante con valor:
X= (-1)
s1
*1,mant1*2
e1
Y= (-1)
s2
*1,mant2*2
e2
El producto de estos dos nmeros ser otro nmero z con valor:
Z=(-1)
(s1 s2)
*(1,mant1*1,mant2)*2
(e1+e2-sesgo)
Algoritmo de multiplicacin
El proceso de multiplicacin tiene varios pasos:
El signo del resultado es igual a la o-exclusiva de los signos de los
operandos.
La mantisa del resultado es igual al producto de las mantisas.
Este producto es sin signo.
Dado que los dos operandos estn comprendidos entre 1 y 2 el resultado r ser:
1 r < 4
Este paso puede requerir una normalizacin, mediante desplazamiento a la
derecha y ajuste del exponente resultado.
Si la mantisa resultado es del mismo tamao que la de los operandos habr
que redondear. El redondeo puede implicar la necesidad de normalizacin
posterior.
El exponente del resultado es igual a la suma de los exponentes de los
operandos.
Considerando que usamos una representacin sesgada del exponente, al hacer
esta suma estamos sumando dos veces el sesgo, y por tanto habr que restar
este sesgo una vez para obtener el resultado correcto.
Algoritmo de multiplicacin
Pasos 2 y 3: Producto y redondeo
Supongamos que usamos un multiplicador secuencial que es capaz de multiplicar dos
nmeros almacenados en dos registros de p bits A y B, y almacenar el resultado en otro
registro P de p bits (parte ms significativa del producto) y en A (parte menos significativa).
Como el resultado final slo se va a almacenar sobre el registro P, los bits contenidos en A
nos servirn para redondear el resultado.
Como el nmero est comprendido entre 1 y 3, x
0
puede ser tanto 1 como 0.
En cada uno de estos casos el redondeo se realiza de modo distinto:
Xo=0 => Desplazar P una posicin a la izquierda, introduciendo el bit g de A como bit menos
significativo de P. Los bit r y s (o-lgicade todos los s de A) nos sirven para redondear.
X0=1 => La coma decimal se desplaza una posicin a la izquierda, y se ajusta el exponente sumndole
1. Poner s= (r or s) y r = g.
El redondeo siempre se hace de acuerdo a la tabla:
Divisin coma flotante
Sean x e y dos nmeros representados en coma flotante con valor:
X= (-1)
s1
*1,mant1*2
e1
Y= (-1)
s2
*1,mant2*2
e2
La divisin de estos dos nmeros ser otro nmero z con valor:
Z=(-1)(s1 s2)*(1,mant1/1,mant2)*2
(e1-e2+sesgo)

Algoritmo de divisin
El proceso de divisin es similar al de multiplicacin.
Al hacer la resta de los exponentes hay que considerar que los sesgos se
anularn y por tanto al resultado hay que sumarle el sesgo.
Al operar con nmeros normalizados, la mantisa del resultado ser:
0,5< r < 2
Lo que implicar que la nica normalizacin posible ser mediante un desplazamiento a
la izquierda, para lo que se necesitar un bit de guarda, g.
Junto con el bit de guarda necesitaremos al hacer la divisin aadir un bit
ms de redondeo, r, a la derecha del bit de guarda, y con el resto del
resultado se har la o-lgica en el bit s.