You are on page 1of 30

ELO311 Estructuras de Computadores Digitales Algoritmos de Multiplicacin y Divisin

Toms Arredondo Vidal


Este material est basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer Organization & Design", (segunda y tercera edicin), Morgan Kaufmann, CA. 2005 material del curso anterior ELO311 del Prof. Leopoldo Silva www.wikipedia.org

Algoritmos de Multiplicacin y Divisin


A continuacin se estudiarn algoritmos para efectuar las operaciones de multiplicacin y divisin entera. Usualmente estas operaciones estn soportadas por hardware dedicado, adicional a la unidad aritmtica que efecta las operaciones bsicas de sumar y restar nmeros con y sin signo. Al estudiar los algoritmos podr advertirse la naturaleza secuencial de stos, en contraposicin al carcter combinacional de las operaciones de suma y resta.

Multiplicacin como Suma Repetitiva


La operacin de multiplicacin se puede estudiar como la suma repetitiva del multiplicando las veces que indique el multiplicador. Producto = Multiplicando * Multiplicador
P: Producto R: Multiplicando Q: Multiplicador

P=R*Q

Multiplicacin como Suma Repetitiva (cont)


Ejemplo: la operacin 7*3, en sistema binario puede realizarse segn: 0111*0011 = 0111 + 0111 + 0111 = 010101 Si los factores son de N dgitos, el producto puede expresarse con 2N dgitos.
Con N=3 en sistema decimal se tiene que con operandos sin signo, el mayor factor es 999, y se tiene que 999 * 999 = 998.001 requiere 6 cifras. Si se considera factores positivos, pero con signo, el mayor positivo es 499 y en este caso tambin se requieren 6 dgitos para el producto: 499*499 = 249.001

Multiplicacin como Suma Repetitiva (cont)


Empleando el lenguaje C, puede describirse la idea anterior segn: /* Algoritmo a P y R de largo 2N. Q largo N. Sumador ancho 2N. */ /* Q y R positivos P = R * Q */ for( j = Q; j > 0 ; j-- ) {
P += R;

} Ntese que P y R deben ser de largo 2N, y el sumador tambin debe ser de largo 2N. En este algoritmo el nmero de sumas es proporcional a Q.

Multiplicacin Mediante Desplazamientos


El siguiente algoritmo, corresponde a la multiplicacin manual (con papel y lpiz) en la cual se va multiplicando las cifras del multiplicando por cada una de las cifras del multiplicador:

Puede reducirse el nmero de veces que se repite la operacin, notando que, en el sistema binario, slo debe efectuarse la suma del multiplicando si la cifra correspondiente del multiplicador es uno; ya que la multiplicacin por cero no cambia el producto parcial.

Multiplicacin Mediante Desplazamientos (cont)


Entonces en lugar de efectuar todas las sumas del multiplicando (desplazado una posicin hacia la izquierda) por cada una de las cifras del multiplicador, podra efectuarse:

La deteccin si debe realizarse o no la suma del multiplicando R, puede lograrse observando solamente la cifra menos significativa de Q, siempre que despus de realizada la suma, se divida (en forma entera) el valor de Q. Esto se logra con un corrimiento hacia la derecha de Q, en una posicin. Adems el multiplicando debe desplazarse en una posicin hacia la izquierda.

Multiplicacin Mediante Desplazamientos (cont)


El siguiente algoritmo desarrolla las ideas anteriores, y la suma se realiza a lo ms en N pasos; es decir una vez por cada cifra de Q. Ntese que (Q&1), determina el valor del bit menos significativo del multiplicador Q. /*Algoritmo b P y R de largo 2N. Q largo N. Sumador ancho 2N. Q y R positivos P = R * Q */ for( j = N ; j >= 0 ; j-- ) { if(Q&1) P+=R; Q=Q/2; R=R*2; }

Multiplicacin Mediante Desplazamientos (cont)


Si reemplazamos la divisin y multiplicacin entera por 2, por funciones que realicen corrimientos, se tiene el siguiente algoritmo: /*Algoritmo 1 P y R de largo 2N. Q largo N Sumador ancho 2N. */ /* Q y R positivos P = R * Q */ for( j = N; j >= 0; j-- ) { if (Q&1) P += R; lls(R); lrs(Q); } Se emplean las funciones lls y lrs, por logical left shift y logical right shift respectivamente. Como los bits de signo de Q y R siempre sern ceros, pueden efectuarse corrimientos lgicos o aritmticos.

