Está en la página 1de 72

ARQUITECTURA DE

COMPUTADORAS
ARITMÉTICA DE COMPUTADORAS

Prof. Juan Álvarez


CONTENIDO
SEGUNDA SEMANA
Representación de tipos de datos. Aritmética
computacional con enteros. Suma, resta,
multiplicación y división de enteros. Estándar
IEEE para aritmética punto flotante. Aritmética
de punto flotante. Algoritmos de operaciones
aritméticas.
Introducción al laboratorio: Identificación de
elementos y tarjetas

Stallings, William. Organización y Arquitectura de


Computadores. 5ta. Edición. Editorial Prentice Hall, 2000.
Código biblioteca: 004.22/S78 (Capítulo 8)
REPRESENTACIÓN DE DATOS

Una expresión binaria como 01111000 puede tener en


el computador distintos significados:
• Un número binario sin signo
• Un número binario con signo
• Un número BCD
• Un carácter ASCII
• Una instrucción
• Una dirección
El significado que se le dé dependerá del tipo de
operación que se le imponga en el desarrollo de
una tarea.
REPRESENTACIÓN DE DATOS

•Si 01111000 es interpretado como un número


binario sin signo su valor en base decimal sería 120.
•El algoritmo de conversión es como sigue: Para el
número binario su valor es:
an 1an  2 ...a1a0
n 1
A   2i ai
i 0
es decir:

A  a n 1 2 n 1  ...  a1 21  a 0 20
REPRESENTACIÓN DE DATOS

• En la representación del número binario con


signo, el bit más significativo del número binario
es un bit de signo: si dicho bit es 0 el número es
positivo y si es 1, el número es negativo.
• La magnitud de un número binario con signo
positivo se determina utilizando el mismo
algoritmo empleado anteriormente para números
binarios sin signo. Así por ejemplo el número
00010010 corresponde en base decimal a +18.
REPRESENTACIÓN DE DATOS

• Para representar un número binario negativo, se


cuentan con dos notaciones: la notación del
complemento a dos y la notación signo magnitud.
• Para obtener el negativo de un número positivo en
notación complemento a dos, se complementan
todos los bits y se suma un 1 al bit menos
significativo. Por ejemplo el número positivo
01110110 tiene por complemento a dos el número
10001010 que es negativo porque su bit más
significativo es 1.
REPRESENTACIÓN DE DATOS

• El complemento 2 de este número es 01110110. Al


aplicar el algoritmo anterior se obtiene la
magnitud decimal 118. El número negativo es por
tanto –118.
• De hecho, el negativo de un número binario con
signo es su complemento a dos.
Sin embargo hay que señalar que la notación
Complemento a Dos no es la única representación
para los números binarios con signo. Otra
notación muy conocida es la de signo magnitud.
REPRESENTACIÓN DE DATOS

En la notación signo magnitud, los números positivos


se escriben de la misma manera que los números
en notación complemento a dos. Por ejemplo el
número +118 se escribe como 01110110, donde el
bit más significativo es el signo y los bits restantes
representan la magnitud.
Para determinar el correspondiente número negativo
en esta notación, basta con cambiar el bit de signo,
asi el número –118 es 11110110, la magnitud
permanece igual. Compárese con la representación
del número –118 en complemento a dos.
ARITMÉTICA CON ENTEROS

Esta diferencia de notación en los números binarios


con signo también se observa en los algoritmos
utilizados para realizar distintas operaciones
aritméticas.
Por ejemplo para sumar –7 = 1111 más +5 = 0101 en
la notación signo magnitud hay que separar los
signos y las magnitudes. Si los signos son iguales,
las magnitudes se suman; si los signos son
diferentes, la magnitud más pequeña debe restarse
de la magnitud más grande y el resultado se
acompaña del signo de la mayor magnitud: 1010.
ARITMÉTICA CON ENTEROS
ARITMÉTICA CON ENTEROS

En cambio para la notación complemento a dos, la


realización de la suma aritmética emplea el mismo
algoritmo utilizados en números decimales.
Ejemplos:
(-7) + (+5)
1001
0101
1110 = -2
Acarreo = 0
ARITMÉTICA CON ENTEROS

(-7) + (-6)
1001
1010
0011 = 3
Acarreo = 1
• En la última suma, el acarreo no está junto con el
resultado, normalmente se ignora.
ARITMÉTICA CON ENTEROS

• Entonces ocurre un desborde en el resultado de la


