Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porelvia muñoz Modificado hace 8 años
1
Unidad Aritmético Lógica Escuela Superior de Informática Universidad de Castilla-La Mancha
2
Contenido Introducción – Operaciones lógicas: desplazamientos lógicos – Operaciones aritméticas: multiplicación y división Multiplicación – Sin signo: suma desplazamiento – Sin signo: sumas y restas – Con signo: Algoritmo de Booth División – Con restauración – Sin restauración Coma flotante
3
La ALU dentro del computador
4
Operaciones lógicas: desplazamientos
5
Operaciones aritméticas: multiplicación y división La operación básica es la suma, que se supone conocida en este curso También se suponen conocidos los multiplicadores paralelo de tipo combinacional En este tema se estudian los algoritmos para realizar las operaciones desde el punto de vista de la arquitectura, centrados en la multiplicación y la división
6
MULTIPLICACIÓN BINARIA SIN SIGNO: SUMA DESPLAZAMIENTO
7
Fundamentos Se multiplica cada bit del multiplicador, empezando por el menos significativo, por todos los bits del multiplicando Si es 0, el resultado es 0 Si es 1, el resultado es el multiplicando Cada vez que se considera un nuevo bit del multiplicador, se desplaza hacia la izquierda una posición el nuevo producto y se añade a la suma parcial acumulada La última suma parcial será el resultado
8
Ejemplo 01100110 10011001 01100110 inicial 00000000 00000000 0011000110 000110000110 x Primera suma parcial acumulada Segunda suma parcial acumulada Ultima suma parcial acumulada (RESULTADO) 0011011000110110 6x9=54 01100110
9
IDEA BÁSICA Hay que sumar las sumas acumuladas con el multiplicando DESPLAZADO A LA IZQUIERDA cuando el LSB del multiplicador sea 1. EN LUGAR DE DESPLAZAR A LA IZQUIERDA EL MULTIPLICANDO, SE DESPLAZAN A LA DERECHA LAS SUMAS PARCIALES
10
Necesidades El producto de un número binario de n bits con otro de m bits necesita m+n bits Sea A el multiplicador y B el multiplicando En el caso de que m=n, se necesitan dos registros iguales para almacenar el resultado Sean R3 y R4 los registros donde se va almacenando el resultado
11
Arquitectura C R2 R4R3 R1 CON Contador
12
Algoritmo Suma Desplazamiento Se inicializan a 0 el contador de bits del multiplicador y el registro R3 Se carga R1 con el multiplicando A y R2 con el multiplicador B Se analiza el LSB de R2 Si es 1, se suma R1+ R3 y el resultado se deja en R3 Si es 0, se suma R1 + 0 (es decir, no se hace nada) y el resultado se deja en R3 Se incrementa el contador Se produce un desplazamiento aritmético (con extensión de signo) de una posición hacia la derecha del conjunto C-R3-R4 Se realiza una rotación circular a derecha de R2 Se mira si el contador ha llegado hasta el final En caso negativo se repite el proceso, volviendo a preguntar por el LSB de R2 En caso afirmativo se finaliza el proceso y el resultado está en C-R3-R4
13
Inicio, R3 0, Cont 0 R1 A R2 B R2 0 ? R3 R3+R1 Incrementa contador C-R3-R4 desplaza derecha R2 rota circul Cont? Fin 1 0 NO SI SUMA DESPLAZAMIENTO
14
Ejemplo Multiplicar A=0110 por B=1001 El resultado debe ser 6x9=54 (en binario 0011 0110) C R2 R4 R3 R1 Contador
15
Inicialización Se carga A en R1 y B en R2. Se pone a 0 el registro R3 y el contador 0 1001 XXXX 0000 0110 0 Contador
16
Comprobación de R2 0 y acción Como el LSB de R2 es 1 se suman R3 + R1 y se deja el resultado en R3 0 1001 XXXX 0110 0 Contador
17
Incremento contador Se incrementa el contador en una unidad 0 1001 XXXX 0110 1 Contador
18
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 1001 0XXX 0011 0110 1 Contador
19
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 1100 0XXX 0011 0110 1 Contador
20
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 1100 0XXX 0011 0110 1 Contador
21
Como el LSB de R2 es 0 se suman R3 + 0, es decir, NO hace nada, y se deja el resultado que había en R3 0 1100 0XXX 0011 0110 1 Contador Comprobación de R2 0 y acción
22
Incremento contador Se incrementa el contador en una unidad 0 1100 0XXX 0011 0110 2 Contador
23
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 1100 10XX 0001 0110 2 Contador
24
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 0110 10XX 0001 0110 2 Contador
25
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 0110 10XX 0001 0110 2 Contador
26
Como el LSB de R2 es 0 se suman R3 + 0, es decir, NO hace nada, y se deja el resultado que había en R3 0 0110 10XX 0001 0110 2 Contador Comprobación de R2 0 y acción
27
Incremento contador Se incrementa el contador en una unidad 0 0110 10XX 0001 0110 3 Contador
28
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 0110 110X 0000 0110 3 Contador
29
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 0011 110X 0000 0110 3 Contador
30
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 0011 110X 0000 0110 3 Contador
31
Como el LSB de R2 es 1 se suman R3 + R1 y se deja el resultado en R3 0 0011 110X 0110 3 Contador Comprobación de R2 0 y acción
32
Incremento contador Se incrementa el contador en una unidad 0 0011 110X 0110 4 Contador
33
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 0011 0110 0011 0110 4 Contador
34
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 1001 0110 0011 0110 4 Contador
35
¿Ha llegado al final? Comprueba que el contador es 4 y acaba. El resultado está en el registro R3 seguido de R4 0 0011 0110 0011 0110 4 Contador
36
Otro ejemplo Multiplicar A=1001 por B=0110 El resultado debe ser 9x6=54 (en binario 0011 0110) C R2 R4 R3 R1 Contador
37
Inicialización Se carga A en R1 y B en R2. Se pone a 0 el registro R3 y el contador 0 0110 XXXX 0000 1001 0 Contador
38
Como el LSB de R2 es 0 se suman R3 + 0, es decir, NO hace nada, y se deja el resultado que había en R3 0 0110 XXXX 0000 1001 0 Contador 1001 0110 00000 Comprobación de R2 0 y acción
39
Incremento contador Se incrementa el contador en una unidad 0 0110 XXXX 0000 1001 1 Contador
40
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 0110 0XXX 0000 1001 1 Contador 1001 0110 00000 00000 0
41
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 0011 0XXX 0000 1001 1 Contador
42
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 0011 0XXX 0000 1001 1 Contador
43
Como el LSB de R2 es 1 se suman R3 + R1 y se deja el resultado en R3 0 0011 0XXX 1001 1 Contador 1001 0110 00000 1001+ 01001 0 Comprobación de R2 0 y acción
44
Incremento contador Se incrementa el contador en una unidad 0 0011 0XXX 1001 2 Contador
45
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 0011 10XX 0100 1001 2 Contador 1001 0110 00000 1001+ 01001 0 00100 10
46
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 1001 10XX0100 1001 2 Contador
47
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 1001 10XX 0100 1001 2 Contador
48
Como el LSB de R2 es 1 se suman R3 + R1 y se deja el resultado en R3 0 1001 10XX 1101 1001 2 Contador 1001 0110 00000 1001+ 01001 0 1001+ 01101 10 Comprobación de R2 0 y acción
49
Incremento contador Se incrementa el contador en una unidad 0 1001 10XX 1101 1001 3 Contador
50
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 1001 110X 0110 1001 3 Contador 1001 0110 00000 1001+ 01001 0 1001+ 01101 10 00110 110
51
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 1100 110X 0110 1001 3 Contador
52
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 1100 110X 0110 1001 3 Contador
53
Como el LSB de R2 es 0 se suman R3 + 0, es decir, NO hace nada, y se deja el resultado que había en R3 0 1100 110X 0110 1001 3 Contador 1001 0110 00000 1001+ 01001 0 1001+ 01101 10 0000+ 00110 110 Comprobación de R2 0 y acción
54
Incremento contador Se incrementa el contador en una unidad 0 1100 110X 0110 1001 4 Contador
55
Desplazamiento a derecha Se desplaza en conjunto C-R3-R4 una posición a la derecha 0 1100 0110 0011 1001 4 Contador 1001 0110 00000 1001+ 01001 0 1001+ 01101 10 0000+ 00110 110
56
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 0110 0011 1001 4 Contador
57
¿Ha llegado al final? Comprueba que el contador es 4 y acaba. El resultado está en el registro R3 seguido de R4 0 0110 0011 1001 4 Contador 1001 0110 00000 1001+ 01001 0 1001+ 01101 10 0000+ 00110 110
58
MULTIPLICACIÓN BINARIA SIN SIGNO: SUMAS Y RESTAS
59
Fundamentos (I) Progresión geométrica de razón r y primer término a 1 Restando miembro a miembro y despejando S, resulta que la suma de los n términos de una progresión geométrica cuyo primer término es a 1 y cuya razón es r, viene dada por También se puede ver de la forma Si r =2, el denominador se hace 1 y queda que la suma es el doble del último término, menos el primero
60
Fundamentos (II) El valor de un número expresado en binario se puede suponer la suma de una progresión geométrica de razón 2. Supongamos que tiene varios unos consecutivos Ejemplo: el binario 0011100 equivalen a 2 4 +2 3 +2 2 Según lo visto anteriormente, 2 4 +2 3 +2 2 = 2·2 4 -2 2= 2 5 -2 2
61
Fundamentos (III) Si consideramos la suma de las sucesivas potencias de 2 cuyos exponentes van desde m hasta m+n-1, tendremos la suma de una progresión geométrica de razón 2 Si llamamos k = m + n, se puede poner
62
Fundamentos (IV) Ejemplo Por tanto, multiplicar un número por 111000, es equivalente a multiplicarlo por Posteriormente se multiplica por Finalmente se restan A·(0111000)=A·(2 5 +2 4 +2 3 )=A·(2 6 -2 3 )
63
Fundamentos (V) En general, un número que tiene varias cadenas de 1’s y 0’s se puede descomponer en varios números con sólo una cadena de 1’s: 0011001110 = 0011000000 + 0000001110 Así pues, multiplicar A por 0011001110 será equivalente a: A · 0011000000 + A · 0000001110 Que equivale a: A · (2 7 + 2 6 ) + A · (2 3 + 2 2 + 2 1 ) O lo que es lo mismo a: A · (2 8 – 2 6 ) + A · (2 4 – 2 1 ) = A · (2 8 – 2 6 + 2 4 – 2 1 )
64
Fundamentos (VI) El método de Sumas y Restas se basa, pues, en multiplicar el multiplicando por -2 elevado a la posición en que aparezca un 1 en el multiplicador, moviéndonos de derecha a izquierda Multiplicar el multiplicando por +2 elevado a la posición en que aparezca un 0, después de una cadena de 1’s Seguir desplazándonos hacia la izquierda y hacer lo mismo cuando encontremos un nuevo 1 De nuevo, se repite con la aparición de un 0 Y así sucesivamente hasta que ya no aparezca ningún 1 Se para cuando empieza la última cadena de ceros, haciendo, por tanto, la última suma: para asegurarse, es suficiente con añadir un 0 a la izquierda del 1 más significativo del multiplicador Finalmente se suman TODOS los términos (de golpe o por partes)
65
Ejemplo A=1100 (12)B=1010 (10) Se completa B con un 0 a la izquierda y se calcula también –A (A en ca2) que necesariamente siempre empezará por 1 A=1100B=01010-A=10100 Se puede rellenar A con todos los CEROS a la izquierda que sean necesarios y –A con todos los UNOS a la izquierda que sean necesarios A=0…01100B=01010-A=1…10100 Cada vez que aparece en el multiplicador B una cadena de unos (aunque sólo tenga un 1) se escribe A multiplicado por 2 elevado a la potencia donde está dicho 1 y cambiado de signo (-A·2 s ) Cada vez que aparece en el multiplicador B una cadena de ceros (aunque sólo tenga un 0) se escribe A multiplicado por 2 elevado a la potencia donde está dicho 0 y sin cambiar el signo (+A·2 t ) El proceso empieza con la primera cadena de unos que aparezca y termina con la última cadena de ceros (último 0), SIEMPRE MOVIÉNDONOS DE DERECHA A IZQUIERDA EN EL MULTIPLICADOR
66
Ejemplo (continuación) 1 1 1 0 1 0 0 0 0 1 1 1 1 0 0 0 12 x 10 = 120 (base 10) 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 7 6 5 4 3 2 1 0 -24 +48 -96 +192 +120 (-2 + 4 - 8+ 16) x12 = 120 Valor Suma -24 +24 -72 A=1100 B=01010 -A=1…10100
67
Otro ejemplo 25 x 23 = 575 A= 0…011001-A = 1…100111 B= 010111 10 9 8 7 6 5 4 3 2 1 0 -A·2 0 1 1 1 1 1 1 0 0 1 1 1 +A·2 3 0 0 0 1 1 0 0 1 0 0 0 + S P 0 0 0 1 0 1 0 1 1 1 1 -A·2 4 1 1 0 0 1 1 1 0 0 0 0 + S P 1 1 1 0 0 0 1 1 1 1 1 +A·2 5 0 1 1 0 0 1 0 0 0 0 0 + S T 0 1 0 0 0 1 1 1 1 1 1 575 = 2 9 + 2 5 + 2 4 + 2 3 + 2 2 + 2 1 + 2 0
68
Necesidades El producto de un número binario de n bits con otro de m bits necesita m+n bits Sea A el multiplicador y B el multiplicando En el caso de que m=n, se necesitan dos registros iguales para almacenar el resultado Sean R3 y R4 los registros donde se va almacenando el resultado
69
Arquitectura C R2 R4R3 R1 CON Contador
70
Algoritmo de Sumas y Restas Se inicializan a 0 el contador de bits del multiplicador y el registro R3 Se carga R1 con el multiplicando A y R2 con el multiplicador B Se analiza R2 0, el LSB de R2, y se llama R2 -1 al bit donde irá a parar R2 0 cuando R2 rote a derechas. R2 -1 se inicializa a 0 Se leen los bits del multiplicador de derecha a izquierda El proceso comienza cuando se lee el PRIMER UNO, haciendo R3 R3-R1 En los sucesivos bucles se aplica el siguiente criterio: Si es el principio de una cadena de unos, se hace la resta R3 R3 – R1 Si es el principio de una cadena de ceros, se hace la suma R3 R3 + R1 Se incrementa el contador Se rota hacia la derecha una posición el conjunto C-R3-R4, con extensión de signo Se realiza una rotación circular a derecha de R2 Se mira si el contador ha llegado hasta el final En caso negativo se repite el proceso, volviendo a preguntar por el LSB de R2 En caso afirmativo se suma R3+R1 dejando el resultado en R3, con lo que se finaliza el proceso y el resultado queda en R3-R4. ESTO ES EQUIVALENTE A EJECUTAR EL ÚLTIMO CERO QUE SIEMPRE SE SUPONE QUE TIENE UN NÚMERO POSITIVO
71
Inicio, Cont 0 R1 A R2 B R3 0 R2 -1 0 R2 0 R2 -1 ? Incrementa contador C-R3-R4 Desplazamiento a la derecha Rotación circular R2 Cont? Fin 01 empieza cadena de ceros R3 R3+R1R3 R3-R1 NOSI empieza cadena de unos 10 1100 R3 R3+R1 ALGORITMO DE SUMAS Y RESTAS
72
Ejemplo Multiplicar A=1100 por B=1010 El resultado debe ser 12x10=120 (en binario 0111 1000) C R4 R3 R1 Contador R2 R2 -1 R2 0
73
Inicialización Se carga A en R1 y B en R2. Se pone a 0 C, el registro R3, el Contador y R2 -1 0 XXXX 0000 1100 0 Contador 12 10 R2 -1 R2 0 0
74
Como el LSB de R2 es el primer 0 no se hace nada (todavía no ha llegado el primer 1) y se deja el resultado en C-R3 como estaba 0 XXXX 0000 1100 0 Contador Comprobación de R2 0 y acción 1 0 R2 -1 R2 0 0
75
Incremento contador Se incrementa el contador en una unidad 0 XXXX 0000 1100 1 Contador 1 0 R2 -1 R2 0 0
76
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 0XXX 0000 1100 1 Contador 1 0 R2 -1 R2 0 0
77
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 0XXX 0000 1100 1 Contador 0 1 R2 -1 R2 0 0
78
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 0XXX 0000 1100 1 Contador 0 12 0 1 R2 -1 R2 0 0
79
Como el LSB de R2 es 1 (EMPIEZA UNA CADENA DE UNOS) se hace R3 - R1 y se deja el resultado en C-R3, quedando 0 – 12 = -12 en complemento a 2 1 0XXX 0100 1100 1 Contador -24 -12 Comprobación de R2 0 y acción 0 1 R2 -1 R2 0 0
80
Incremento contador Se incrementa el contador en una unidad 1 0XXX 0100 1100 2 Contador 0 1 R2 -1 R2 0 0
81
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 1 00XX 1010 1100 2 Contador -6 -24 0 1 R2 -1 R2 0 0
82
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 1 00XX 1010 1100 2 Contador 0 0 1 0 R2 -1 R2 0 1
83
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 1 00XX 1010 1100 2 Contador 12 -6 0 0 1 0 R2 -1 R2 0 1
84
Como el LSB de R2 es 0 (EMPIEZA UNA CADENA DE CEROS) y ya llegó un 1 anteriormente, se suman R3 + R1 y se deja el resultado en C-R3, quedando -6 + 12 = +6 0 00XX 0110 1100 2 Contador +6 Comprobación de R2 0 y acción +24 0 0 1 0 R2 -1 R2 0 1
85
Incremento contador Se incrementa el contador en una unidad 0 00XX 0110 1100 3 Contador 0 0 1 0 R2 -1 R2 0 1
86
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 0 000X 0011 1100 3 Contador +3 +24 0 0 1 0 R2 -1 R2 0 1
87
Rotación circular de R2 El registro R2 rota a la derecha de forma circular 0 000X 0011 1100 3 Contador 1 0 0 1 R2 -1 R2 0 0
88
¿Ha llegado al final? Comprueba que el contador no es 4 y repite el bucle 0 000X 0011 1100 3 Contador 12 +3 1 0 0 1 R2 -1 R2 0 0
89
Como el LSB de R2 es 1 (EMPIEZA UNA CADENA DE UNOS) se hace R3 - R1 y se deja el resultado en C-R3, quedando 3 – 12 = -9 1 000X 0111 1100 3 Contador -9 Comprobación de R2 0 y acción -72 1 0 0 1 R2 -1 R2 0 0
90
Incremento contador Se incrementa el contador en una unidad 1 000X 0111 1100 4 Contador 1 0 0 1 R2 -1 R2 0 0
91
Desplazamiento a derecha Se desplaza el conjunto C-R3-R4 una posición a la derecha 1 1000 1011 1100 4 Contador -5 -72 1 0 0 1 R2 -1 R2 0 0
92
El registro R2 rota a la derecha de forma circular Rotación circular de R2 1 1000 1011 1100 4 Contador -5 12 0 1 0 0 R2 -1 R2 0 1
93
¿Ha llegado al final? Comprueba que el contador es 4 y acaba, sumando previamente R3 + R1 y dejándolo en R3, sumando -5 + 12 = +7 El resultado está en el registro R3 seguido de R4. C no es necesario para el resultado 0 1000 0111 1100 4 Contador +7 +120 0 1 0 0 R2 -1 R2 0 1
94
MULTIPLICADOR BINARIO CON SIGNO: ALGORITMO DE BOOTH
95
Multiplicación de números de distinto signo Una forma de hacerlo es multiplicar los valores absolutos con los algoritmos vistos hasta ahora y asignarle el signo que corresponda, conocido a priori Si los dos números son del mismo signo, el resultado será positivo. En caso contrario será negativo. Cuando el resultado sea negativo, se realizará además el complemento a 2
96
Idea Sirve para números enteros Analiza los bits del multiplicador Toma decisiones en función de que comience una cadena de ceros, de unos o ninguno de los casos Desplaza a la derecha los resultados provisionales
97
Fundamentos (I) Supongamos que vamos a multiplicar un multiplicando A positivo (expresado en binario sin signo con n bits) por un multiplicador B negativo, expresado en complemento a 2 también con n bits El producto A·B es igual que si se multiplicara sin signo A·(2 n -|B|) Ejemplo, con 4 bits, 4x(-3) sería equivalente a 4x13, ya que la representación de -3 en ca2 con 4 bits coincide con la de 13 en binario natural con 4 bits, en ambos casos es 1101 Sea R*=A·(2 n -|B|) lo que sale aplicando el algoritmo de sumas y restas, en nuestro ejemplo 4x13=52 (binario 00110100) Sea R=2 2n - A·|B| lo que debería salir (el resultado buscado). Téngase en cuenta que la potencia 2 2n queda fuera del campo de representación del producto. Las representaciones de R y del resultado - A·|B| coinciden en sus 2n bits menos significativos En nuestro ejemplo, tanto 244 en binario natural como -12 en complemento a 2 se representan como 11110100 con 8 bits
98
Fundamentos (II) La relación entre R* y R es la siguiente R* = A·(2 n -|B|) = 2 2n - 2 2n +A·2 n – A·|B| Como R=2 2n -A·|B| R* = R + A·2 n - 2 2n, donde el valor de 2 2n en los 2n bits menos significativos (donde cabe el producto) es irrelevante Por tanto, R = R* - A·2 n Es decir, el resultado buscado es el resultado que se obtiene con el algoritmos de sumas y restas, al que finalmente se le resta A·2 n. Simplemente se aplica dicho algoritmo, ACABANDO con un 1, lo cual siempre ocurre puesto que el bit de signo de un número negativo en complemento a 2 es siempre 1
99
Mecánica Se inicializan a: Cero: R3, el contador, el bit R2 -1 Al valor del multiplicando: R1 Al valor del multiplicador R2 y R4 Se leen los bits R2 0 y R2 -1 Según sea un valor 10, 01 o el resto (00 o bien 11) se toma la decisión de restar, sumar o no hacer nada, respectivamente Se incrementa el contador Se desplaza todo a la derecha, incluido R2 Se pregunta si ha acabado. En caso contrario se repite el bucle
100
Inicio, Cont 0 R1 A R2 B R3 0 R4 B R2 -1 0 R2 0 R2 -1 ? Incrementa contador C-R3-R4 Desplazamiento a la derecha Rotación circular R2 Cont? Fin 01 empieza cadena de ceros R3 R3+R1R3 R3-R1 NOSI empieza cadena de unos 10 1100 ALGORITMO DE BOOTH
101
Ejemplo A=11001 (+25) Se trabaja con n=5 bits B=10111 (-9) A x B = -225 (1 1100011111) ca2 (1 1100011111) = 0 0011100001 0 0011100001 2) = 1+32+64+128 = 225
102
Inicialización Se carga A=11001 en R1 y B=10111 en R2 y R4 Se ponen a 0 el contador, el bit R2 -1 y R3 R1 0 10111 00000 11001 0 Contador 0 R2 R3R4 R2 -1 R2 0
103
Comprobación multiplicador y decisión Comienza cadenas de unos, R3 R3-R1, es decir, se hace 0 00000 + 1 00111 = 1 00111 R1 1 10111 00111 11001 0 Contador 0 R2 R3R4 R2 -1 R2 0 -25
104
Incremento contador Se incrementa el contador R1 1 10111 00111 11001 1 Contador 0 R2 R3R4 R2 -1 R2 0
105
Desplazamiento a derecha R3 y R4 se desplazan a la derecha, perdiéndose el bit de la derecha de R4 Rota R2 R1 1 01011 1101110011 11001 1 Contador 1 R2 R3R4 R2 -1 R2 0 -13
106
¿Ha llegado al final? Comprueba que el contador no es 5 y repite el bucle R1 1 01011 1101110011 11001 1 Contador 1 R2 R3R4 R2 -1 R2 0
107
No hay cambio de cadena. No se hace nada, salvo comprobar que R2 0 y R2 -1 son iguales. R1 1 01011 1101110011 11001 1 Contador 1 R2 R3R4 R2 -1 R2 0 Comprobación multiplicador y decisión
108
Incremento contador Se incrementa el contador R1 1 01011 1101110011 11001 2 Contador 1 R2 R3R4 R2 -1 R2 0
109
Desplazamiento a derecha R3 y R4 se desplazan a la derecha, perdiéndose el bit de la derecha de R4 Rota R2 R1 1 10101 1110111001 2 Contador 1 R2 R3R4 R2 -1 R2 0 -7
110
¿Ha llegado al final? Comprueba que el contador no es 5 y repite el bucle R1 1 10101 1110111001 2 Contador 1 R2 R3R4 R2 -1 R2 0
111
No hay cambio de cadena. No se hace nada, salvo comprobar que R2 0 y R2 -1 son iguales. R1 1 10101 1110111001 2 Contador 1 R2 R3R4 R2 -1 R2 0 Comprobación multiplicador y decisión
112
Incremento contador Se incrementa el contador R1 1 10101 1110111001 3 Contador 1 R2 R3R4 R2 -1 R2 0
113
Desplazamiento a derecha R3 y R4 se desplazan a la derecha, perdiéndose el bit de la derecha de R4 Rota R2 R1 1 11010 1111011100 11001 3 Contador 1 R2 R3R4 R2 -1 R2 0 -4
114
¿Ha llegado al final? Comprueba que el contador no es 5 y repite el bucle R1 1 11010 1111011100 11001 3 Contador 1 R2 R3R4 R2 -1 R2 0
115
Comienza cadenas de ceros, R3 R3+R1, es decir, se hace 1 11100 + 0 11001 = 0 10101 (-4+25 = +21) R1 0 11010 1111010101 11001 3 Contador 1 R2 R3R4 R2 -1 R2 0 Comprobación multiplicador y decisión +21
116
Incremento contador Se incrementa el contador R1 0 11010 1111010101 11001 4 Contador 1 R2 R3R4 R2 -1 R2 0
117
Desplazamiento a derecha R3, R4 y R2 -1 se desplazan a la derecha, perdiéndose el bit de la derecha de R4 R1 0 11101 1111101010 11001 4 Contador 0 R2 R3R4 R2 -1 R2 0 +10
118
¿Ha llegado al final? Comprueba que el contador no es 5 y repite el bucle R1 0 11101 1111101010 11001 4 Contador 0 R2 R3R4 R2 -1 R2 0
119
Comienza cadenas de unos, R3 R3-R1, es decir, se hace 0 01010 +1 00111 = 1 10001 (+10-25 = -15) R1 1 11101 1111110001 11001 4 Contador 0 R2 R3R4 R2 -1 R2 0 Comprobación multiplicador y decisión -15
120
Incremento contador Se incrementa el contador R1 1 11101 1111110001 11001 5 Contador 0 R2 R3R4 R2 -1 R2 0
121
Desplazamiento a derecha R3, R4 y R2 -1 se desplazan a la derecha, perdiéndose el bit de la derecha de R4 R1 1 01110 1111111000 11001 5 Contador 1 R2 R3R4 R2 -1 R2 0 -8
122
¿Ha llegado al final? Comprueba que el contador es 5 y acaba El resultado aparece en ca2 en los 11 bits, C-R3-R4 R1 1 01110 1111111000 11001 5 Contador 1 R2 R3R4 R2 -1 R2 0
123
DIVISIÓN BINARIA SIN SIGNO: CON RESTAURACIÓN
124
Ejemplo en base 10 -5 29 15 -25 4 5 79
125
Ejemplo en base 2 1001111101 0 -000 100 -101 100 -101 100 -101 100 -101 100 4 5 79 15 1 1 1 111 1 1
126
Otro ejemplo en ambas bases 11101 0 1 1010101 10110 -10101 10000 -00000 100001 -10101 11001 -10101 1000 -00000 1000 470 8 21 22 -4 50 22 2 8 72041 2
127
Arquitectura R2 R1 R3 S/R BS El contenido de R2 no varía 0
128
Algoritmo de División con Restauración Se carga R1 con el dividendo A y R2 con el divisor B. El registro R3 es irrelevante inicialmente y almacenará el cociente Se hace la resta R1 – R2, para ver si “cabe o no cabe” Si el resultado es POSITIVO (sí “cabe”), se introduce un 1 en R3 desde la derecha, desplazando los demás bits de R3 a la izquierda Si el resultado es NEGATIVO (no “cabe”), se hace la suma R1 + R2 (para RESTAURAR el dividendo) y el resultado se deja en R1 y se introduce un 0 en R3 por la derecha, desplazando los demás bits de R3 a la izquierda Se desplaza R1 a la izquierda rellenando los huecos con CEROS. Es como si nos moviéramos a la derecha en el dividendo Se repite el bucle hasta que el bit más significativo de R3 entre completamente en el registro R3 El contenido de R2 NUNCA se altera Finalmente, el cociente queda en R3
129
Inicio, R3 0 R1 A (dividendo) R2 B (divisor) R 1 -R 2 <0 ? R1 desplaza izquierda MSB R3? Fin NO SI R1 R1+R2 R3 1 NO SI R3 0 DIVISIÓN CON RESTAURACIÓN R1 R1-R2
130
Ejemplo Dividir A=1001111 (79 en decimal) entre B=1010000 (80 en decimal) Supongamos que trabajamos con registros de 8 bits, en complemento a 2, 00000000 R1 01001111 R3R2 Inicio 01010000
131
Resta R1- R2 Suma R1+R2 R3 0 R1 NEGATIVO R3R2 01010000 R1 1001111 R3R2 01010000 0000000 R1R3R2 01010000 Desplazamiento Izquierda 00000000 0 100111100
132
Resta R1- R2 R1 01001110 R3R2 01010000 0000000 R1R3R2 01010000 Desplazamiento Izquierda R3 1 00000000 POSITIVO 0 1 1001110
133
Resta R1- R2 00000001 R1 01001100 R3R2 01010000 0000001 R1 1001100 R3R2 01010000 Desplazamiento Izqda. R3 1 POSITIVO 1 0
134
Resta R1- R2 00000011 R1 01001000 R3R2 01010000 0000011 R1 1001000 R3R2 01010000 Desplazamiento Izqda. R3 1 POSITIVO 1 0
135
Resta R1- R2 00000111 R1 01000000 R3R2 01010000 0000111 R1 1000000 R3R2 01010000 Desplazamiento Izqda. R3 1 POSITIVO 1 0
136
Resta R1- R2 00001111 R1 00110000 R3R2 01010000 0001111 R1 0110000 R3R2 01010000 Desplazamiento Izqda. R3 1 POSITIVO 1 0
137
Resta R1- R2 00011111 R1 00010000 R3R2 01010000 0011111 R1 0010000 R3R2 01010000 Desplazamiento Izqda. R3 1 POSITIVO 1 0
138
Resta R1- R2 Suma R1+R2 00111111 R1R3R2 01010000 R1 0100000 R3R2 01010000 0111111 R1 0100000 R3R2 01010000 Desplazamiento Izquierda R3 0 00111111 NEGATIVO 0 0 0
139
Cifras decimales (I) Según el ejemplo visto: 01001111 1010000 es igual a 01111110 ¿Qué significa esto?
140
Cifras decimales (II) Como el numerador es menor que el denominador, el resultado DEBE SER MENOR QUE 1. Por tanto, el valor de la división es: 1001111 1010000 es igual a 0,1111110 En base 10 sería: 2 -1 + 2 -2 + 2 -3 + 2 -4 + 2 -5 + 2 -6 = 0,984375 (exacto: 79/80=0,9875)
141
Cifras decimales (III) 79/5=15,8 79/10=7,9 79/20=3,95 79/40=1,9751001111 / 101000 = 1,111110 BASE 10 (exacto) BASE 2 1001111 / 10100 = 11,11110 1001111 / 1010 = 111,1110 1001111 / 101 = 1111,110 BASE 10 (aprox.) 1,96875 3,9375 7,875 15,75
142
Cifras decimales (IV) Por tanto, para dividir dos números binarios con distintos números de bits, SE AJUSTA el menor al mayor, se divide con el algoritmo y finalmente se aplica lo visto en las transparencias anteriores
143
Ejemplo con obtención del resto (CON RESTAURACIÓN) Dividir A=1101011 (107 en decimal) entre B=101 (5 en decimal), cuyo cociente es 21 y el resto 2 Vamos a trabajar con registros de 8 bits, en complemento a 2. En este ejemplo, los operandos no tienen el mismo número de bits R1 0110 1011 R3R2 Inicio 0101
144
Resta R1- R2 R1 0001 1011 R3R2 0101 R1R3R2 0101 Desplazamiento Izquierda R3 1 POSITIVO 10011 011
145
Resta R1- R2 1 R1R3R2 0101 10 R1 0110 11 R3R2 0101 Desplazamiento Izqda. R3 0 NEGATIVO Suma R1+R2 R1 0011 011 R3R2 0101 1
146
Resta R1- R2 10 R1 0001 11 R3R2 0101 R1 0011 1 R3R2 0101 Desplazamiento Izqda. R3 1 POSITIVO 101
147
Resta R1- R2 1 R1R3R2 0101 1010 R1 0111 R3R2 0101 Desplazamiento Izqda. R3 0 NEGATIVO Suma R1+R2 R1 0011 1 R3R2 101 0101 101
148
Resta R1- R2 1010 R1 0010 R3R2 0101 10101 R3 POSITIVO COCIENTE RESTO Cuando el proceso finaliza, los bits “de más” han desaparecido
149
DIVISIÓN BINARIA SIN SIGNO: SIN RESTAURACIÓN
150
Fundamentos (I) En un determinado momento el dividendo residual DR i está en R1 y B, el divisor, fijo en R2 Se resta R2, obteniéndose DR i -B Si dicho resultado fue negativo se vuelve a sumar R2, obteniéndose DR i -B+B, para RESTAURAR el dividendo Se produce un desplazamiento a la izquierda, almacenando en R1 el valor 2·(DR i -B+B) En el paso siguiente, se vuelve a restar B, quedando 2·(DR i - B+B) – B, que es igual a 2·(DR i -B) + B Dicha cantidad se podría haber obtenido mucho más rápidamente haciendo la resta de B, el desplazamiento SIN SUMAR (sin restaurar) y finalmente la suma de B
151
Fundamentos (II) Siempre hay que mirar el bit de signo (BS) de R1. Inicialmente se inicializa a 0 Cuando BS=0 (R1 positivo) se restan R1 y R2 dejando el resultado en R1, se introduce un 1 en R3 por la derecha y se desplaza R1 a la izquierda Cuando BS=1 (R1 negativo) se suman R1 y R2 dejando el resultado en R1, se introduce un 0 en R3 por la derecha y se desplaza a la izquierda R1 El proceso terminará cuando R3 se “llene” de bits, siendo MSB (R3)=1 NOTA: Las introducciones de bits por la derecha en R3 suponen un desplazamiento hacia la izquierda de dicho registro
152
Inicio, R3 0, BS 0 R1 A (dividendo) R2 B (divisor) BS? R1 desplaza izquierda MSB R3? Fin 0 1 0 1 R3 BS(R1) DIVISIÓN SIN RESTAURACIÓN R3 BS(R1) R1 R1-R2R1 R1+R2 BS
153
COMPARACIÓN CON Y SIN RESTAURACIÓN CON RESTAURACIÓN Siempre se hace la resta Se pregunta por el signo del dividendo residual: Si fue positivo, bien hecha estaba la resta y se introduce un 1 en R3 Si fue negativo, era innecesaria y hay que deshacerla (RESTAURAR) el valor haciendo una suma y se introduce un 0 por R3 SIN RESTAURACIÓN Se pregunta por el signo del dividendo residual: Si fue positivo, se hace la resta y se introduce un 1 en R3 Si fue negativo, se hace la suma y se introduce un 0 por R3 No se hace una operación previa para después deshacerla
154
Ejemplo Dividir A=11101010 (234 en decimal) entre B=10001001 (137 en decimal) Supongamos que trabajamos con registros de 9 bits, en complemento a 2, 000000000 R1 11101010 R3R2 Inicio 0 10001001 - B=1 01110111 (en complemento a 2) BS 0
155
La primera vez BS=0, por tanto, R1 R1-R2 000000000 R1 0 11101010 R3 BS Desplaz. Resta 1 01110111 + 011000010 0 01100001 R2 010001001 000000001 0 SÍ CABE BS
156
Como BS=0, R1 R1-R2 000000001 R1 0 11000010 R3 Desplaz. Resta 1 01110111 + 001110010 0 00111001 R2 010001001 000000011 0 SÍ CABE BS
157
Como BS=0, R1 R1-R2 R1 0 01110010 R3 Desplaz. Resta 1 01110111 + 111010010 1 11101001 R2 010001001 000000011 000000110 0 NO CABE BS
158
Como BS=1, R1 R1+R2 000000110 R1 1 11010010 R3 Desplaz. Suma 0 10001001 + 010110110 0 01011011 R2 010001001 000001101 0 SÍ CABE BS
159
Como BS=0, R1 R1-R2 000001101 R1 0 10110110 R3 Desplaz. Resta 1 01110111 + 001011010 0 00101101 R2 010001001 000011011 0 SÍ CABE BS
160
Como BS=0, R1 R1-R2 000011011 R1 0 01011010 R3 Desplaz. Resta 1 01110111 + 110100010 1 11010001 R2 010001001 000110110 0 NO CABE BS
161
Como BS=1, R1 R1+R2 000110110 R1 1 10100010 R3 Desplaz. Suma 0 10001001 + 001010110 0 00101011 R2 010001001 001101101 0 SÍ CABE BS
162
Como BS=0, R1 R1-R2 001101101 R1 0 01010110 R3 Desplaz. Resta 1 01110111 + 110011010 1 11001101 R2 010001001 011011010 0 NO CABE BS
163
Como BS=1, R1 R1+R2 000000110 R1 1 10011010 R3 Desplaz. Suma 0 10001001 + 001000110 0 00100011 R2 010001001 110110101 0 SÍ CABE BS
164
Cifras decimales (I) Según el ejemplo visto: 11101010 10001001 es igual a 110110101 ¿Qué significa esto? Como el numerador es mayor que el denominador, el resultado será mayor que 1, pero no mayor que 2, ya que tienen el mismo número de bits. Por tanto, el resultado es: 1,10110101
165
Cifras decimales (II) El valor exacto sería 234 / 137 = 1,708029197… mientras que el valor que resulta en binario es 1,70703125
166
Ejemplo con obtención del resto (SIN RESTAURACIÓN) Dividir A=1101011 (107 en decimal) entre B=101 (5 en decimal), cuyo cociente es 21 y el resto 2 Vamos a trabajar con registros de 8 bits, en complemento a 2. En este ejemplo, los operandos no tienen el mismo número de bits Para sumar R1+R2 se suma 0 101 (+5 en complemento a 2) Para restar R1-R2 se suma 1 011 (-5 en complemento a 2) R1 0110 1011 R3R2 Inicio 0101 BS
167
La primera vez BS=0, por tanto, R1 R1-R2 R1 0 110 1011 R3 BS Desplaz. Resta 1 011 + 0011 0111 0 001 1011 R2 0101 BS
168
Como BS=0, R1 R1-R2 1 R1 0 011 011 R3 Desplaz. Resta 1 011 + 1100 11 10 1 110 011 R2 0101 BS
169
Como BS=1, R1 R1+R2 10 R1 1 100 11 R3 Desplaz. Suma 0 101 + 0011 1101 0 001 11 R2 0101 BS
170
Como BS=0, R1 R1-R2 101 R1 0 011 1 R3 Desplaz. Resta 1 011 + 11011010 1 110 1 R2 0101 BS
171
Como BS=1, R1 R1+R2 1010 R1 1 101 R3 Suma 0 101 + 10101 0 010 R2 0101 RESTO COCIENTE Cuando el proceso finaliza, los bits “de más” han desaparecido
172
COMA FLOTANTE (I) Inicialmente cada fabricante tenía su propia representación de números en coma flotante. Muchos problemas a la hora de transportar programas y datos entre computadores El IEEE (Institute of Electrical and Electronics Engineers) definió un estándar en 1985 para la representación de números en coma flotante en binario IEEE 754 En 1987 se extendió el estándar para representar números en coma flotante independientemente de la base de numeración, IEEE 854 Este nuevo estándar no supone cambios a IEEE 754
173
COMA FLOTANTE (II) Todo número se puede representar como M * B exp En IEEE 754 se pueden representar los números en simple precisión (32 bits) y en doble precisión (64 bits) 1bit8bits23bits Signo ExponenteMantisa 1bit10bits53bits Signo ExponenteMantisa Simple Precisión. Exceso 127 Doble Precisión. Exceso 1023 N = (-1) S * 1.M * 2 (exp-exc)
174
Ejemplo (I) Representar el número real +2,71 en el formato IEEE 754, truncando los bits que no quepan en la representación 2,71 10,10110101110000101000011 x 2 0 2,71 1,010110101110000101000011 x 2 1 Mantisa 010110101110000101000011 Exponente +1 Exponente + 127 128 En Hexadecimal se podría expresar como 4 0 2D 7 0 A 3 SignoExponente + 127Mantisa 01 0 0 0 0 0 0 0010110101110000101000011
175
Ejemplo (II) Determinar qué número real representa el hexadecimal C8860800 El valor binario es 1 100 1000 1 000 0110 0000 1000 0000 Mantisa 000011000001000000 Signo Negativo Exponente +127 128+16+1Exponente 18 Valor absoluto 1,000011000001 x 2 18 Valor absoluto 1000011000001 x 2 6 Valor real -4.289 x 64 = -274.496 En Hexadecimal se podría expresar como 4 0 2D 7 0 A 3
176
Suma/Resta en coma flotante Dados dos números A = m 1 * B e1 B = m 2 * B e2 Se ajustan las mantisas y los exponentes hasta que e1=e2=e. Entonces tendremos A = m 1 * B e B = m 2 * B e La suma y la resta entonces se realizan de esta forma A + B = (m 1 + m 2 ) * B e A – B = (m 1 - m 2 ) * B e Se normalizan los resultados a IEEE 754
177
Multiplicación / División en coma flotante Dados dos números A = m 1 * B e1 B = m 2 * B e2 La multiplicación y división se realiza: A * B = (m 1 * m 2 ) * B e1+e2 A / B = (m 1 / m 2 ) * B e1-e2 Se normalizan los resultados a IEEE 754
178
Técnicas de Redondeo El redondeo es la aproximación necesaria para representar en el computador una cantidad que no puede expresarse de forma exacta El estándar IEEE 754 exige que el resultado de una operación sea el que se hubiese obtenido teniendo una precisión infinita y al final se redondee el resultado a la precisión exigida (simple o doble) Tipos de redondeo: Truncación Redondeo propiamente dicho Bit menos significativo forzado a 1
179
Distintos casos Truncación: eliminación de los bits de la derecha (menos significativos) que no caben en la representación. Es muy sencillo de implementar. Puede producir errores apreciables, siempre del mismo signo, lo que propicia la acumulación de errores Redondeo: se representa haciendo una aproximación al más cercano. Similar al redondeo de los céntimos de €. Los errores pueden ser positivos o negativos, pero menores que en el caso de la truncación. Es más difícil de implementar Forzado a 1: se trunca, pero se obliga a que el bit menos significativo sea 1. Es fácil de implementar y produce errores pequeños y de signo variable, evitando su acumulación
180
Ejemplos de redondeo a 10 bits Valor exactoTruncaciónRedondeoForzado a 1 0,1100110111 1110,11001101110,11001110000,1100110111 0,1000100010 1110,10001000100,1000100011 0,1000000000 1000,10000000000,1000000001 0,1111111111 0000,1111111111
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.