Fundamentos de Algoritmos de Multiplicacin


Para analizar los algoritmos, si Q positivo( qn es cero), entonces:

El Algoritmo a, descrito usando ecuaciones de diferencias : S0 = 0 + R q0 20 S1 = S0 + R q1 21 S2 = S1 + R q2 22 S3 = S2 + R q3 23 ....... Sn-1 = Sn-2 + R qn-1 2n-1 Sn = Sn-1 + R qn 2n La cifra de Q, en la etapa i-sima, qi slo puede ser cero o uno. Si es uno, el trmino asociado se suma.

Fundamentos de Alg. de Multiplicacin (cont)


El trmino R 2i es el multiplicador desplazado i posiciones hacia la izquierda. Esto justifica el algoritmo ya visto, que corresponde a la multiplicacin tradicional, efectuada con papel y lpiz. Si Q est en notacin complemento dos y Q es positivo, entonces: qn = 0. El producto final queda en Sn.

Fundamentos de Alg. de Multiplicacin (cont)


El Algoritmo 1, expresado por ecuaciones de diferencias:
Agregando el multiplicador anterior multiplicado por dos (ri)

S0 = 0 + R q0 20 = 0 + r0 q0 S1 = S0 + R q1 21 = S0 + r1 q1 S2 = S1 + R q2 22 = S1 + r2 q2 S3 = S2 + R q3 23 = S2 + r3 q3 ....... Sn-1 = Sn-2 + R qn-1 2n-1 Sn = Sn-1 + R qn 2n

, r0 = R , r1 = 2 r0 , r2 = 2 r1 , r3 = 2 r2

= Sn-2 + rn-1 qn-1 , rn-1 = 2 rn-2 = Sn-1 + rn qn , rn = 2 rn-1

El producto queda en Sn.

Fundamentos de Alg. de Multiplicacin (cont)


Tambin pueden escribirse: q0 = Q0 & 1 , Q0 = (Q/20) q1 = Q1 & 1 , Q1 = (Q/21) = Q0/2 q2 = Q2 & 1 , Q2 = (Q/22) = Q1/2 .... qn = Qn & 1 , Qn = (Q/2n) = Qn-1/2 Resumiendo se tienen las siguientes ecuaciones: q i = Qi & 1 Si = Si-1 + riqi ri = ri-1 * 2 Qi = Qi-1 / 2 con S-1= 0 con r0 = R con Q0 = Q

Entonces en la etapa i-sima, si qi es 1, se suma al producto parcial anterior Si-1, el multiplicador anterior multiplicado por dos (que es ri).

Algoritmos ms eficientes
Se desea desarrollar ahora un algoritmo ms eficiente, que emplee menos recursos electrnicos que el anterior: Estudiemos la multiplicacin binaria de (+26)*(+13) = +338

Se observa que en cada paso slo se suman 6 cifras (bits), la cifra menos significativa de la suma acumulada no afecta las sumas posteriores y puede decirse que es una cifra del producto final. Tampoco es necesario correr el multiplicando a la izquierda, si en lugar de esto se desplaza la suma (el producto parcial) hacia la derecha. De esta forma una de las entradas del sumador quedar fija con el valor del multiplicando (R). Se requiere un sumador de n+1 bits solamente.

Algoritmos ms eficientes (cont)


A partir de las relaciones de recurrencia del Algoritmo 1, se proceder a obtener las ecuaciones del Algoritmo 2. Bsicamente consisten en expresar las sumas parciales en funcin solamente de R. Se comienza dividiendo por 2i: S0/20 = 0/20 + Rq0 = 0 + Rq0 = s0 S1/21 = S0/21 + Rq1 = s0/2 + Rq1 = s1 S2/22 = S1/22 + Rq2 = s1/2 + Rq2 = s2 S3/23 = S2/23 + Rq3 = s2/2 + Rq3 = s3 ....... Sn-1/2n-1 = Sn-2/2n-1 + R qn-1 = sn-2/2 + Rqn-1 = sn-1 Sn/2n = Sn-1/2n + R qn = sn-1/2 + Rqn = sn

Algoritmos ms eficientes (cont)


Ordenando las relaciones anteriores y definiendo x, que representa la suma si dividida por dos: s0 = 0 + Rq0 , x0 = s0/2 , con x-1 = 0 s1 = x0 + Rq1 , x1 = s1/2 s2 = x1 + Rq2 , x2 = s2/2 s3 = x2 + Rq3 , x3 = s3/2 ....... sn-1 = xn-2 + R qn-1 , xn-1 = sn-1/2 sn = xn-1 + R qn , xn = sn/2