operación y la computadora lo consigna como
acarreo en alguno de sus registros internos.
• Es usual reconocer un desborde en el resultado si
el signo de este es contrario a lo esperado.
ARITMÉTICA CON ENTEROS
• Para multiplicar dos números binarios sin signo,
se puede aplicar el algoritmo usualmente utilizado
en numeración decimal. Ejemplo:
ARITMÉTICA CON ENTEROS

• Este algoritmo se puede realizar con más eficiencia


haciendo una suma progresiva de productos
parciales sin tener que esperar hasta el final para
ello y se evita así la necesidad de almacenar todos
los productos parciales ocupando registros.
• El diagrama de flujo se ilustra en la siguiente
figura.
ARITMÉTICA CON ENTEROS

• De acuerdo con este diagrama, el multiplicador y


el multiplicando están ubicados en los registros Q
y M. El acumulador A, de igual número de bits
que M, se carga inicialmente con 0. El bit de
acarreo se inicializa con 0.
• El algoritmo empieza leyendo uno por uno los bits
del multiplicador. Si Q0 es 1, se suma el
multiplicando al registro A y el resultado es
almacenado en A.
ARITMÉTICA CON ENTEROS

• Entonces se desplazan todos los bits de los


registros C, A y Q, una posición a la derecha, de
manera que el bit de C pasa a Am-1, A0 pasa a Qn-1,
Q0 se pierde.
• Si Q0 es 0, no se realiza la suma, sólo se efectúa el
desplazamiento.
• Este proceso se repite para cada bit del
multiplicador original. El producto de m + n bits
resultante queda en los registros A y Q.
ARITMÉTICA CON ENTEROS

• Una aplicación se da en el siguiente ejemplo.


• Luego se ilustra un diagrama de bloques del
hardware de la operación.
La secuencia de operaciones para obtener este
resultado contiene sumas y desplazamientos:
ARITMÉTICA CON ENTEROS
ARITMÉTICA DE ENTEROS CON SIGNO
ALGORITMO DE BOOTH
• Para multiplicar números binarios con signo se
acude al algoritmo de Booth cuyo diagrama de
flujo se ilustra en la siguiente figura.
• El multiplicador y el multiplicando se ubican en
los registros Q y M. El acumulador A, de igual
número de bits que M, se carga con 0. El bit de
arrastre Q+ se inicializa con 0. Q0 es el bit menos
significativo de Q.
ARITMÉTICA DE ENTEROS CON SIGNO
ALGORITMO DE BOOTH
El algoritmo empieza comparando Q0 con Q+. Si
ambos son iguales, todos los bits de A y Q se
desplazan una posición hacia la derecha, de
manera que Q0 se desplaza a Q+, A0 se desplaza a
Qn-1, el espacio vacío a la izquierda de A es
ocupado por una copia de Am-1, que también se ha
desplazado hacia la derecha.
ARITMÉTICA DE ENTEROS CON SIGNO
ALGORITMO DE BOOTH
• Si Q0 > Q+, al registro A debe restársele el registro
M ante de pasar a los desplazamientos. Si Q0 < Q+,
al registro A se le suma el registro M previo a los
desplazamientos. El proceso se repite tantas veces
dependiendo del número de bits del multiplicador
Q.
• El resultado aparecerá al final en los registro A y
Q.
ARITMÉTICA DE ENTEROS CON SIGNO
ALGORITMO DE BOOTH
• En el ejemplo que sigue se multiplicarán los
números binarios con signo M = 10111 y Q =
10011, ambos negativos. El resultado es un número
positivo: 0001110101
ARITMÉTICA DE ENTEROS CON SIGNO
ALGORITMO DE BOOTH
ARITMÉTICA DE ENTEROS - DIVISIÓN

• La división es una operación algo más compleja


que la multiplicación pero está basada en los
mismos principios generales. Para números
binarios sin signo, se puede acudir al algoritmo
empleado en números decimales.
• Un ejemplo:
ARITMÉTICA DE ENTEROS - DIVISIÓN
ARITMÉTICA DE ENTEROS - DIVISIÓN

En el siguiente diagrama se ilustra el diagrama de


flujo de de la división de números binarios sin
signo.
• El divisor se ubica en M y el dividendo en Q. En
cada paso, los registros A y Q se desplazan un bit
hacia la izquierda. M se resta de A para
determinar si A divide el resto parcial.
ARITMÉTICA DE ENTEROS - DIVISIÓN

• Si se cumple, Qo se hace 1, si no, Qo se hace cero y


