Professional Documents
Culture Documents
Tema 15
Tema 15
contenidos
1. Introducción
Concepto de aritmética. La aritmética en el computador.
2. Aritmética entera sin signo
Representación en binario puro. Suma con propagación de acarreo. Suma con anticipación de
acarreo. Resta. Comparación. Multiplicación secuencial por sumas y desplazamientos.
Multiplicación combinacional. División secuencial con restauración. División secuencial sin
restauración. División combinacional.
3. Aritmética entera con signo
Representaciones: C2, MS, C1 y sesgada. Extensión de signo. Negación. Suma. Resta.
Multiplicación.
4. Aritmética real en punto fijo
Representación.
5. Aritmética real en punto flotante
Representación. Estándar IEEE 754. Suma. Resta. Multiplicación. División.
1. introducción
Concepto
1.introducción
Tipos de sistemas numéricos más comunes:
Naturales: cubierta por la aritmética entera sin signo
Enteros: cubierta por la aritmética entera con signo
Reales: cubierta por la aritmética en punto fijo y por la aritmética en punto flotante
La aritmética en el computador
El conjunto de elementos representables con n bits es finito y los sistemas numéricos son
finitos,
ALUpor lo que aparecen:
La (unidad aritmético-lógica) es el módulo hardware ubicado en la CPU
Problemas de saturación
encargado de realizar (overflow):
las operaciones un número no es representable
aritméticas
Problemas de precisión: un número es representado por otro número cercano
Toma sus operandos de los registros de la CPU
Los resultados que genera se almacenan también en registros de la CPU
estructura y tecnología de computadores
Activa indicadores (flags) como consecuencia de las excepciones que detecte en la ejecución
de las operaciones aritméticas. Dichos indicadores son visibles al programador y suelen
almacenarse en el registro de estado.
El controlador de la CPU genera señales que gobiernan el funcionamiento de la ALU
Adicionalmente pueden existir coprocesadores aritméticos: circuitos esclavos
externos a la CPU especializados en realizar operaciones aritméticas complejas
Un algoritmo aritmético puede implementarse mediante:
un circuito combinacional
un circuito secuencial que genere sus propias fases, es decir con un controlador propio
un circuito secuencial que no genere sus fases, es decir controlado por una unidad de
control externa (p.e. la de la CPU)
mediante la ejecución de un programa
i 0
a secuencia se divide el número sucesivamente por 2. Cada uno de los restos determinan los dígitos (comenzando por el menos significativo) que forman la secuencia.
0 0 1 1 0
acarre
Obtener por anticipado los acarreos y
0 1 1 0 1 determinar por anticipado si van a propagarse usando únicamente los sumandos:
o de
1 0 1 0 1 se genera un acarreo salida (independientemente del carry de entrada) cuando xi = yi = 1
1 1 1 1 1 el acarreo de entrada se
propaga cuando xi = 1 ó yi = 1
si (xi yi ) ci
ci 1 x i y i xi ci c i
bit de
y i la suma
x y (x y )
c
i i i i i
x3 y3 x2 y2 x1 y1 x0 y0
s3 s2 s1 s0
estructura y tecnología de computadores
c i de acarreo
s3 s2 s1 s0 G3 P3 G2 P3 P2 G1 P3 P2 P1 G0 P3 P2 P1 P0 c0
u.a.a. 0
0
s15 s14 s13 s1 s11 s10 s9 s8 s7 s5 s4 s3 s2 s1 s0
2
s6
Otra posible alternativa es diseñar sumadores con enfoques mixtos. Por ejemplo para 32 bits utilizar 4 sumadores con propagación de arrastre de 4 bits que gener
10
12
Algoritmo de
Ruta de
tras m M P
Segunda propuesta secuencial
S0 1101 00001011 00000000 en cualquier estado la mitad de los bits del
S1 1101 00001011 00001011 multiplicando son 0
S2 0110 00010110 00001011 los bits menos significativos del producto no cambian
una vez formados (el multiplicando se desplaza a izquierda insertando ceros por la derecha)
S1 0110 00010110 00001011 desplazar el producto a la derecha en lugar de hacerlo a la izquierda con el multiplicando
S2 0011 00101100 00001011 para poder usar un sumador de n bits, sumar el multiplicando a los n bits más significativos del producto ¡cuida
S1 0011 00101100 00110111
S2 0001 01011000 00110111
S1 0001 01011000 10001111
S2 0000 10110000 10001111
14
desplazar m a la derecha
n si S1-S2 no se han repetido n veces, ir a S1
n
cP high Plow
tras m M c P
S0 1101 1011 0 00000000 Tercera propuesta secuencial
S1 1101 1011 0 10110000 en cualquier estado el número bits desperdiciados en el producto coincide con el número de bits con informació
S2 0110 1011 0 01011000 producto y multiplicador se desplazan a la derecha
usar el registro producto para acumular en su parte alta los productos parciales y para almacenar en su parte ba
S1 0110 1011 0 01011000
S2 0011 1011 0 00101100
S1 0011 1011 0 11011100
S2 0001 1011 0 01101110
S1
S2 0000
0001 1011
1011 1 1 10001111
00011110
Algoritmo de
si Plsb = 0 entonces Phigh Phigh+0 S2 : desplazar P a la derecha insertando c
Ruta de
c Phigh Plow
tras M c P
S0 1011 0 00001101
S1 1011 0 10111101
S2 1011 0 01011110
S1 1011 0 01011110
S2 1011 0 00101111
S1 1011 0 11011111
S2 1011 0 01101111
S1 1011 1 00011111
S2 1011 1 10001111
estructura y tecnología de computadores
16
m0
0
m1
multiplica
m2
0
m3
0
P7 P6 P5 P4 P3 P2 P1 P0
producto
bit del
multiplicador
Segunda propuesta combinacional
Adaptar cada una de las celdas según el lugar que ocupan dentro del multiplicador
acarreo acarreo
de salida de entrada
0 Mi Mi
bit del nuevo
producto parcial
m0 m0
=
0 0
18
m0
m1
0
m2
0
m3
0
P7 P6 P5 P4 P3 P2 P1 P0
0
1 0 1
111
000 0
0
1 0 1 1
0 1 0 1 1 1 0
0 1 0 1
0
10 1 1
0 1 11 1 1 0
11 0 1
0
1 0 0 0 1 1 1 1
20
- 1011 14311 = 13
001111
s
- 1011
100 resto
Método tradicional de división :
Obtener los restos parciales y los bits del cociente recorriendo de izquierda a derecha los bits del
dividendo:
si el resto parcial es mayor que el divisor, añadir un 1 al cociente; el nuevo resto parcial será la resta
del resto parcial y del divisor
si el resto parcial es menor que el divisor, añadir un 0 al cociente y ampliar el resto parcial con un
bit más del dividendo
Este algoritmo no funciona cuando el divisor es 0: la ALU posee un indicador para avisarlo
En cualquier caso se cumple que: dividendo = divisorcociente resto
Para un dividendo de n bits y un divisor de m bits, el cociente o el resto pueden llegar a ocupar n
bits (dependerá del valor de los argumentos).
Como se suelen utilizar n-m bits para el cociente (para que divisor×cociente ocupe n bits y la división y
multiplicación sean coherentes), la ALU posee un indicador de overflow que se activará cuando el valor de
los m bits más significativos del dividendo sea mayor que el divisor
2n+1
2n+1
C Dmsb
22
S3 : siborrar
Dmsb C= 0 entonces S2 001110110 1011 0000
desplazar C a la izquierda
S1 : desplazar insertando un 1
D a la izquierda S2
S3 000111100
001110110 1011
1011 0001
0001
si
S2Dmsb
: D=high
1 entonces
Dhigh(0,d) S3
S1 000111100
01110 1100 1011
1011 0011
0001
S0 : cargar (0,dividendo) en D
cargar divisor en d tras D d
S1 : desplazar D a la izquierda
Algoritmo de
S3 001111110 1011
S1 011111100 1011
n+1n+1
Dmsb Dlsb S2 001001100 1011
Dhigh
S3 001001101 1011
Dlow
24
S5 000111110 1011
Algoritmo de
divisor0 d3 d2 d1 d0
1
C3
C2
cocie
C1
C0
26
a b ci co
resultado de la
0 X X - comparación
1 0 0 0
1 0 1 1
acarreo
1 1 0 1 acarreo
1 1 1 1
de salida
de entrada
0 0
=
D4
d3 d2 d1 d0
1
C3
C2
C1
C0
28
1 0 1 1
1 1 1
1
1
1
0 0 0 0 0
1 1 0 1 1 1 1
1111
1
1 1 0 0
0 1 0 0 1 1 1 1
1111
0
0 11 1
1 1 10 0 1 0 1
0 0
0 0
1
1 0 0 1 1
1 0 0
Extensión de signo:
Cuando se desea aumentar la longitud de la representación de un número en C2 a otra mayor, es necesario trasladar el bit de signo a la posición más a la izqu
22 (6 bits) = 010110, 22 (8 bits) = 00010110
-22 (6 bits) = 101010, -22 (8 bits) = 11101010
Negación:
Para cambiar el signo de un número representado en C2 se utiliza la operación de complemento a dos
22 = 010110, -22 = no( 010110 ) + 1 = 101001 + 1 = 101010
30
er dicha secuencia, se obtiene la representación binaria de la magnitud. A continuación si el número es negativo se complementan los dígitos de la secuencia obtenida.
Sesgada (biased): n 1 n 2
Para obtener dicha secuencia, se suma 2n-1 al número y el resultado se representa en binario.
C
V + 1 C
V +
n Restador binario/C2
n
Sumador/restador binario/C2
estructura y tecnología de computadores
32
(-5)(-3) = (+15) n 2
+ 11011 + 00101 i 0
V (M ) V (m) n1
m 2n1
10111111 00001111 n1 2n 1
V (M ) V (m) V (M ) m
-65 +15 El resultado buscado es V(M)·V(m), luego cuando mn-1= 1 es necesario corregir el resultado parcial
multiplicando a la mitad mas significativa de P:
34
Se asume implícitamente que existe un punto entre dos dígitos binarios en una posición que es fija para cualquier secuencia de bits.
Toda secuencia de n bits ( xn, ..., x0 ) con un punto implícito permite distinguir dos partes en ella: ( xk-1, ..., x0 . x-1, ..., x-m )
parte entera: el conjunto de bits anteriores al punto
parte fraccionaria: el conjunto de bits posteriores al punto
n1
k 1 m 2i x i
Habitualmente no se diseña una aritmética específica para punto fijo, ya que con una pequeña adaptación se puede utilizar la aritmética
La aritmética entera es un subconjunto del punto fijo ya que el punto se considera ubicado tras el bit menos significativo
La aritmética fraccionaria es otro subconjunto del punto fijo que lo considera ubicado delante del bit más significativo
Es el programador o el diseñador del HW el encargado de alinear y corregir los resultados (por ejemplo: la suma no es necesario corregirla y la multiplicación
36
s e m
El rango de valores representable por cada uno de los campos es:
Exponente (8 bits con sesgo de 128) : -128 ... +127
Mantisa (23 bits normalizados) : los valores binarios representables oscilan entre 1.00... y 1.11...,
es decir entre 1 y 2-2-23 ( 1.11... = 10.00... - 0.0...1 )
undeflow undeflow negativo
positivo
overflow números negativos números positivos overflow
negativo expresables expresables positivo
-n 0 n 2·n 4·n
2 formatos con signo explícito, representación sesgada del exponente (sesgo igual 127), mantisa normalizada con un 1 implícito (1.M) y base 2.
precisión simple (32 bits): 1 bit de signo, 8 de exponente, 23 de mantisa
-1.0·2-126 ... (2-2-23)·2127 = 1.2·10-38 .. 3.4·1038
precisión doble (64 bits): 1 bit de signo, 11 de exponente, 52 de mantisa
-1.0·2-1022 ... (2-2-52)·21023 = 1.2·10-308 .. 3.4·10308
2 formatos ampliados para cálculos intermedios (43 y 79 bits).
Codificaciones con significado especial
Infinito (e=255, m=0): representan cualquier valor de la región de overflow
NaN (Not-a-Number) (e=255, m>0): se obtienen como resultado de operaciones inválidas
Número denormalizado (e=0, m>0): es un número sin normalizar cuyo bit implícito se supone que es 0. Al ser el exponente 0, permiten representar números
Cero (e=0, m=0): número no normalizado que representa al cero (en lugar de al 1)
4 modos de redondeo:
Redondeo al más cercano
Redondeo a más infinito (por exceso)
Redondeo a menos infinito (por defecto)
Redondeo a cero (truncamiento)
Excepciones:
Operación inválida: , 0, 00, , x mod 0, x cuando x<0, x=
Inexacto: el resultado redondeado no coincide con el real
Overflow y underflow
División por cero
38
-0.1403·10-3
0.3021·106 -0.4238463·102
(-0.14030.3021)·10-3+6 + -0.0000500·102
-0.04238463·102 -0.4238·102
operación redondeo