Algoritmos ms eficientes (cont)


Si qi es uno se suma R con la suma anterior desplazada en uno hacia la derecha (xi-1). Con qn = 0 para nmero positivo. Para la etapa i-sima: qi = Qi &1 si = xi-1 + R qi con x-1 = 0 xi = si / 2 con s0 = 0 Qi = Qi-1 / 2 con Q0 = Q Si qi es uno se suma R con la suma anterior desplazada en uno hacia la derecha (xi-1). Si qi es cero slo se desplazan hacia la derecha las variables s y Q.

Algoritmos ms eficientes (cont)


/*Algoritmo 2 s, Q y R de largo n+1. Sumador ancho n+1 */ /* Q y R positivos. Al salir sQ= R * Q */ for(i=0, s = 0; i<n+1; i++) { if (Q &1 ) s=s+R; Q = Q/2; s = s /2 } No hay problemas de rebalse con nmeros sin signo, ya que R es positivo, y rn siempre es cero. Q =Q/2; s = s /2 puede escribirse como un desplazamiento lgico a derecha (lrs). MIPS almacena este resultado en los registros HI y LO.

Operandos con Signo: Algoritmos de Booth


A partir de las relaciones de recurrencia del Algoritmo 2, se proceder a obtener un algoritmo para operandos con signo. Q en complemento 2 se puede escribir como: Q = - qn2n + qn-12n-1+ qn-2 2n-2+ ....+q121+ q020 Y tambin como: Q = - (qn2n + qn-12n-1+ qn-2 2n-2+ .... + q1211+ q020) + 2(qn-12n-1+ qn-2 2n-2 + ....+q121+ q020 ) Introduciendo el factor 2 en las potencias de los trminos positivos: Q = - (qn2n + qn-12n-1+ qn-2 2n-2+ .... + q1211+ q020) + (qn-12n+ qn-2 2n-1+ ....+ q122 + q021 ) Finalmente, agrupando los factores de las potencias iguales, se logra: Q = (qn-1 - qn ) 2n + (qn-2- qn-1) 2n-1 + (qn-3- qn-2) 2n-2 + .... +(q1- q2) 22 + (q0- q1) 21 + (0 - q0) 20

Algoritmos de Booth (cont)


Entonces las relaciones de recurrencia para el algoritmo dos: s 0 = 0 + R q0 s1 = s0/2 + R q1 s2 = s1/2 + R q2 .... sn-1 = sn-2/2 + R qn-1 sn = sn-1/2 + R qn Pueden transformarse en: s0 = 0 + R (0 - q0 ) s1 = s0/2 + R (q0 - q1 ) s2 = s1/2 + R (q1 - q2 ) .... sn-1 = sn-2/2 + R (qn-2 - qn-1_) sn = sn-1/2 + R (qn-1 - qn) Algoritmo de Booth Algoritmo 2.

Algoritmos de Booth (cont)


Entonces, resulta el algoritmo de Booth, para la etapa i: si = si-1/2 + R (qi-1 - qi ) con q-1 = 0 y s-1 = 0 Qi = Qi-1/2 con Q0 = Q qi = Qi &1 Si qi-1 = qi no se suma R al producto parcial, que es la suma acumulada anteriormente (si=1), desplazada un bit hacia la derecha. Si qi = 0 y qi-1 = 1 se suma R al producto parcial. Si qi = 1 y qi-1 = 0 se resta R del producto parcial. Es muy eficiente solo requiere n sumas o restas mas los corrimientos correspondientes.

Algoritmos de Booth (cont)


Es preciso agregar un bit, a la derecha de Q. Para poder comparar, en la etapa i-sima, el ltimo de Q, qi, con el de la etapa anterior qi-1. Este bit, se inicia en cero, y se denomina qq en el algoritmo. Slo es preciso agregar un flip-flop, para capacitar al hardware del algoritmo 2 en un dispositivo, para realizar multiplicaciones de operandos con signo. Como se efectan restas, un producto parcial puede resultar negativo, por esta razn debe correrse ste a la derecha con extensin del signo (usando ars). El bit que sale del producto parcial si, puede ocupar el bit del signo de Q, espacio que queda disponible al mover Q en una posicin hacia a la derecha.

Algoritmos de Booth (cont)