M se suma de nuevo a A para recuperar el valor
anterior. El proceso se repite n pasos, el cociente
queda en Q y el residuo en A.
• Este proceso puede aplicarse también para
números negativos de la siguiente manera:
• Cargar el divisor en M y el dividendo en A y Q. El
dividendo debe estra expresado como número en
complemento a dos de 2n bits.
ARITMÉTICA DE ENTEROS - DIVISIÓN

• Por ejemplo el número 0111 es 00000111, y el


número 1001 es 11111001.
• A y Q se desplazan 1 bit hacia la izquierda. Si M y
A tienen el mismo signo, entonces A = A – M, de
otro modo A = A + M.
• La operación anterior tiene éxito si el signo de A es
el mismo antes y después de la operación. En ese
caso y si A= 0 y Q = 0, entonces se hace Q0 = 1.
ARITMÉTICA DE ENTEROS - DIVISIÓN

• Si la operación anterior no tiene éxito y Ao Q son


distintos de 0, entonces Q0 = 0, y hay que
restablecer el valor de A.
• Hay que repetir estos pasos n veces. El resto está
en A. Si los signos del divisor y del dividendo
fueran iguales, el cociente está en Q; si no, el
cociente correcto será el complemento a dos de Q.
ARITMÉTICA DE ENTEROS - DIVISIÓN

Ejemplo:
REPRESENTACIÓN DE PUNTO FLOTANTE

• La representación de números binarios


fraccionarios puede darse como se hace con los
números decimales.
• Por ejemplo el número +8.25 puede escribirse
01000.01
• Esta notación tiene sus limitaciones cuando se
tratan números muy grandes o fracciones muy
pequeñas. En los números decimales esta
limitación se supera con la notación científica.
REPRESENTACIÓN DE PUNTO FLOTANTE

Por ejemplo:
19
7.49  10
Es un número de veinte cifras. Esta notación aplicada
a los números binarios es conocida como
representación de punto flotante.
Un número real o de punto flotante tiene la siguiente
forma:
REPRESENTACIÓN DE PUNTO FLOTANTE

E
 M b
exponente
mantisa base

Donde M es la mantisa, b es la base de numeración y


E es el exponente. Por ejemplo, el número binario sin
signo 10110.011 puede representarse como

1.0110011  2 0100
REPRESENTACIÓN DE PUNTO FLOTANTE

El punto fraccionario se ha desplazado hasta dejar


sólo una cifra en el lado izquierdo y las demas cifras
en el lado derecho. Esto se llama normalización.
La normalización de la mantisa exige que el número
que queda a la izquierda del punto fraccionario sea
un 1. Asi por ejemplo:
4
0.0001011  1.011  2
REPRESENTACIÓN DE PUNTO FLOTANTE

Los números negativos pueden escribirse también en


la notación científica. Sin embargo la
representación del complemento a dos, que
trabaja muy bien para números enteros negativos,
no se utiliza aquí. La implementación de la
aritmética de punto flotante usada en los circuitos
electrónicos es mucho más complicada que para la
de números enteros.
REPRESENTACIÓN DE PUNTO FLOTANTE

Por esta razón, la aritmética de punto flotante se


suele implementar separadamente en el
coprocesador.
En la representación de punto flotante, se emplea
para la mantisa la notación signo-magnitud y al
exponente se le afecta con un sesgo.
ESTANDAR DE LA IEEE

El formato 754 del IEEE se desarrolló para facilitar


la portabilidad de los programas de un procesador
a otro. En la figura adjunta se ilustran los
formatos de punto flotante de 32 bits y de 64 bits.
En el formato de 32 bits, se dispone de un bit de
signo S, un exponente de 8 bits y una mantisa de
24 bits.
En la figura que sigue se muestra el formato de
punto flotante de 80 bits.
ESTANDAR DE LA IEEE

Al observar detenidamente el formato de 32 bits,


debe notarse que para indicar la mantisa se dan
sólo 23 bits. Sucede que ahí no se ha considerado
el bit entero 1 de la mantisa que está a la izquierda
del punto fraccionario en la representación
normalizada. Este bit es implícito.
ESTANDAR DE LA IEEE

Por otro lado, el exponente se almacena como un


exponente polarizado: al exponente real se le
agrega la polarización de 127 en binario para el
formato de 32 bits y de 1023 en binario para el
formato de 64 bits. Para el formato de 80 bits la
polarización es de 16383.
ESTANDAR DE LA IEEE
ESTANDAR DE LA IEEE

Formato IEEE para registros de 80 bits:

