2ArqComp_Aritmética de Computadoras

Download Report

Transcript 2ArqComp_Aritmética de Computadoras

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

a

1

a

0

su valor es:

A

i n

 1   0 2

i a i

es decir:

A

a n

 1 2

n

 1  ...

a

1 2 1 

a

0 2 0

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 Q 0 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 A m-1 , A 0 pasa a Q n-1 , Q 0 se pierde. Si Q 0 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. Q 0 es el bit menos significativo de Q.

ARITMÉTICA DE ENTEROS CON SIGNO ALGORITMO DE BOOTH El algoritmo empieza comparando Q 0 con Q + . Si ambos son iguales, todos los bits de A y Q se desplazan una posición hacia la derecha, de manera que Q 0 se desplaza a Q + , A 0 se desplaza a Q n-1 , el espacio vacío a la izquierda de A es ocupado por una copia de A m-1 , que también se ha desplazado hacia la derecha.

ARITMÉTICA DE ENTEROS CON SIGNO ALGORITMO DE BOOTH

• •

Si Q 0 > Q + , al registro A debe restársele el registro M ante de pasar a los desplazamientos. Si Q 0 < 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 Q 0 = 1.

ARITMÉTICA DE ENTEROS - DIVISIÓN

• •

Si la operación anterior no tiene éxito y Ao Q son distintos de 0, entonces Q 0 = 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:

7 .

49  10  19

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

M

b

E

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:

0 .

0001011

1 .

011

2

 4

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; Exponente: 1100 = 1.100 Expo (+3)

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  2 0

y se obtiene: S = 1; Exponente = 01111111; Mantisa = 11000000000000000000000 O sea 10111111111000000000000000000000

1 .

0  2

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

x

y x m B x E

;

y

y m B y E

 (

x m B x E

y E

y m

) 

B y E x

y x

y

 (

x m

y m

) 

B x E

y E

 (

x m

y m

) 

B x E

y E

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 2 0 Acomodando R para un registro de 7 bits con el principio del mínimo error, se obtiene: M = 1010000 x 2 0 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 2 0 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.2

8 ) y (4.4

8 ); 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.