Descargar

Aritmética de computadoras

Enviado por Pablo Turmero


    edu.red

    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.

    edu.red

    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:

    es decir:

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    ARITMÉTICA CON ENTEROS

    edu.red

    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

    edu.red

    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.

    edu.red

    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.

    edu.red

    ARITMÉTICA CON ENTEROS Para multiplicar dos números binarios sin signo, se puede aplicar el algoritmo usualmente utilizado en numeración decimal. Ejemplo:

    edu.red

    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.

    edu.red

    edu.red

    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.

    edu.red

    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.

    edu.red

    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:

    edu.red

    ARITMÉTICA CON ENTEROS

    edu.red

    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.

    edu.red

    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.

    edu.red

    edu.red

    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.

    edu.red

    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

    edu.red

    ARITMÉTICA DE ENTEROS CON SIGNO ALGORITMO DE BOOTH

    edu.red

    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:

    edu.red

    ARITMÉTICA DE ENTEROS – DIVISIÓN

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    edu.red

    ARITMÉTICA DE ENTEROS – DIVISIÓN Ejemplo:

    edu.red

    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.

    edu.red

    REPRESENTACIÓN DE PUNTO FLOTANTE Por ejemplo: 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:

    edu.red

    REPRESENTACIÓN DE PUNTO FLOTANTE 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 (Gp:) mantisa (Gp:) base (Gp:) exponente

    edu.red

    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:

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    ESTANDAR DE LA IEEE

    edu.red

    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.

    edu.red

    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: Mantisa: 10000000000000000000000 (23 dígitos)

    edu.red

    ESTANDAR DE LA IEEE b) El número decimal –12 se escribe en binario

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

    edu.red

    ESTANDAR DE LA IEEE c) El número decimal –1.75 se escribe en binario y se obtiene: S = 1; Exponente = 01111111; Mantisa = 11000000000000000000000 O sea 10111111111000000000000000000000 d) El número decimal +0.25 = en binario es: S = 0; E = 01111101; M = 00000000000000000000000 O sea 00111110100000000000000000000000

    edu.red

    ESTANDAR DE LA IEEE Otro ejemplo consiste en dar el número de acuerdo al estándar:

    edu.red

    ARITMÉTICA DE PUNTO FLOTANTE Las operaciones aritméticas de punto flotante se resumen en el siguiente cuadro: Para los operandos x e y,

    edu.red

    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.

    edu.red

    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.

    edu.red

    edu.red

    PROBLEMAS UTILIZANDO EL ALGORITMO DE BOOTH

    edu.red

    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

    edu.red

    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.

    edu.red

    PROBLEMA RESUELTO DE PUNTO FLOTANTE

    edu.red

    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.

    edu.red

    PROBLEMA RESUELTO DE PUNTO FLOTANTE

    edu.red

    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

    edu.red

    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

    edu.red

    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

    edu.red

    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

    edu.red

    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;

    edu.red

    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:

    edu.red

    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

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.

    edu.red

    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.