64 bits para la parte fraccionaria de la


mantisa, 15 bits para el exponente
polarizado, un bit para signo.
ESTANDAR DE LA IEEE

Ejemplos:
El número decimal +12 se escribe en binario 01100;
normalizando se obtiene:
S = 0; 1100 = 1.100 Expo (+3)
Exponente:
003  00000011
127  01111111
Exp  10000010
Mantisa: 10000000000000000000000 (23 dígitos)
ESTANDAR DE LA IEEE

b) El número decimal –12 se escribe en binario

1 .1  2 3

y se obtiene:
S = 1;
Exponente = 10000010;
Mantisa = 10000000000000000000000 (23dígitos)
En formato IEEE:
11000001010000000000000000000000 = C1400000h
ESTANDAR DE LA IEEE

c) El número decimal –1.75 se escribe en binario


 1.11  20 y se obtiene:
S = 1; Exponente = 01111111;
Mantisa = 11000000000000000000000
O sea 10111111111000000000000000000000
2
d) El número decimal +0.25 = 1.0  2 en binario
es:
S = 0; E = 01111101;
M = 00000000000000000000000
O sea 00111110100000000000000000000000
ESTANDAR DE LA IEEE
Otro ejemplo consiste en dar el número de
acuerdo al estándar:
ARITMÉTICA DE PUNTO FLOTANTE

Las operaciones aritméticas de punto flotante


se resumen en el siguiente cuadro:
Para los operandos x e y,

x  xm B ; y  y m B
xE yE

xE  y E
x  y  ( xm B  ym )  B yE

xE  y E
x  y  ( xm  y m )  B
xE  y E
x  y  ( xm  y m )  B
ARITMÉTICA DE PUNTO FLOTANTE

• En la aritmética de punto flotante, la


multiplicación y la división son sencillas. En el
siguiente diagrama se ilustra la multiplicación de
punto flotante.
• Si cualquiera de los operandos X o Y es 0, el
resultado es 0. El primer paso consiste en sumar
los exponentes. Si los exponentes están
almacenados en forma sesgada, su suma tendría
un doble sesgo. Por lo tanto hay que eliminar el
sesgo antes de sumarlos y el resultado volver a
sesgarlo.
ARITMÉTICA DE PUNTO FLOTANTE

• El resultado podría dar lugar a un desborde que


debe ser indicado y concluir el algoritmo.
• Si el exponente del producto está dentro del rango
apropiado, se multiplican las mantisas teniendo en
cuenta los signos, aplicando el algoritmo de
multiplicación. Tras calcular el producto se
normaliza y se redondea el resultado.
• Para el caso en que la multiplicación de las
mantisas se haga con el algoritmo de Booth, tomar
en cuenta que las mantisas deben estar en formato
complemento 2.
PROBLEMAS UTILIZANDO EL
ALGORITMO DE BOOTH
PROBLEMA RESUELTO DE PUNTO
FLOTANTE
Desarrolle el producto de los números: (- 3.25) x
(14.75) x (-1). En la solución utilice los algoritmos
estudiado en clase; asuma que los registros tienen
una magnitud de siete bits.
Expresar el producto final en las bases: diez,
dieciséis. Además en el formato IEEE
PROBLEMA RESUELTO DE PUNTO
FLOTANTE
Los registros M y Q tienen una mantisa de
siete bits. El contenido de los registros M y Q
es:
+3.25 = 011.01
-3.25 = 100.11
+14.75 = 01110.11
M = 0111011 x 2-2
Q = 1110011 x 2-2
Aquí el número –3.25 se ha ajustado al tamaño de
siete bits del registro Q. Las mantisas son enteras.
PROBLEMA RESUELTO DE PUNTO
FLOTANTE
PROBLEMA RESUELTO DE PUNTO
FLOTANTE
El resultado es un número negativo:
R = 11110100000001 x 2-4
Este número debe ser multiplicado por –1 que en
binario complemento dos se escribe como:
Q = 1111111 x 20
Acomodando R para un registro de 7 bits con el
principio del mínimo error, se obtiene:
M = 1010000 x 20
Al truncar el número R se comete un error, el asunto
es que el error sea mínimo. M y Q se multiplican
con el algoritmo de booth.
PROBLEMA RESUELTO DE PUNTO
FLOTANTE
PROBLEMA RESUELTO DE PUNTO
FLOTANTE
Como resultado de la operación se tiene:
R = 0110000 x 20
Está en notación complemento dos, pero como es
positivo, es igual a la notación signo magnitud.
R = 30 hex = 48 decimal
En formato IEEE:
R = + 1.10000 x 2+5
Sesgando el exponente:
00000101 + 01111111 = 10000100
Luego: R = 01000010010000000000000000000000
R = 42400000 hex
PROBLEMA RESUELTO

