ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 23 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and Design (The hardware / software interface), 4ta Edición, de David A. Patterson y John L. Hennessy. Editorial Morgan Kaufmann
AGENDA Implementación de las operaciones básicas en una UAL: Multiplicación División 07/09 – 11/09 Jerarquía de memoria Jerarquía de Memoria y Proyecto 14-09 – 18/09 Memoria virtual y la MMU 3er Examen Parcial 28/09 – 02/10 Implementación de una UAL: Suma y Resta Implementación de UAL: Multiplicación y división
Multiplicación Este algoritmo es secuencial 1001 Multiplicando 1101 Multiplicador 1001 Prod. parcial 1 00000 Prod. parcial 2 100100 Prod. parcial 3 1001000 Prod. parcial 4 1110101 Resultado = 11710 9 13 27 117 Este algoritmo es secuencial El producto se obtiene de la suma sucesiva de los productos parciales Si el multiplicando tiene n bits y el multiplicador tiene m bits; el producto puede tener hasta n+m bits Para operandos de 32 bits, necesitaremos hasta 64 bits para mostrar el resultado Existe posibilidad de overflow
Algoritmo de multiplicación secuencial Inicio 1. Se suma el Multiplicando al producto y el resultado se coloca en el registro Producto 1 ¿Multiplicador? 2. Se desplaza el registro Multiplicando un bit hacia la izquierda 3. Se desplaza el registro Multiplicador un bit hacia la derecha No ¿Repetición 32? Si Fin
Ejemplo de multiplicación secuencial Multiplicando 1011 0110 0000 1000010 00001011 11 6 66 1) 00000000 Nuevo 00010110 2) 00010110 Nuevo 00101100 3) 00101100 Nuevo 01011000 4) 00000000 Nuevo 10110000 Multiplicador 0110 1) 0011 2) 0001 3) 0000 4) 0000 Producto 00000000 1) 00000000 2) 00010110 3) 01000010 4) 01000010
¿Multiplicación con signo? Convertir ambos operandos a números positivos Multiplicarlos Si los signos eran diferentes entre si, complementar a 2 el resultado (Hacerlo negativo) Esta implementación, utiliza pocos recursos hardware, pero es lenta.
Multiplicación de Booth Se basa en la observación de las agrupaciones de unos (1s) en los números escritos en binario: 14d -> 00001110 | | 16- 2 = 14 63d -> 00111111 | | 64 - 1 = 63 454d-> 0111000110 | | | | 512-64 8-2 = 448+6 = 454 ¿Qué ocurre con números como 0110101010?
Multiplicación de Booth La frontera inicial (Bit menos significativo) tiene un peso negativo. La frontera final (Bit más significativo) tiene un peso positivo. Los unos y los ceros entre fronteras tienen un peso nulo. Podemos recodificar al multiplicador según Booth: 1011 -> 0 0 0 0 1 0 1 1 0110 -> 0 0 0 0+1 0-1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 = 66 11 6 66 Ejercicio: Multiplicar, usando 6 bits; 4 * (-5)
Multiplicador secuencial de Booth Producto Multiplicando Codificador de Booth + Sumador
Multiplicador de Booth de 2do Grado Se recodifican lo números del multiplicador por pares, como por ejemplo: +1 0 → +2 -1 0 → -2 +1 -1 → +1 0110 -> 0 0 0 0+1 0-1 0 0110 -> +2-2 1011 -> 0 0 0 0 1 0 1 1 0110 -> +2-2 1 1 1 1 1 1 0 1 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 = 66 11 6 66
División La operación de dividir suele implementarse por software En promedio, es la operación menos utilizada en los programas de computación Es la operación de base más difícil y penalizadora de implementar Si la multiplicación es una sucesión de sumas, ¿Qué es la división?
División con restauración 001000011000 00101001 (-d)11010111 01101 11111000 (+d)00101001 (R) 001000011 (-d)111010111 0000110100 (-d)1111010111 00000010110 (-d)11111010111 11111101101 (+d)00000101001 (R) 000000101100 (-d)111111010111 000000000011 536 41 -41 12 12 1234 -41 -29 +41 (Restauración) 126 85 44 3 -38 +41 (Restauración)