Arquitetura de Computadores - Aritmética Computacional

Propaganda
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO
DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIA DA COMPUTAÇÃO
Arquitetura e Organização de
Computadores
Aritmética Computacional
Prof. Sílvio Fernandes
Unidade Lógica e Aritmética (ULA)
• Do inglês ALU
• Faz os cálculos.
• Tudo o mais no computador existe para atender
a essa unidade.
• Trata de inteiros.
• Pode tratar de números de ponto flutuante
(reais).
• Pode ser FPU separada (coprocessador
matemático).
• Pode estar em chip de FPU separado (486DX +).
2
Unidade Lógica e Aritmética (ALU)
3
Representação de Números Inteiros
• No sistema de numeração binária, é possível
representar números inteiros negativos
usando:
– Dígitos 0 e 1
– Sinal de subtração
– Vírgula
• Exemplo:
-1101,01012 = -13,312510
4
Representação de Números Inteiros
• Para armazenar e processar números inteiros
negativos no computador, são usados apenas
os dígitos 0 e 1
• Se uma sequencia de n bits de dígitos binários
na-1 na-2 ... a1 a0 for um inteiro sem sinal A, seu
valor é
n 1
A   2 ai
i
i 0
5
Representação de Números Inteiros
• Como representar números negativos?
– Representação Sinal-Magnitude
– Representação em Complemento de Dois
6
Representação Sinal-Magnitude
• Em uma palavra de n bits
– O bit mais à esquerda representa o sinal do
número inteiro
– Os n-1 bits mais à direita representam a
magnitude do número inteiro
• Exemplo:
+18 = 00010010
-18 = 10010010
7
Representação Sinal-Magnitude
• Há duas representações para o zero
+0 = 00000000
-0 = 10000000
• É mais difícil testar se um valor é igual a zero
do que no caso em que há apenas uma
representação para o zero
• Por isso, essa representação raramente é
usada na implementação da parte inteira de
uma ULA
8
Representação em Complemento de Dois
9
Representação em Complemento de Dois
n2
A  2n 1 an 1   2i ai
i 0
– Para números inteiros positivos, an-1 = 0
– O número 0 é tratado como um número inteiro
positivo
• Usada para representar números na faixa -2n
↔ 2n-1
• Usada quase universalmente para representar
números inteiros dentro do µP
10
Representação em Complemento de Dois
Decimal
S-M
C-2
Decimal
S-M
C-2
+8
+7
+6
+5
+4
+3
+2
+1
+0
0111
0110
0101
0100
0011
0010
0001
0000
0111
0110
0101
0100
0011
0010
0001
0000
-0
-1
-2
-3
-4
-5
-6
-7
-8
1000
1001
1010
1011
1100
1101
1110
1111
-
1111
1110
1101
1100
1011
1010
1001
1000
Representação em Complemento de Dois
• Conversão complemento de 2 → decimal
-128
64
32
16
8
4
2
1
1
0
0
0
0
0
1
1
+2
+1 = -125
-128
• Conversão decimal→ complemento de 2
-120 =
-128
64
32
16
8
4
2
1
1
0
0
0
1
0
0
0
-128
+8
12
Representação em Complemento de Dois
• Às vezes é desejável converter a
representação de um número inteiro com n
bits para sua representação com m bits, onde
m>n
• Na representação sinal-magnitude, isso pode
ser feito facilmente
– Basta mover o bit de sinal para a posição mais à
esquerda e preencher as demais posições novas
com 0
13
Representação em Sinal-Magnitude
• Exemplos:
+18 =
00010010 (s-m, 8 bits)
+18 = 0000000000010010 (s-m, 16 bits)
-18 =
10010010 (s-m, 8 bits)
-18 = 1000000000010010 (s-m, 16 bits)
• Esse procedimento não funciona para
números inteiros negativos representados em
complemento de dois
14
Representação em Complemento de Dois
• Exemplos:
+18 =
00010010 (c-2, 8 bits)
+18 = 0000000000010010 (c-2, 16 bits)
-18 =
11101110 (c-2, 8 bits)
-32.658 = 1000000001101110 (c-2, 16 bits)
• A regra é mover o bit de sinal para a posição
mais à esquerda e preencher as demais com
valor igual ao bit de sinal
15
Representação em Complemento de Dois
• Exemplos:
+18 =
00010010 (c-2, 8 bits)
+18 = 0000000000010010 (c-2, 16 bits)
-18 =
11101110 (c-2, 8 bits)
-18 = 1111111111101110 (c-2, 16 bits)
16
Representação em Complemento de Dois
• Negação
– Para representação s-m, basta inverter o valor do
bit de sinal
– Para a representação em complemento de dois:
• Toma-se o complemento booleano de cada bit do
número
• Adiciona-se 1 ao resultado
17
Representação em Complemento de Dois
• Exemplos:
+18 = 00010010 (c-2)
Complemento booleano = 11101101
+1
11101110 = -18
-18 = 11101110 (c-2)
Complemento booleano = 00010001
+1
00010010 = +18
18
Representação em Complemento de Dois
• Casos especiais de negação
0 = 00000000 (c-2)
Complemento booleano = 11111111
+1
100000000 = 0
Bit “vai um” (carry in)
- é ignorado
19
Representação em Complemento de Dois
• Casos especiais de negação (cont.)
-128 = 10000000 (c-2)
Complemento booleano = 01111111
+1
10000000 = -128 
– Anomalia se deve ao fato que uma palavra de n
bits pode conter 2n representações distintas
• 2n é um número par
• Sendo representados números positivos, negativos e o
0, a qtde de números positivos e negativos são
20
diferentes
Representação em Complemento de Dois
• Adição
1001
+0101
1110
(a) (-7) + (+5) = -2
1100
+0100
10000
(b) (-4) + (+4) = 0
0011
+0100
0111
(c) (+3) + (+4) = +7
1100
+1111
11011
(d) (-4) + (-1) = -5
0101
+0100
1001
(e) (+5) + (+4) = +9 (overflow)
1001
+1010
10011
(f) (-7) + (-6) = -13 (overflow)
21
Representação em Complemento de Dois
• Subtração
0010
+1001
1011
(a) M = 2 = 0010
S = 7 = 0111
-S = -7 = 1001
(+2) + (-7) = -5
1011
+1110
11001
(c) M = -5 = 1011
S = 2 = 0010
-S = -2 = 1110
(-5) + (-2) = -7
0111
+0111
1110
(e) M = 7
S = -7 = 1001
-S = 7 = 0111
(+7) + (+7) = 14 (overflow)
0101
+1110
10011
(b) M = 5 = 0101
S = 2 = 0010
-S = -2 = 1110
(+5) + (-2) = +3
0101
+0010
0111
(d) M = 5 = 0101
S = -2 = 1110
-S = 2 = 0010
(+5) + (+2) = +7
1010
+1100
10110
(f) M = -6 = 1010
S = 4 = 0100
-S = -4 = 1100
(-6) + (-4) = -10 (overflow)
22
Representação em Complemento de Dois
23
Representação em Complemento de
Dois
• Hardware para adição e subtração
24
Representação em Complemento de
Dois
• Multiplicação
– Complexa.
– Calcule produto parcial para cada dígito.
– Cuidado com o valor da casa (coluna).
– Some produtos parciais.
25
Representação em Complemento de
Dois
• Exemplo de Multiplicação
Nota: precisa de resultado com tamanho duplo.
26
Representação em Complemento de
Dois
• Hardware para Multiplicação
27
Representação em Complemento de
Dois
• Multiplicação de 1101 e 1011
28
Representação em Complemento de
Dois
• Fluxograma para Multiplicação
29
Representação em Complemento de
Dois
• Multiplicando número negativos
– Isso não funciona!
– Solução 1:
• Converta para positivo, se for preciso.
• Multiplique como antes.
• Se sinais diferentes, negue a resposta.
– Solução 2:
• Algoritmo de Booth.
30
Representação em Complemento de
Dois
• Fluxograma do algoritmo de Booth
31
Representação em Complemento de
Dois
• Exemplo do algoritmo de Booth (7 x 3)
Nota: É usado deslocamento aritmético para preservar o sinal
32
Representação em Complemento de
Dois
• Exemplo do algoritmo de Booth para
negativos
33
Representação em Complemento de
Dois
• Divisão
– Mais complexa que a multiplicação.
– Números negativos são realmente maus!
– Baseada na divisão longa.
34
Representação em Complemento de
Dois
• Divisão de inteiros sem sinal
Divisor
1011
00001101
Quociente
10010011
Dividendo
1011
Restos
Parciais
001110
1011
001111
1011
100
Resto
35
Representação em Complemento de
Dois
• Divisão de inteiros sem sinal
36
Representação de Ponto Flutuante
• Usada para representar números muito
grandes ou muito pequenos
– Para números decimais, usa-se a notação
científica
• 976.000.000.000.000 = 9,76 x 1014
• 0,0000000000000976 = 9,76 x 10-14
• Para números binários, temos:
 M B