/*Algoritmo 3: Booth S, Q y R de largo n+1. /* Sumador ancho n+1. Q y R con signo SQ= Q * R */ for(i=0, qq=0; i<n+1; i++) { if( (Q&1) = =0 && qq = = 1 ) S += R; /* se suma */ if( (Q&1) = =1 && qq = = 0 ) S -= R; /* se resta */ ars(S, Q, qq); } Resultado va quedando en Q /* ars es un right shift aritmetico, qq = Q0 */

Algoritmos de Booth (cont)


Ejemplo: Algoritmo Booth, resultado va quedando en P R = 2 = 0010, Q = -7 = 1001 (Nota: Para restar R comp 2: -2 = 1110) R: Multiplicando 0010 0010 0010 0010 0010 0010 0010 0010 0010 P:(S, 0000 1110 1111 0001 0000 0000 0000 1110 1111 Q, 1001 1001 0100 0100 1010 1010 0101 0101 0010 qq) 0 0 1 1 0 0 0 0 1 qi=1, qi-1=0, se resta R de S se corre S,Q,qq 1 bit qi=0, qi-1=1, se suma R a S se corre S,Q,qq 1 bit qi=0, qi-1=0, hacer nada se corre S,Q,qq 1 bit qi=1, qi-1=0, se resta R de S se corre S,Q,qq 1 bit

Resultado: P = multiplicando * multiplicador = R * Q = -14 = 1111 0010

Multiplicacin de Enteros sin signo


El algoritmo para multiplicar enteros positivos debe modificarse ya que en caso de enteros sin signo puede producirse reserva de salida en el sumador que produce los productos parciales. Si se considera la siguiente tabla de verdad:
Pn, Rn, y Sn son los bits ms significativos de los registros P, R y del bus de salida S del sumador. Cn-1 es la reserva generada en la penltima etapa de sumador. Co es la reserva de salida. La reserva de salida, para enteros positivos es cero. Pero si Pn o Rn pueden tomar valores iguales a uno, podra producirse una reserva de salida Co igual a uno.

P = R*Q

Multiplicacin de Enteros sin signo (cont)


Consideremos un registro de largo 3 y multipliquemos P=R*Q Para P=7*3, con 6 bits para el producto este es positivo: El producto parcial P, se inicia en cero, despus de la primera suma P contiene 111. Luego de efectuado el primer corrimiento de P, debe realizarse la suma S = P + R: Que produce reserva de salida:

Entonces al efectuar el corrimiento hacia la derecha de P, la posicin ms significativa, que queda vacante, debe llenarse con la reserva de salida. Entonces el algoritmo para multiplicar enteros sin signo, debe efectuar un corrimiento lgico hacia la derecha de los registros concatenados Co, P y Q.

Multiplicacin de Enteros sin signo (cont)


En C: for (i = 0; i < n+1; i++) { if ( Q&1) P += R; lrs(Co, P, Q); } La implementacin electrnica de este algoritmo se realiza mediante un registro de desplazamiento, y resulta sencilla si se dispone de la generacin de la reserva de salida del sumador.

Algoritmos de Divisin
Algunas definiciones:

El dividendo es de largo 2N; el divisor, cuociente y resto de ancho N. Se requieren 2N para expresar el resultado de una divisin. Algoritmo 1: P de largo 2N, Q y R de largo N. Parmetros: el dividendo en P, divisor en R. Resultados: el cuociente en Q, resto en P. while (P >= R) { P-=R; Q++; }

Algoritmos de Divisin (cont)


Algoritmo 2: P, Q y R de largo N. Al inicio dividendo en P y Q, divisor en R. Sumador de largo N. for(j=N ; j>=0; j--) { if(P>=R) { P-=R; lls(P,Q); Q++; } else lls(P,Q); } Overflow = bit ms significativo de Q.

Algoritmos de Multiplicacin en MIPS


Las operaciones de corrimiento se realizan mucho ms rpido que las multiplicaciones. Dado que se emplean redes combinacionales para los corrimientos. Entonces un compilador C, la expresin a = a * 8 la ensamblara, si a est en $s0, segn: sll $s0, $s0, 3 Recordar que el resultado de una multiplicacin, ocupa el doble del tamao de los operandos. La expresin, en C: a = b * c Se compila, suponiendo b en $s2, c en $s3. El resultado se obtiene como la parte ms significativa de a en $s0 y la menos significativa en $s1: mult $s2, $s3 mfhi $s0 mflo $s1

You might also like