Desarrollar el producto de los números +7.13, -4.1,


-1.5, considerando que los registros M y Q son de
8 bits. Dar el resultado en binario y en decimal.
Hacer un análisis de los errores.
En notación complemento dos:
+7.13 = 0111.001000010---
-7.13 = 1000.110111101---
+4.1 = 0100.00011001100---
-4.1 = 1011.11100110011---
+1.5 = 01.1
-1.5 = 10.1
PROBLEMA RESUELTO
Se multiplica primero:
M = 01110010 x 2-4 con Q = 10111110 x 2-4,
donde –M = 10001101 x 2-4

Resultado parcial =
1110001000011010 x 2-8
= 11100010.00011010

Truncando: 100010.00 =
10001000 x 2-2
PROBLEMA RESUELTO
Ahora hay que multiplicar M = 10001000 x 2-2
por Q = 1111110.1 = 11111101 x 2-1

Resultado = 0101101000 x 2-3


= 0101101.000 que en decimal
es +45.0
Debería salir (+7.13) x (-4.1) x
(-1.5) = 43.84 lo que implica un
error del orden de 1.15
PROBLEMA RESUELTO

Sumar los números que están en formato IEEE de 32


bits C0FC000H y 40A4000H.
Se debe traducir los números a binario:
C0FC000H = 1100000011111100000000000000, de
donde el signo es negativo, el exponente sesgado
es 10000001 y la mantisa es
1.1111100000000000000;
40A4000H = 0100000010100100000000000000, de
donde el signo es positivo, el exponente sesgado
es 10000001 y la mantisa es
1. 0100100000000000000;
PROBLEMA RESUELTO

El exponente sesgado = exponente real + 127;


luego: Exponente real = 10000001 – 01111111 =
00000010 = +2
Los números son
X = - 1.11111 x 2+2
Y = + 1.01001 x 2+2
Como los números están en notación signo magnitud
y son de signo contrario, se resta la magnitud más
grande menos la más pequeña y al resultado se le
da el signo de la magnitud más grande:
PROBLEMA RESUELTO

R = - 0.10110 x 2+2, en notación signo magnitud.


En decimal R = - 2.75 y en formato IEEE:
R = - 1.0110 x 2+1
Exponente sesgado = 00000001 + 01111111 =
10000000
R = 11000000001100000000000 = C0300000H
PROBLEMA 1

Ejecutar el producto de los números (-12) y (-4);


asumir que ambos números se encuentran
almacenados en los registros M y Q
respectivamente. Considerar que el registro M está
conformado por de seis bits de mantisa y el
registro Q conformado por cinco bits de mantisa.
Mostrar el resultado en las bases diez, ocho y
dieciséis.
PROBLEMA 2

Ejecutar el producto de dos números (-17.5) y (-6.4);


asumir que los datos se encuentran almacenados
en los registros M y Q respectivamente, donde
cada registro está conformado por de seis y cinco
bits de mantisa.
Mostrar el resultado en las bases diez y dieciséis.
Hacer una evaluación de los errores por
truncamiento.
PROBLEMA 3

Ejecutar el producto de dos números (+13.8) y (-


4.625); asumir que los datos se encuentran
almacenados en los registros M y Q
respectivamente, donde cada registro está
conformado por de seis y cuatro bits de magnitud.
Mostrar el resultado en las bases diez y dieciséis.
Hacer una evaluación de los errores por
truncamiento.
PROBLEMA 4

Ejecutar el producto de dos números (-27.1) y


(+3.75); asumir que los datos se encuentran
almacenados en los registros M y Q
respectivamente, donde ambos registros están
conformado por de seis bits de magnitud.
Mostrar el resultado en las bases diez y en formato
IEEE.
PROBLEMA 5

Ejecutar el producto de dos números (F.2h) y (3.1h);


asumir que los datos se encuentran almacenados
en los registros M y Q respectivamente.
Mostrar el resultado en las bases diez y en formato
IEEE.
PROBLEMA 6

Ejecutar el producto de dos números (2.28) y (4.48);


asumir que los datos se encuentran almacenados
en los registros M y Q respectivamente.
Mostrar el resultado en las bases diez, ocho y
dieciséis.

También podría gustarte