Sinal
Mantissa
E
Expoente
37
Representação de Ponto Flutuante
• Um mesmo número pode ser
representações em ponto flutuante
várias
24 = 0,110 x 25 = 110 x 22 = 0,0110 x 26
• Para simplificar as operações, é requerido que
os números sejam normalizados
 1,1 b0b1b2 ...bn  2
E
Dígitos binários
implícito
38
Representação de Ponto Flutuante
Sinal da
mantissa
8 bits
23 bits
Expoente
polarizado
Significando
32 bits
• o sinal é armazenado no primeiro bit da palavra
• o primeiro bit da significando verdadeira é sempre 1
- por isso não precisa ser armazenado
• o valor 127 é adicionado ao expoente verdadeiro,
sendo o resultado denominado Expoente Polarizado
Exemplos:
• 856.064 = 0,11010001 x 210100 = 0
• -856.064 = -0,11010001 x 210100 = 1
• 209 x 2-28 = 0,11010001 x 2-10100 = 0
• -209 x 2-28 = -0,11010001 x 2-10100 = 1
10010011
10010011
01101011
01101011
10100010000000000000000
10100010000000000000000
10100010000000000000000
10100010000000000000000
39
Representação de Ponto Flutuante
• Intervalos de representação para 32 bits:
– Números negativos:
• [-(1-2-24) x 2128 , -0,5 x 2-127]
-(1-2-24) x 2128 = 1 11111111 11111111111111111111111
-0,5 x 2-127 = 1 00000000 00000000000000000000000
– Números positivos:
• [0,5 x 2-127 , (1-2-24) x 2128]
0,5 x 2-127 = 0 00000000 00000000000000000000000
(1-2-24) x 2128 = 0 11111111 11111111111111111111111
40
Representação de Ponto Flutuante
Overflow em
Números Negativos
Overflow em
Números Positivos
Números inteiros
representáveis
-231
0
Underflow em
Números Negativos
231-1
Underflow em
Números Positivos
Overflow em
Números Negativos
Overflow em
Números Positivos
Números negativos
representáveis
-(1-2-24) x 2128
-0,5 x 2-127
Números positivos
representáveis
0 -0,5 x 2-127
-(1-2-24) x 2128
41
Representação de Ponto Flutuante
• O underflow é menos crítico que o overflow,
pois o valor pode ser aproximado para 0
• Não há, à princípio, representação para 0
– Na verdade, há um padrão de bits especial para
representação do 0
• O número máximo de valores distintos
representáveis continua sendo 232
– A representação em ponto flutuante apenas
divide esses valores em duas faixas
42
Representação de Ponto Flutuante
• Há uma relação estreita entre os tamanhos
dos campos reservados ao significando e ao
expoente
• Para um tamanho fixo de palavra:
– Se o número de bits reservados ao significando
aumentar, aumenta-se a precisão, mas diminui-se
a faixa de valores representáveis
– Se o número de bits reservados ao expoente
aumentar, aumenta-se a faixa de valores
representáveis, mas diminui-se a precisão
43
Representação de Ponto Flutuante
• Padrão IEEE 754
8 bits
Formato
Simples
Expoente
polarizado
Sinal do
significando
Significando
32 bits
Sinal do
significando
Formato
Duplo
23 bits
11 bits
52 bits
Expoente
polarizado
Significando
64 bits
44
Representação de Ponto Flutuante
• Valores especiais definidos no IEEE 754
Expoente Polarizado
Sinal
Formato
Simples
Formato
Duplo
Mantissa
Valor
0
0
0
0
0
1
0
0
0
-0
0
255
2047
0
∞
1
255
2047
0
-∞
0 ou 1
255
2047
≠0
NaN
45
Representação de Ponto Flutuante
• Parâmetros do formato IEEE 754
Parâmetro
Formato Simples
Formato Duplo
Tamanho da palavra
32
64
Tamanho do expoente
8
11
Polarização do expoente
127
1023
Expoente máximo
127
1023
Expoente mínimo
-126
-1022
Tamanho da mantissa
23
52
Número de expoentes
254
2046
Número de mantissas
223
252
Número de valores
1,98 x 231
1,99 x 263
46
Referências
• STALLINGS, W. Arquitetura e organização de
computadores: projeto para o desempenho. 8.
ed. Prentice Hall, 2009.
• DELGADO, J.; RIBEIRO, C. Arquitetura de
Computadores. 2 ed. LTC, 2009.
• PATTERSON, D. A. ; HENNESSY, J.L. Organização
e projeto de computadores – a interface
hardware software. 3. ed. Editora Campus,
2005.
47
Download