Você está na página 1de 74

Aritmética

Computacional
The complexity is in eye of the observer...
As much as the object allows.

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Introdução
 Humanos: sistema decimal.
 Computadores: sistema binário.
 Como representar números negativos e
números reais?
 Qual é o maior número representável numa
palavra de computador?
 O que acontece quando o resultado é maior do
que a capacidade do computador?

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

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Números com Sinal e Números
sem Sinal
 Base 10:
 2543(10)=2×103+5×102+4×101+3×100(10)
 Base 2:
 1011(2)=1×23+0×22+1×21+1×20=11(10)
 Representação no Z80 (8 bits)
00001011

Bit Mais Significativo (MSB) Bit Menos Significativo (LSB)

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

 Considere X = 0000 1000, o


complemento a 2 de X será:

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
 Converta -15(10) para binário com
representação em sinal/magnitude (16 bits).
 Converta -15(10) para binário com
representação em complemento a 2 (16 bits).
 Qual é o número, em decimal, representado
em complemento a 2 por 1010 0011(2)?
 Usando complemento a 2 qual é a faixa de
números que podem ser representados com 8
bits?

Aritmética Computacional 12
2 Adição e
Subtração

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Adição e Subtração
 No computador: soma semelhante à soma no
sistema decimal.
 Soma: soma cada bit, mais o vai-um.

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

+ 0000 0111 - 0000 0111 + 0000 0111


0000 0110 0000 0110 1111 1010
0000 1101 0000 0001 0000 0001

Aritmética Computacional 15
Overflow
 Ocorre sempre que o resultado de uma operação não
pode ser representado no hardware disponível.

Operação Operando A Operando B Resultado


A+B >= 0 >=0 <0
A+B <0 <0 >=0
A-B >=0 <0 <0
A-B <0 >=0 >=0

 Se um número for negativo, e o outro positivo, não


ocorrerá overflow.
Aritmética Computacional 16
Exemplo de overflow
Adição de 2 operandos positivos (8 bits)

positivo
+ 0100 0110
0110 0000 positivo
1010 0110 negativo

overflow

 Isto significa que o resultado está correto se o


bit de sinal for ignorado

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

 Isto significa que o resultado é negativo


e está em complemento a 2

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

 Não ocorre overflow, o resultado é


negativo e está em complemento a 2

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

 Não ocorre overflow, o carry é ignorado


e o resultado é 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
3 Operações
Lógicas

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Operações Lógicas
 Em muitas aplicações é necessário
processar bits isolados dentro de uma
palavra → operações lógicas
 Shifts: deslocamento à esquerda ou à
direita → instruções rlc, rrc, rl, rr
 Verapostila de laboratório:
Aula 06 – Instruções de Rotação e Funções

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

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Introdução
 Representa os músculos do computador:
realiza operações aritméticas como a
adição e a subtração ou operações
lógicas como AND e OR
 A partir de agora mostrar-se-á como
construir uma UAL para realizar as quatro
operações acima

Aritmética Computacional 27
Blocos Construtivos Básicos
a c Entrada Saída
NOT (Inversora) a c
c=a 0
1
1
0

Entradas Saída
a c a b c
AND 0 0 0

c = a.b b 0
1
1
0
0
0
1 1 1

Entrada Saída
OR a c a b c
c = a+b b 0
0
0
1
0
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:

 Operação = 0 ou 1 → AND ou OR.


Aritmética Computacional 29
Somador de 1 bit
 Soma A + B + “vem 1”
 Gera Resultado e “vai um”
 Tabela Verdade:
Entradas Saídas Comentários
A B Vem 1 Soma Vai 1
0 0 0 0 0 0+0+0 = 00
0 0 1 1 0 0+0+1 = 01
0 1 0 1 0 0+1+0 = 01
0 1 1 0 1 0+1+1 = 10
1 0 0 1 0 1+0+0 = 01
1 0 1 0 1 1+0+1 = 10
1 1 0 0 1 1+1+0 = 10
1 1 1 1 1 1+1+1 = 11
Aritmética Computacional 30
Exercício
 Gerar a unidade lógica a seguir:
CarryIn

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. + 2
1
 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=B0⋅CarryIn0+a0⋅CarryIn0+a0⋅b0 ou
 C1=b0⋅c0+a0.c0+a0⋅b0
 C2=b1⋅c1+a1⋅c1+a0⋅b0

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

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Exemplo: como na prática
multiplicando 1000
multiplicador x 1001

1000  Número de dígitos:


multiplicando + multiplicador.
0000  32 bits x 32 bits = 64 bits.
0000
1000____
produto 1001000

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

1a. Produto = Produto + Multiplicando

2. desloque Multiplicando 1 bit à esquerda

3. desloque Multiplicador 1 bit à direita

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

1a. Some o multiplicando à metade


esquerda do produto

2. desloque o registrador de Produto 1 bit à direita

3. desloque o registrador Multiplicador 1 bit à direita

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

1a. Some o multiplicando à metade


esquerda do produto

2. desloque o registrador de Produto 1 bit à direita

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

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Divisão
 A operação recíproca da multiplicação é a
divisão, operação que é ainda menos
freqüente que a multiplicação e mais
ardilosa. Além disso, ela oferece uma rara
oportunidade de se efetuar uma operação
matemática inválida: a divisão por zero.

 dividendo = quociente x divisor + resto

Aritmética Computacional 57
Divisão início

1. Resto = Resto - Divisor

Resto>=0 Resto < 0


Teste do
Resto

2a. Desloque o Quociente 1 bit à esquerda 2b. Resto = Resto + Divisor


Q0 = 1 Desloque o Quociente um 1 bit à esquerda
Q0 = 0

3. Desloque o Divisor 1 bit à direita

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
7 Operações em
Ponto Flutuante

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Operações em Ponto Flutuante
 Suporte a números inteiros com e sem sinal.
 Suporte a números fracionários: 3,1414, 0,00001 etc.
 Notação científica: 1,34 x 103.
 Números normalizados: 1 dígito antes do ponto decimal.
 Números binários também podem ser normalizados.
 Ponto decimal / ponto binário.
 Aritmética com números normalizados: aritmética de
ponto flutuante.
 Em C: “float”.
 Formato: 1,xxxxxxxx2 × 2yyyy.

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

 Peso para precisão dupla: 1.023.

Aritmética Computacional 66
Exemplo 1
 Representar o número -0,7510 em ponto
flutuante e precisão simples.
 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

N = (−1) S × (1 + Mantissa ) × 2( E − Peso )


 Em precisão simples:

 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
8 Lendas e
Falhas

Prof. Cláudio Faria e Lideir Viana


PUC-Minas campus de Poços de Caldas
Lendas e Falhas
 Lenda: a adição em ponto flutuante é
associativa; ou seja, x+(y+z)=(x+y)+z.
 Lenda: assim como uma instrução de
deslocamento à esquerda pode substituir uma
multiplicação inteira por uma divisão inteira por
uma potência de 2.
 Lenda: só os matemáticos teóricos se
preocupam com a precisão das operações em
ponto flutuante.

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
1 + 2

CarryOut

Aritmética Computacional 74