Proyecto3 Multiplicacionporsoftware
Proyecto3 Multiplicacionporsoftware
Proyecto3 Multiplicacionporsoftware
Proyecto No. 3:
Set de Instrucciones:
1. La multiplicación involucra la generación de productos parciales, uno por cada dígito del
multiplicador. Estos productos parciales serán sumados al final para generar el producto final.
2. Los productos parciales son fácilmente generados: cuando el dígito del multiplicador es ‘0’, el
producto parcial será “00..00”. Por el contrario, cuando el dígito es ‘1’, el producto parcial
corresponderá al multiplicando.
3. El producto total será la suma de esto productos parciales, desplazados una posición relativa a la
izquierda con respecto al producto parcial precedente.
4. La multiplicación de dos binarios enteros de n-bits, generará un producto total de 2n-bits de
longitud.
Comparado con la aproximación en papel, existen varias optimizaciones posibles en la multiplicación
para lograr el proceso mucho más eficiente en términos computacionales. En primer lugar, es posible
realizar una suma permanente de los productos parciales en lugar de esperar al final para realizar el
cálculo. Esto elimina la necesidad de almacenamiento de todos los productos parciales, y por tanto menos
1
registros deben ser utilizados. Por cada dígito del multiplicador con valor de ‘1’, una suma y un corrimiento
son necesarios; por el contrario, cada dígito en ‘0’ únicamente requiere un corrimiento.
Figura 2. Multiplicación binaria sin signo: (a) Diagrama de flujo [2]. (b) Ejemplo de ejecución del algoritmo de
multiplicación binaria sin signo
2. Multiplicación en complemento A2
Se ha discutido que, en el caso de la suma y la sustracción, es posible tratar los operandos en
complemento A2 de igual forma que si fueran enteros sin signo, y por tanto el hardware implementado
para realizar estas operaciones aritméticas es el mismo. Considere el siguiente ejemplo:
Figura 3. Ejemplo de suma en donde los operandos se interpretan como enteros sin signo (9+3=12) o como binarios en
complemento A2 (-7+3=-4)
Si los números anteriores son considerados como enteros sin signo, la operación corresponde a 9
(1001) mas 3 (0011) cuyo resultado es 12 (1100). Por el contrario, si los operandos se consideran números
binarios en complemento A2, la operación corresponde a -7 (1001) sumado 3 (0011), cuyo resultado es -
4 (1100).
Desafortunadamente, este mismo esquema no se puede utilizar en el caso de la multiplicación.
Observando el ejemplo ilustrado en la Figura 1, en donde se multiplican los números 11 (1011) y 13 (1101),
obteniendo como resultado 143 (10001111). Si se interpretan estos valores en complemento A2, se
2
tendría la multiplicación de -5 (1011) y -3 (1101) dando como resultado -113 (10001111) y no 15
(00001111) como se espera. El ejemplo anterior muestra que la multiplicación de número negativos no
puede ser operada de la misma manera como se operan los números enteros sin signo. De hecho, el
algoritmo de multiplicación arrojará resultados incorrectos incluso si uno de los dos operandos en
negativo. Para justificar lo anterior, es importante recordar cómo se expresa un número en potencias de
2, como se observa en la ecuación 1:
11012 = 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = 23 + 22 + 20 = 1310 (1)
Adicionalmente, la multiplicación de un número binario por 2n se realiza mediante el corrimiento del
número a la derecha en n posiciones. Con esto en mente, es posible observar la Figura 4 donde se han
generado las multiplicaciones parciales y se escrito de forma explícita. Los productos parciales pueden ser
interpretados como números binario de 2n bits generados a partir del multiplicando de n bits.
De esta manera, el multiplicando de 4 bits, interpretado como entero sin signo, se almacena en una
palabra de 8 bits, 00001011. Cada uno de los productos parciales, (excepto el correspondiente a 20)
consiste en la palabra 00001011 desplazada a la izquierda, y los lugares sin ocupar llenados con ceros.
Figura 4. Multiplicación de dos números binarios de 4 bits, que generan un resultado de 8 bits.
El problema observado al utilizar operandos en complemento A2, es que cada contribución del
operando negativo como producto parcial, debería ser un número negativo de 2n bits, conservando los
bits de signo a la izquierda. En la Figura 5(a) se observa la multiplicación de 9 por 3, dando como resultado
27. La operación de multiplicación siguiendo el procedimiento descrito hasta el momento. Por otro lado,
en la Figura 5(b), el patrón 1001 es interpretado como entero en complemento A2, y por tanto representa
el número -7. En este caso, cada uno de los productos parciales deberá ser una palabra negativa de 8 bits
en complemento A2. Esto se logra extendiendo el bit de signo (1) a la izquierda como se observa en los
productos parciales de la Figura 5(b).
3
1101 = −(1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 ) = −(23 + 22 + 20 ) = −13 (2)
De hecho, el resultado esperado debe corresponder a -(21+20). De esta forma, si el multiplicador es
negativo, no puede ser utilizado directamente en los productos parciales.
Existen muchas maneras de resolver este dilema. Una posible aproximación es convertir ambos
operandos en números positivos, realizar la multiplicación y luego generar el complemento A2 del
resultado en caso de que difiera el signo de los números involucrados en la operación. Sin embargo, en
general se prefiere utilizar un algoritmo que no involucre la última conversión a complemento A2. Uno de
los algoritmos de multiplicación más utilizados es el algoritmo de Booth [1]. Además de resolver el
problema de los operandos con signo, el algoritmo de Booth es capaz de acelerar el cálculo de un
producto.
4
Figura 7. Ejemplo del algoritmo de multiplicación de Booth (7×3)
Es posible analizar en detalle el algoritmo de Booth. En el caso donde ambos operandos son positivos.
En particular, asumamos un multiplicador positivo consistente en un bloque de 1s rodeado de 0s (por
ejemplo, el número 3010 = 000111102). Como se mencionó, la multiplicación se logra sumando
apropiadamente copias desplazadas del multiplicando:
𝑀 × (000111102 ) = 𝑀 × (24 + 23 + 22 + 21 )
= 𝑀 × (1610 + 810 + 410 + 210 ) (3)
= 𝑀 × (3010 )
El número total de estas operaciones puede ser reducido a dos si se observa que:
2𝑛 + 2𝑛−1 + ⋯ + 2𝑛−𝐾 = 2𝑛−1 + 2𝑛−𝐾 (4)
𝑀 × (000111102 ) = 𝑀 × (25 − 21 )
= 𝑀 × (3210 − 210 ) (5)
= 𝑀 × (3010 )
5
De esta manera, el producto puede ser generado utilizando una suma y una resta del multiplicando.
Este esquema se puede extender a cualquier número de bloques de 1s en el multiplicador, incluyendo el
caso en donde únicamente un 1 el cual es interpretado como un bloque.
𝑀 × (011110102 ) = × (26 + 25 + 24 + 23 + 21 )
= 𝑀 × (27 − 23 + 22 − 21 ) (6)
= 12210
El algoritmo de Booth se ajusta a este esquema mediante la ejecución de una resta cuando el primer
1 del bloque es encontrado (1-0) y una suma cuando el final del bloque es encontrado (0-1). Para
demostrar que el algoritmo también funciona para un multiplicador negativo, es necesario resaltar lo
siguiente: se asume X como un número binario negativo en complemento A2:
𝑋 = {1𝑥𝑛−2 𝑥𝑛−3 ⋯ 𝑥1 𝑥0 } (7)
En ese orden de ideas, el valor de X se puede representar de la siguiente forma:
𝑋 = −2𝑛−1 + (𝑥𝑛−2 × 2𝑛−2 ) + (𝑥𝑛−3 × 2𝑛−3 ) + ⋯ (𝑥1 × 21 ) + (𝑥0 × 20 ) (8)
El bit más significativo de X es 1 dado que X es negativo. Asumamos que el k-ésimo bit es 0, entonces
X tendrá la siguiente forma:
𝑋 = {111 ⋯ 10𝑥𝑘−1 𝑥𝑘−2 ⋯ 𝑥1 𝑥0 } (9)
Entonces el valor de X estará dado por:
𝑋 = −2𝑛−1 + 2𝑛−2 + ⋯ + 2𝑘+1 + (𝑥𝑘−1 × 2𝑘−1 ) + ⋯ + (𝑥0 × 20 ) (10)
De la ecuación 4, se obtiene entonces:
2𝑛−2 + 2𝑛−3 + ⋯ + 2𝑘−1 = 2𝑛−1 − 2𝑘−1 (11)
Reordenando la ecuación 9 se obtiene:
𝑋 = −2𝑛−1 + 2𝑛−2 + ⋯ + 2𝑘+1 = −2𝑘+1 (12)
Sustituyendo la ecuación 12 en la ecuación 10:
𝑋 = −2𝑘−1 + (𝑥𝑘−1 × 2𝑘−1 ) + ⋯ + (𝑥0 × 20 ) (13)
Analizando la ecuación 8, es posible observar que todos los bits a partir del bit x0 hasta el primer 0
encontrado son manejados de forma adecuada ya que generan los términos de la ecuación 12, excepto
el término (-2k+1). A medida que el algoritmo revisa los bits a la izquierda para encontrar el primer 0 y el
siguiente 1 (2k+1), una transición 1-0 ocurre y por tanto se produce una resta (-2k+1), que es el primer
término en la ecuación 12.
Se observa que el algoritmo de Booth se acoge a este esquema, realizando una resta cuando el primer
1 se encuentra (10), una suma cuando (01) es detectado, y finalmente, otra resta cuando el primer 1 del
siguiente bloque de 1s aparece. De esta manera, el algoritmo realiza menos sumas y restas que el modelo
de multiplicación entera.
6
Figura 9. Arquitectura del procesador PDUA
Ejercicios propuestos:
1. Implemente una rutina de multiplicación para enteros con signo utilizando el algoritmo de Booth, en
lenguaje ensamblador para el procesador PDUA, la cual multiplique dos valores almacenados en
memoria. El resultado de la multiplicación, al ser de 16 bits, deberá quedar almacenado en memoria
7
utilizando dos registros. Optimice su código, realizando llamados a subrutinas para operaciones
recurrentes.
a. Es permitido proponer instrucciones nuevas, para realizar algunas de las funciones que se
requieren en la ejecución del algoritmo de Booth. Incluya una tabla que complemente el
set de instrucciones original de PDUA con sus nuevas instrucciones.
Bono: Implemente un programa en lenguaje ensamblador para el procesador PDUA para calcular el valor
de xy, donde la base x y el exponente y se encuentren almacenados en memoria. El resultado de la
operación deberá igualmente quedar almacenado en memoria en dos posiciones al finalizar el
programa.
Condiciones de Entrega:
• El código deberá estar escrito en nemónicos y en binario. Adicionalmente se espera que el código
esté debidamente comentado.
• Deberá presentar una prueba de escritorio para verificar el funcionamiento de sus programas. Sea
creativo.
• En caso de requerir la creación de instrucciones nuevas para la implementación de sus rutinas, podrá
asignarles un opcode en el rango de valores disponibles para tal fin.
• Los informes del proyecto deberán contener el código realizado, las pruebas de escritorio, así como
una explicación suficiente de ambos ítems. Adicionalmente, deberá incluir una sección donde
explique las instrucciones nuevas que ha propuesto para implementar los algoritmos.
• El proyecto será sustentado ante el profesor de la asignatura, donde se explicarán los algoritmos
desarrollados.
4. Referencias
[1] A. Booth, “A Signed Binary Multiplication Technique,” Q. J. Mech. Appl. Math., vol. 4, 1951.
[2] W. Stallings, Computer Organization and Architecture, 10th editi. Pearson, 2016.