Organización del Computador I Verano Aritmética (4 de 5) Basado en el capítulo 4 del libro de Patterson y Hennessy Multiplicaciones y Divisiones Verano 2014 Profesora Borensztejn
MULTIPLICACIONES 1011 1011 1011 1100 0000 0000 10000100 Si el multiplicador y el multiplicando son de n bits, el número de dígitos del producto puede tener hasta 2n bits. El algoritmo de multiplicación básico es igual al que todos sabemos: Repetir 32 veces: 1. Comprobar el bit mas bajo del multiplicador, si es uno, sumar el multiplicando al producto 2. Desplazar el multiplicando 1 bit a la izquierda 3. Desplazar el multiplicador 1 bit a la derecha
Hardware del multiplicador El control genera las señales apropiadas, en el momento apropiado: Chequea el bit0 Si bit0=1, activa write del producto Activa las señales shift left y shift right. El multiplicando se inicializa con la mitad superior en cero. El multiplicando, el multiplicador y el producto se guardan en registros.
Algoritmo y Hardware de la Multiplicación Cada iteración en un ciclo de reloj Initially 0
Algoritmo de la multiplicación Las siguientes operaciones se realizan en paralelo: Shift del multiplicando Shift del multiplicador Suma del multiplicando al producto si el bit del multiplicador es 1 Un ciclo por suma parcial. No esta mal, si la frecuencia de multiplicaciones es baja.
Ejemplo: 2*3
Mejora del Algoritmo de la Multiplicación Para que usar un sumador de 64 bits si la mitad del registro multiplicando está vacío? Idea: Dejar fijo el multiplicador y hacerlo de 32 bits Sumarlo a la parte alta del producto, con un sumador de 32 bits En cada iteración, desplazar el producto a la derecha
Mejora al algoritmo de la multiplicación Suma el multiplicando a la parte alta del producto, luego de sumar desplaza a la derecha el producto. Trabaja con un sumador de 32 bits. Multiplicando ALU de 32 bits 32 bits suma Shift Right Multiplicador 32 bits bit0 Producto Shift Right 64 bits Write Control
Más mejoras al algoritmo de la multiplicación Guarda el multiplicador en la parte baja del registro producto.
Multiplicaciones con signo 0100 0000 0000 1011 0000 1011 00101100 No funciona! Que sucede si el multiplicando es negativo? Hay que extender el signo mientras lo acumulamos en el registro producto 0100 0000 0000 111011 0000 1011 11101100
Multiplicaciones con signo 1100 0000 0000 1011 1011 1011 11000100 No funciona! Que sucede si el multiplicador es negativo? No tiene sentido!!!!
Multiplicaciones con signo 1100 0000 0000 1011 1011 1011 11000100 No funciona si interpretamos los números con signo! Alternativas: Convertir el multiplicando y el multiplicador a números positivos, luego multiplicar, y luego aplicar el signo correspondiente al producto, recordando extender el signo a la izquierda. Buscar otros algoritmos
Multiplicaciones rápidas En lugar de un sumador, se usan 31 organizados de forma jerárquica para que el retardo sea mínimo Se mejoran los sumadores Se aplica la técnica de segmentación
Ambas instrucciones dejan la palabra de menos peso en el registro Lo y la palabra de mas peso en el registro Hi. Ambas instrucciones ignoran el desbordamiento si el producto no cabe en 32 bits. Desbordamiento para números sin signo: el registro Hi es distinto de cero. Desbordamiento para números con signo: el registro Hi es distinto de la extensión de signo del registro Lo. MIPS: MULT y MULTU mult rs, rt 31 26 21 16 11 6 0 0 rs rt 0 0x18 multu rs, rt 31 26 21 16 11 6 0 0 rs rt 0 0x19
MIPS Multiplication Two 32-bit registers for product HI: most-significant 32 bits LO: least-significant 32-bits Instructions mult rs, rt / multu rs, rt 64-bit product in HI/LO mfhi rd / mflo rd Move from HI/LO to rd Can test HI value to see if product overflows 32 bits PSEUDOINSTRUCCIÓN mul rd, rs, rt Least-significant 32 bits of product > rd Chapter 3 Arithmetic for Computers 15
La División Dividendo Divisor - 1001010 1000 1000 1001 00010 101 Cociente - 1010 1000 10 Resto Dividendo=Cociente*Divisor + Resto
Division divisor quotient dividend remainder 1001 1000 1001010-1000 10 101 1010-1000 10 n-bit operands yield n-bit quotient and remainder Chapter 3 Arithmetic for Computers 17 Check for 0 divisor Long division approach If divisor dividend bits 1 bit in quotient, subtract Otherwise 0 bit in quotient, bring down next dividend bit Restoring division Do the subtract, and if remainder goes < 0, add divisor back Signed division Divide using absolute values Adjust sign of quotient and remainder as required
Division Hardware Initially divisor in left half Initially dividend Chapter 3 Arithmetic for Computers 18
Hardware del divisor El control genera las señales apropiadas, en el momento apropiado. El algoritmo es el de prueba y error. Si hubo error (nocabe) hay que restaurar el valor del resto. El resto se inicializa con el dividendo. El divisor, a cada iteración se desplaza a la derecha para alinearse con el dividendo. Ocupa inicialmente los 32 bits más altos del registro de 64 bits.
Copyright 2014 Elsevier Inc. All rights reserved. 20
Ejemplo: 7 div 2 Iteración Paso Cociente Divisor Resto 0 inicio 0 0010 0000 0000 0111 1 resto - divisor 0 0010 0000 1110 0111 resto < 0 0 0010 0000 0000 0111 desplazar divisor 0 0001 0000 0000 0111 2 resto - divisor 0 0001 0000 1111 0111 resto < 0 0 0001 0000 0000 0111 desplazar divisor 0 0000 1000 0000 0111 3 resto - divisor 0 0000 1000 1111 1111 resto < 0 0 0000 1000 0000 0111 desplazar divisor 0 0000 0100 0000 0111 4 resto - divisor 0 0000 0100 0000 0011 resto > 0 1 0000 0100 0000 0011 desplazar divisor 1 0000 0010 0000 0011 5 resto - divisor 1 0000 0010 0000 0001 resto > 0 11 0000 0010 0000 0001 desplazar divisor 1 0000 0001 0000 0011 El divisor es de 32 bits, y se va desplazando a la derecha en un registro de 64 bits è se puede ahorrar espacio, y hardware si en lugar de desplazar el divisor a la derecha, se desplaza el resto a la izquierda. (mismo cambio que en el multiplicador). La ALU queda ahora de 32 bits.
Mejora al algoritmo de la división FIGURE 3.11 An improved version of the division hardware. The Divisor register, ALU, and Quotient register are all 32 bits wide, with only the Remainder register left at 64 bits. Compared to Figure 3.8, the ALU and Divisor registers are halved and the remainder is shifted left. This version also combines the Quotient register with the right half of the Remainder register. (As in Figure 3.5, the Remainder register should really be 65 bits to make sure the carry out of the adder is not lost.) Copyright 2014 Elsevier Inc. All rights reserved. 22
Ejemplo : 7 div 2 Iteración Paso Divisor Resto 0 inicio 0010. 0000 0111 desplazar resto 0010. 0000 1110 1 resto - divisor 0010. 1110 1110 resto <0, desplaza resto, 0 en coc. 0010. 0001 1100 2 resto - divisor 0010. 1111 1100 resto <0, desplaza resto, 0 en coc. 0010. 0011 1000 3 resto - divisor 0010. 0001 1000 resto >0, desplaza resto, 1 en coc. 0010. 0011 0001 4 resto - divisor 0010. 0001 0001 resto >0, desplaza resto, 1 en coc. 0010. 0010 0011 5 desplazar resto 0001 0011
MIPS Division Use HI/LO registers for result HI: 32-bit remainder LO: 32-bit quotient Instructions div rs, rt / divu rs, rt No overflow or divide-by-0 checking Software must perform checks if required Use mfhi, mflo to access result Chapter 3 Arithmetic for Computers 24
Mismo hw para multiplicar y dividir
Observaciones La multiplicación y la división son procesos iterativos, y necesitan de algoritmos Los algoritmos se realizan en hardware utilizando elementos de almacenamiento (registros), es decir, son sistemas con memoria o secuenciales.
División con signo La solución mas simple es operar con los valores absolutos. Luego se ajustan los signos del cociente y del resto. Se debe cumplir que: Dividendo=Cociente*Divisor + Resto Regla: El dividendo y el resto deben tener el mismo signo
FIN Aritmética (4 de 5)