Escolar Documentos
Profissional Documentos
Cultura Documentos
Computacional
The complexity is in eye of the observer...
As much as the object allows.
Aritmética Computacional 2
Conteúdo
1. Números com sinal e números sem sinal
2. Adição e subtração
3. Operações lógicas
4. Construção de uma unidade aritmética lógica
5. Multiplicação
6. Divisão
7. Operações em ponto flutuante
8. Lendas e falhas
9. Considerações Finais
Aritmética Computacional 3
Números com
1 sinal e números
sem sinal
00001011
Aritmética Computacional 5
Faixa de números sem sinal para 8
bits: 0 a 256-1
0000 0000(2) = 0(10)
0000 0001(2) = 1(10)
0000 0010(2) = 2(10)
...
1111 1100(2) = 252(10)
1111 1101(2) = 253(10)
1111 1110(2) = 254(10)
1111 1111(2) = 255(10)
Aritmética Computacional 6
Representação de números
Números reais: infinitos.
No computador: finitos.
Maioria: grande quantidade de zeros à esquerda.
Computador: pode lidar com números até um certo tamanho.
Overflow: tratado pelo sistema operacional.
No computador: é preciso representar números com sinal.
Solução: usar 1 bit (sinal magnitude).
Primeira tentativa: o bit mais significativos (MSB) é usado para
sinal.
Problema: duas representações para o zero
Solução mais usada: complemento a 2
Aritmética Computacional 7
Complemento a 2
A regra baseia-se no fato de que a soma de
um número com sua representação invertida
deve ser -1:
x x 1
x x 1 0
x 1 x
Aritmética Computacional 8
Faixa de valores em complemento a 2 para
3 bits
000
111 0 001
-1 1
110 -2 2 010
-3 3
101 -4 011
100
Aritmética Computacional 9
Complemento a 2: regra prática
X = 1111 0111
+ 1
-X = 1111 1000
Aritmética Computacional 10
Interface Hardware/Software
Endereços: sempre positivos
Os números vão de 0 a 27FF (Z80), e não
são nunca negativos.
Em C: “int” e “unsigned int”.
Aritmética Computacional 11
Exercícios
1. Converta -15(10) para binário com
representação em sinal/magnitude (16 bits).
2. Converta -15(10) para binário com
representação em complemento a 2 (16 bits).
3. Qual é o número, em decimal, representado
em complemento a 2 por 1010 0011(2)?
4. Usando complemento a 2 qual é a faixa de
números que podem ser representados com 8
bits?
Aritmética Computacional 12
Adição e
2 Subtração
Aritmética Computacional 14
Adição e Subtração (8 bits)
6(10) = 0000 0110(2)
7(10) = 0000 0111(2)
Subtração com
adição subtração complemento a 2
Aritmética Computacional 15
Overflow
Ocorre sempre que o resultado de uma operação não
pode ser representado no hardware disponível.
positivo
+ 0100 0110
0110 0000 positivo
1010 0110 negativo
overflow
Aritmética Computacional 17
Exemplo de overflow
Adição de 2 operandos negativos (8 bits)
negativo
+ 1000 0000
1010 0000 negativo
carry 1 0010 0000 positivo
overflow
Aritmética Computacional 18
Exemplo de overflow
Adição de operandos com sinais opostos (8 bits)
positivo
+ 0100 0000
1010 0000 negativo
1110 0000 negativo
Aritmética Computacional 19
Exemplo de overflow
Adição de operandos com sinais opostos (8 bits)
positivo
+ 0110 0000
1100 0000 negativo
carry 1 0010 0000 positivo
Aritmética Computacional 20
Interface Hardware/Software
Na ocorrência de overflow: a máquina precisa decidir
como tratá-lo.
Linguagem C: não toma conhecimento do overflows. A tarefa é
do programador.
FORTRAN: trata o overflow
Aritmética Computacional 21
Exercícios
Faça as operações aritméticas abaixo
utilizando números binários de 8 bits e
complemento a 2:
1. +9 + 4
2. +9 - 4
3. -9 + 4
4. -9 - 4
Aritmética Computacional 22
Operações
3 Lógicas
Aritmética Computacional 24
Operações AND e OR
Operação AND: atua bit a bit, deixando 1 como
resultado somente no caso de ambos os bits
correspondentes dos operandos serem 1
(aplicação de máscara)
Operação OR: também atua bit a bit colocando
1 no resultado se qualquer um dos bits
correspondentes do operando for 1.
Aritmética Computacional 25
Construção de
4 uma Unidade
Aritmética Lógica
Aritmética Computacional 27
Blocos Construtivos Básicos
a c Entrada Saída
NOT (Inversora)
ca
a c
0 1
1 0
Entradas Saída
a c a b c
AND 0 0 0
c a.b
b 0 1 0
1 0 0
1 1 1
Entrada Saída
OR a c
c a b
a b c
b 0 0 0
0 1 1
1 0 1
1 1 1
d
Multiplexador
Se d==0, c=a senão c=b Entrada Saída
a 0 d c
c 0 a
1 b
b 1
Aritmética Computacional 28
Uma UAL de 1 Bit
Unidade lógica de 1 bit:
a
+ Soma
b
CarryOut
Aritmética Computacional 31
UAL Simples de 1 bit
Aritmética Computacional 32
Exercícios
1. Alterar a UAL anterior para que ela gere
o valor 0. Dica: a maneira mais fácil é
expandir o multiplexador controlado pela
linha Operação.
2. Como projetar uma UAL de 32 bits
utilizando uma UAL de 1 bit?
Aritmética Computacional 33
UAL de
32 bits
Aritmética Computacional 34
Subtração
A subtração é obtida somando-se o minuendo ao
complemento a 2 do subtraendo, ou seja,
a b a (b 1)
BInvertido CarryIn
OP1 OP0
O circuito ao lado A0 0
inverte o valor de b.
Falta ainda somar 1 1
Resultado 0
ao valor de b
B0 0
invertido. 1 + 2
Como fazê-lo?
CarryOut
Aritmética Computacional 35
Subtração
Na soma o primeiro CarryIn (vem 1) é 0.
O que acontece de fizermos o primeiro
CarryIn = 1?
Aritmética Computacional 36
Overflow
Como fazer a detecção de overflow?
Leia o tópico “Adaptação da UAL de 32 bits
para o MIPS” e faça o exercício 4.23 do livro
texto.
Aritmética Computacional 37
Símbolo Geral da UAL
Aritmética Computacional 38
Problema
Qual é o problema de uma UAL
projetada como a anterior?
Aritmética Computacional 39
Carry Lookahead
Com que velocidade podemos somar dois
operandos de 32 bits?
Observe que as entradas a e b podem ser
perfeitamente determinadas a qualquer tempo, mas a
entrada CarryIn de um determinado somador de 1 bit
depende do resultado da operação realizada no
somador de 1 bit vizinho.
Solução:
CarryIn1=B0CarryIn0+a0CarryIn0+a0b0 ou
C1=b0c0+a0.c0+a0b0
C2=b1c1+a1c1+a0b0
Aritmética Computacional 40
Carry Lookahead
Problema deste método: circuito ainda
complexo para cálculos de muitos bits e
portanto caro.
Qual a solução?
Método de propagador e gerador. Veja livro
texto.
Aritmética Computacional 41
5 Multiplicação
Aritmética Computacional 43
Algoritmo
Como na prática
Simplesmente coloque um cópia do
multiplicando (1 x multiplicando) no lugar
apropriado, se o digito do multiplicando for igual
a 1, ou
Coloque 0 (0 x multiplicando) no lugar
apropriado, se o digito do multiplicando for igual
a 0;
Veremos a seguir 3 versões do algoritmo de
multiplicação para 32 bits (32 x 32 bits)
Aritmética Computacional 44
Algoritmo: 1ª Versão
início
Multiplicador0=1 Multiplicador0=0
1. teste do
Multiplicador0
não
32 repetições?
sim
Fim
Aritmética Computacional 45
Hardware: 1ª Versão
Aritmética Computacional 46
Exercício
Usando números de 4 bits, com o intuito
de economizar espaço, multiplique 210 por
310 ou 00102 por 00112.
Valores iniciais:
Multiplicando = 0000 0010
Multiplicador = 0011
Produto = 0000 0000
Aritmética Computacional 47
Desvantagens
UAL de 64 bits.
2 registradores de 64 bits
Próxima versão:
Metade dos bits do multiplicando da primeira versão
são sempre zero, de modo que somente metade
deles poderia conter informações úteis. A segunda
versão utiliza-se desta informação para melhorar a
performance da multiplicação.
Aritmética Computacional 48
Algoritmo: 2ª Versão
início
Multiplicador0=1 Multiplicador0=0
1. teste do
Multiplicador0
sim não
Fim 32 repetições?
Aritmética Computacional 49
Hardware: 2ª Versão
Aritmética Computacional 50
Exercício
Multiplique 00102 por 00112 usando a
segunda versão do algoritmo de
multiplicação.
Valores iniciais:
Multiplicando = 0010
Multiplicador = 0011
Produto = 0000 0000
Aritmética Computacional 51
Versão Final do Algoritmo de
Multiplicação
O registrador reservado ao produto
desperdiça tanto espaço quanto o do
multiplicador: à medida que o desperdício
de espaço do produto se reduzia, a
mesma coisa acontecia com o
multiplicador.
Aritmética Computacional 52
Algoritmo: 3ª Versão
início
Produto0=1 Produto0=0
1. teste do
Produto0
32 repetições?
não
sim
Fim
Aritmética Computacional 53
Hardware: 3ª Versão
Vantagens:
ULA de 32 bits.
Apenas 1 registrador de 64 bits.
Aritmética Computacional 54
Exercício
Multiplique 00102 por 00112 usando a
terceira versão do algoritmo de
multiplicação.
Valores iniciais:
Multiplicando= 0010
Produto = 0000 0011
Aritmética Computacional 55
6 Divisão
Divide et impera.
Versão latina da velha máxima política “Divida
e governe”, citada por Maquiavel em 1532
Aritmética Computacional 57
Divisão início
não
33 repetições?
sim
Fim
Aritmética Computacional 58
Hardware da Divisão
Divisor
Deslocamento à direita (64 bits)
Quociente Deslocamento
UAL de 64 bits À esquerda (32 bits)
Resto Teste de
Escrita controle
64 bits
Aritmética Computacional 59
Exercício
Dividir 0000 01112 por 00102.
Valores iniciais:
Quociente = 0000
Divisor = 0010 0000
Resto = 0000 0111
Aritmética Computacional 60
Operações em
7 Ponto Flutuante
Aritmética Computacional 62
Representação em Ponto Flutuante
N (1) S F 2 E
32 bits
s expoente mantissa
1 8 23
S – sinal do número
F – mantissa, normalizada
E – expoente
Tamanho: -2,0 1038 a 2,0 1038.
Aritmética Computacional 63
Overflow em Ponto Flutuante
Ocorre quando o expoente é muito grande pra ser
representado pelos 8 bits.
Underflow: O módulo do expoente negativo é muito
grande.
Necessário números maiores: precisão dupla. Na
linguagem C: double.
64 bits
s expoente mantissa
1 11 52
Representa números entre -2,0 10-308 a 2,0 10308.
Aritmética Computacional 64
Padrão IEEE 754
Torna implícito o “1” à esquerda do ponto
binário.
Quando o expoente for zero, o hardware
não considera o primeiro bit “1” implícito,
para permitir a representação do número
“0” em ponto flutuante.
N (1) S (1 Mantissa ) 2 E
Aritmética Computacional 65
Padrão IEEE 754
Deve permitir comparações rápidas.
Seria melhor: o menor coeficiente possível valer
00000000, e o maior 11111111.
Modificação:
Subtrair 127 (peso) do exponente.
Representação de –1: -1+127=-1+01111111=01111110.
+1=+1+127=100000002.
Formato:
( E Peso)
N (1) (1 Mantissa ) 2
S
Aritmética Computacional 66
Exemplo 1
1. Representar o número -0,7510 em ponto
flutuante e precisão simples.
2. Representar o número -0,7510 em ponto
flutuante e dupla precisão.
Aritmética Computacional 67
Resposta da 1
1a fase: converter para binário:
0,75 x 2 = 1,5 1
0,5 x 2 = 1,0 1
-0,7510 = -0,112 = -0,11 x 20 = -1,1 x 2-1
( E Peso)
Em precisão simples: N (1) (1 Mantissa ) 2
S
Resultado:
Representação:
Aritmética Computacional 68
Exemplo
Converter a palavra abaixo em ponto
flutuante para número
Aritmética Computacional 69
Resposta
Aritmética Computacional 70
Lendas e
8 Falhas
Aritmética Computacional 72
Bibliografia
Patterson, David A. e Hennessy, John L. Organização e
Projeto de Computadores: A Interface
Hardware/Software. Ed. LTC, 732. Ed., 2000, Rio de
Janeiro.
Aritmética Computacional 73
BInvertido CarryIn
OP1 OP0
A0 0
Resultado 0
1
B0 0
2
1 +
CarryOut
Aritmética Computacional 74