Está en la página 1de 8

Pontificia Universidad Javeriana

Departamento de Electrónica
ORGANIZACIÓN DE COMPUTADORES - ID 031692

Proyecto No. 1: 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, bien implementada 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 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.

1
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
2
estos valores en complemento A2, se 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:
1101 = 1 × 2 + 1 × 2 + 0 × 2 + 1 × 2 = 2 + 2 + 2 = 13 (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
3
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.
1101 = −(1 × 2 + 1 × 2 + 0 × 2 + 1 × 2 ) = −(2 + 2 + 2 ) = −13 (2)
1 0
De hecho, el resultado esperado debe corresponder a -(2 +2 ). 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:
𝑀 × (00011110 ) = 𝑀 × (2 + 2 + 2 + 2 )
= 𝑀 × (16 + 8 + 4 + 2 ) (2)
= 𝑀 × (30 )
El número total de estas operaciones puede ser reducido a dos si se observa que:
2 +2 + ⋯+ 2 =2 +2 (3)
𝑀 × (00011110 ) = 𝑀 × (2 − 2 )
= 𝑀 × (32 − 2 ) (4)
= 𝑀 × (30 )
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
5
multiplicador, incluyendo el caso en donde únicamente un 1 el cual es interpretado como un
bloque.
𝑀 × (01111010 ) = × (2 + 2 + 2 + 2 + 2 )
= 𝑀 × (2 − 2 + 2 − 2 ) (5)
= 122
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𝑥 𝑥 ⋯𝑥 𝑥 } (6)
En ese orden de ideas, el valor de X se puede representar de la siguiente forma:
𝑋 = −2 + (𝑥 ×2 ) + (𝑥 ×2 ) + ⋯ (𝑥 × 2 ) + (𝑥 × 2 ) (7)
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𝑥 𝑥 ⋯𝑥 𝑥 } (8)
Entonces el valor de X estará dado por:
𝑋 = −2 +2 + ⋯+ 2 + 𝑥 ×2 + ⋯ + (𝑥 × 2 ) (9)
De la ecuación 3, se obtiene entonces:
2 +2 +⋯+ 2 =2 −2 (10)
Reordenando la ecuación 9 se obtiene:
𝑋 = −2 +2 + ⋯+ 2 = −2 (11)
Sustituyendo la ecuación 11 en la ecuación 9:
𝑋 = −2 + 𝑥 ×2 + ⋯ + (𝑥 × 2 ) (12)
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

6
externa, o en el registro IR para decodificación de instrucciones por parte de la Unidad de
Control.

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

7
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 utilizando dos registros.
2. 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. Optimice su código, realizando llamados a subrutinas
para operaciones recurrentes.
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 cada ejercicio 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.

También podría gustarte