Proyecto3 Multiplicacionporsoftware

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Pontificia Universidad Javeriana

Departamento de Electrónica – Carrera de Ingeniería de Sistemas


ARQUITECTURA Y ORGANIZACIÓN DEL COMPUTADOR - ID 034580

Proyecto No. 3:

Set de Instrucciones:

Multiplicación por software – Versión PDUA


En comparación con la suma o la sustracción, la multiplicación y división binarias son operaciones
complejas, tanto en implementaciones en hardware o bien para ser llevada a cabo por una rutina en
software. Actualmente la multiplicación ha sido implementada utilizando una gran variedad de
algoritmos. Analizaremos en primera instancia la multiplicación de número binarios sin signo, y
discutiremos posteriormente la multiplicación de números con signo en complemento A2, utilizando uno
de los algoritmos más empleados en esta tarea: el algoritmo de Booth [1]. Finalmente, revisaremos un
algoritmo de división sin signo.

1. Multiplicación de enteros sin signo


La Figura 1 ilustra la multiplicación de número binarios sin signo. El procedimiento de la figura es
similar al proceso llevado a cabo en papel. Es importante tener en cuenta algunos aspectos claves:

Figura 1.Multiplicación de números binarios positivos

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

La Figura 2(a) el diagrama de flujo del algoritmo de multiplicación optimizado. El multiplicando y


multiplicador son almacenados en los requisitos M y Q respectivamente. Se requiere así mismo un tercer
registro, A, inicializado en ceros. Finalmente, el registro C de un solo bit, que almacenará el carry potencial
resultado de la suma. El algoritmo leerá cada uno de los bits del multiplicador individualmente en cada
paso del algoritmo. Si el bit Q0 es ‘1’ (LSB de Q), el multiplicando es sumado al registro A y el resultado es
almacenado en el registro A y el registro C. Luego, todos los bits de los registros C, A y Q se desplazan a la
derecha, de forma que el bit C va al bit An-1, el bit A0 va al bit Qn-1, y finalmente el bit Q0 es descartado. Si
el bit Q0 es ‘0’, no se realiza ninguna suma, únicamente se desplazan los registros. El proceso se repite con
cada bit el multiplicador original. El resultado de la multiplicación quedará almacenado en los registros A
y Q concatenados en un vector de 2n bits. Nótese que cuando el bit Q0 es ‘0’, no se realiza la suma.

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

Figura 5. Comparación de multiplicación de enteros sin signo y en complemento A2

En el caso de que el multiplicador sea negativo, el procedimiento anterior tampoco funcionará. La


razón es que los bits del multiplicador ya no corresponden a corrimientos o multiplicaciones con el
multiplicando. Por ejemplo, el número -3 se representa como 1101 en complemento A2. Si simplemente
se tomaran los productos parciales basados en las posiciones de cada uno de los bits, se tendría la
siguiente correspondencia expresada en la ecuación 2.

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.

Figura 6 Algoritmo de Booth para multiplicación de números binarios en complemento A2 [2].

El diagrama de flujo del algoritmo de Booth se presenta en la Figura 6. El multiplicando y el


multiplicador se almacenarán en los registros M y Q respectivamente. Se requiere de un registro adicional
de un bit localizado lógicamente a la derecha del bit menos significativo (Q0) del registro Q, designado
como Q-1. El resultado de la multiplicación aparecerá al final del proceso en los registros A y Q. Tanto A
como Q-1 son inicializados en ceros. El algoritmo se encarga de monitorear los bits del multiplicador, uno
a la vez. En este caso, el bit a la derecha del bit en escrutinio también es analizado. Si ambos bits son
iguales (1-1 o 0-0), entonces todos los bits de los registros A, Q y Q-1 son desplazados (arithmetic shift) a
la derecha en una posición. Si por el contrario, los bits analizados difieren, entonces el multiplicando es
sumado o restado al registro A, dependiendo si los dos bits corresponden a 0-1 o 1-0 respectivamente.
Una vez se completa la suma o resta, se procede a realizar el desplazamiento a la derecha (arithmetic
shift) de registros A, Q y Q-1. En ambos casos, el desplazamiento ocurre de tal forma que el bit más
significativo del registro A, denominado An-1, no solamente es desplazado a la posición An-2, sino que
también permanece en la posición An-1, proceso requerido para preservar el signo del número almacenado
en el registro A. Esto se conoce como corrimiento aritmético (arithmetic shift), dado que se conserva el
bit de signo.

4
Figura 7. Ejemplo del algoritmo de multiplicación de Booth (7×3)

La Figura 7 presenta un ejemplo de la secuencia de eventos ocurridos en la ejecución del algoritmo


de Booth cuando se desea multiplicar 7 por 3, al igual que en la Figura 8(a). El resto de la Figura 8 muestra
como el algoritmo funciona con cualquier combinación de números positivos y negativos. Así mismo, es
posible observar la eficiencia del algoritmo. Los bloques de 1s y 0s son pasados por alto, con un promedio
de una suma o resta por bloque.

Figura 8. Ejemplos del Algoritmo de multiplicación de Booth

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.

3. Planteamiento del Problema


El procesador PDUA está diseñado basado en una arquitectura de una dirección, con registro
acumulador interno, como se observa en la Figura 9. Sus características más relevantes incluyen un bus
de direcciones de 8 bits, lo que implica que el máximo espacio direccionable en memoria de 256 Bytes,
i.e., 28 posiciones de memoria de 1 byte; y un bus de bus de datos de 8 Bits. La figura adicionalmente
indica los posibles caminos de datos, saliendo del banco de registros, pasando por la ALU, y alojándose en
los registros MAR y MDR para comunicación externa, o en el registro IR para decodificación de
instrucciones por parte de la Unidad de Control.

6
Figura 9. Arquitectura del procesador PDUA

El procesador PDUA adicionalmente presenta un conjunto de instrucciones reducido, observado en


la Tabla 1. Una única instrucción MOV permite realizar varias operaciones de movimiento de datos entre
los registros internos del procesador, entre los registros y la memoria en ambas direcciones.
Adicionalmente, presenta un conjunto reducido de operaciones aritméticas y lógicas. Por otro lado, se
observan las instrucciones de control de flujo de programa representadas en saltos condicionales e
incondicionales. Finalmente, se observa el conjunto de direcciones “1xxxxxxx” que corresponde a un
espacio direccionable para instrucciones nuevas, cuyo propósito es el de ampliar las capacidades del
procesador para versiones nuevas de la arquitectura. Como se observa en la Tabla 1, el procesador PDUA
no posee una instrucción de multiplicación, y por tanto, todo programa que requiera esta operación
aritmética deberá implementar una rutina en software. El objetivo del presente taller, es implementar
precisamente rutinas de multiplicación y exponenciación en lenguaje ensamblador PDUA.
Tabla 1. Conjunto de Instrucciones 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.

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy