03 aritmetica computacional

74
Prof. Cláudio Faria e Lideir Viana PUC-Minas campus de Poços de Caldas Aritmética Computacional The complexity is in eye of the observer... As much as the object allows.

Upload: rafael-raeder

Post on 06-Jun-2015

2.030 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Aritmética Computacional

The complexity is in eye of the observer...

As much as the object allows.

Page 2: 03 aritmetica  computacional

2Aritmética Computacional

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?

Page 3: 03 aritmetica  computacional

3Aritmética Computacional

Conteúdo

1. Números com sinal e números sem sinal2. Adição e subtração3. Operações lógicas4. Construção de uma unidade aritmética lógica5. Multiplicação6. Divisão7. Operações em ponto flutuante8. Lendas e falhas9. Considerações Finais

Page 4: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Números com sinal e números sem sinal

1

Page 5: 03 aritmetica  computacional

5Aritmética Computacional

Números com Sinal e Números sem Sinal Base 10:

2543(10)=2103+5102+4101+3100(10)

Base 2: 1011(2)=123+022+121+120=11(10)

Representação no Z80 (8 bits)

0 0 0 0 1 0 1 1

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

Page 6: 03 aritmetica  computacional

6Aritmética Computacional

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)

Page 7: 03 aritmetica  computacional

7Aritmética Computacional

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

Page 8: 03 aritmetica  computacional

8Aritmética Computacional

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:

1 xx01 xx

xx 1

Page 9: 03 aritmetica  computacional

9Aritmética Computacional

Faixa de valores em complemento a 2 para 3 bits

0

-4

2-2

1

3-3

-1111

101 011

001

010110

100

000

Page 10: 03 aritmetica  computacional

10Aritmética Computacional

X = 1111 0111

1+

Complemento a 2: regra prática

Considere X = 0000 1000, o complemento a 2 de X será:

-X = 1111 1000

Page 11: 03 aritmetica  computacional

11Aritmética Computacional

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”.

Page 12: 03 aritmetica  computacional

12Aritmética Computacional

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?

Page 13: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Adição e Subtração2

Page 14: 03 aritmetica  computacional

14Aritmética Computacional

Adição e Subtração

No computador: soma semelhante à soma no sistema decimal.

Soma: soma cada bit, mais o vai-um.

Page 15: 03 aritmetica  computacional

15Aritmética Computacional

Adição e Subtração (8 bits)

6(10) = 0000 0110(2) 7(10) = 0000 0111(2)

0000 01110000 0110

+

0000 1101

adição

0000 01110000 0110

-

0000 0001

subtração

0000 01111111 1010

+

0000 0001

Subtração com complemento a 2

Page 16: 03 aritmetica  computacional

16Aritmética Computacional

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.

Page 17: 03 aritmetica  computacional

17Aritmética Computacional

Exemplo de overflowAdição de 2 operandos positivos (8 bits)

0100 01100110 0000

+

1010 0110

overflow

positivo

positivo

negativo

Isto significa que o resultado está correto se o bit de sinal for ignorado

Page 18: 03 aritmetica  computacional

18Aritmética Computacional

Exemplo de overflowAdição de 2 operandos negativos (8 bits)

1000 00001010 0000

+

1 0010 0000

overflow

negativo

negativo

positivocarry

Isto significa que o resultado é negativo e está em complemento a 2

Page 19: 03 aritmetica  computacional

19Aritmética Computacional

Exemplo de overflowAdição de operandos com sinais opostos (8 bits)

0100 00001010 0000

+

1110 0000

positivo

negativo

Não ocorre overflow, o resultado é negativo e está em complemento a 2

negativo

Page 20: 03 aritmetica  computacional

20Aritmética Computacional

Exemplo de overflowAdição de operandos com sinais opostos (8 bits)

0110 00001100 0000

+

1 0010 0000

positivo

negativo

Não ocorre overflow, o carry é ignorado e o resultado é positivo

positivocarry

Page 21: 03 aritmetica  computacional

21Aritmética Computacional

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

Page 22: 03 aritmetica  computacional

22Aritmética Computacional

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

Page 23: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Operações Lógicas3

Page 24: 03 aritmetica  computacional

24Aritmética Computacional

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, rrVer apostila de laboratório:

Aula 06 – Instruções de Rotação e Funções

Page 25: 03 aritmetica  computacional

25Aritmética Computacional

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.

Page 26: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Construção de uma Unidade Aritmética Lógica

4

Page 27: 03 aritmetica  computacional

27Aritmética Computacional

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

Page 28: 03 aritmetica  computacional

28Aritmética Computacional

Blocos Construtivos BásicosEntrada Saída

a c0 11 0

a c

ac NOT (Inversora)

bac .AND

a c

b

Saída

a b c0 0 00 1 01 0 01 1 1

Entradas

bac OR a c

b

Saída

a b c0 0 00 1 11 0 11 1 1

Entrada

a

b

0

1

d

c

Entrada Saída

d c0 a1 b

MultiplexadorSe d==0, c=a senão c=b

Page 29: 03 aritmetica  computacional

29Aritmética Computacional

Uma UAL de 1 Bit

Unidade lógica de 1 bit:

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

Page 30: 03 aritmetica  computacional

30Aritmética Computacional

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

Page 31: 03 aritmetica  computacional

31Aritmética Computacional

Exercício

Gerar a unidade lógica a seguir:

Soma

CarryOut

CarryIn

a

b+

Page 32: 03 aritmetica  computacional

32Aritmética Computacional

UAL Simples de 1 bit

Page 33: 03 aritmetica  computacional

33Aritmética Computacional

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?

Page 34: 03 aritmetica  computacional

34Aritmética Computacional

UAL de 32 bits

Page 35: 03 aritmetica  computacional

35Aritmética Computacional

Subtração A subtração é obtida somando-se o minuendo ao

complemento a 2 do subtraendo, ou seja,

)1( baba

O circuito ao lado inverte o valor de b. Falta ainda somar 1 ao valor de b invertido.

Como fazê-lo?

+

Resultado 0

OP0OP1

CarryInBInvertido

A0

B0

CarryOut

0

1

0

1

2

Page 36: 03 aritmetica  computacional

36Aritmética Computacional

Subtração

Na soma o primeiro CarryIn (vem 1) é 0. O que acontece de fizermos o primeiro

CarryIn = 1?

Page 37: 03 aritmetica  computacional

37Aritmética Computacional

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.

Page 38: 03 aritmetica  computacional

38Aritmética Computacional

Símbolo Geral da UAL

Page 39: 03 aritmetica  computacional

39Aritmética Computacional

Problema

Qual é o problema de uma UAL projetada como a anterior?

Page 40: 03 aritmetica  computacional

40Aritmética Computacional

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

Page 41: 03 aritmetica  computacional

41Aritmética Computacional

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.

Page 42: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Multiplicação5

Page 43: 03 aritmetica  computacional

43Aritmética Computacional

Exemplo: como na prática

1000 x 1001

1000 0000 0000 1000____ 1001000

multiplicando

multiplicador

produto

Número de dígitos: multiplicando + multiplicador.

32 bits x 32 bits = 64 bits.

Número de dígitos: multiplicando + multiplicador.

32 bits x 32 bits = 64 bits.

Page 44: 03 aritmetica  computacional

44Aritmética Computacional

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)

Page 45: 03 aritmetica  computacional

45Aritmética Computacional

Algoritmo: 1ª Versãoinício

1. teste do Multiplicador0

1a. Produto = Produto + Multiplicando

2. desloque Multiplicando 1 bit à esquerda

3. desloque Multiplicador 1 bit à direita

32 repetições?

Fim

Multiplicador0=0Multiplicador0=1

não

sim

Page 46: 03 aritmetica  computacional

46Aritmética Computacional

Hardware: 1ª Versão

Page 47: 03 aritmetica  computacional

47Aritmética Computacional

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 0010Multiplicador = 0011Produto = 0000 0000

Page 48: 03 aritmetica  computacional

48Aritmética Computacional

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.

Page 49: 03 aritmetica  computacional

49Aritmética Computacional

Algoritmo: 2ª Versãoinício

1. teste do Multiplicador0

1a. Some o multiplicando à metadeesquerda do produto

2. desloque o registrador de Produto 1 bit à direita

3. desloque o registrador Multiplicador 1 bit à direita

32 repetições?Fim

Multiplicador0=0Multiplicador0=1

nãosim

Page 50: 03 aritmetica  computacional

50Aritmética Computacional

Hardware: 2ª Versão

Page 51: 03 aritmetica  computacional

51Aritmética Computacional

Exercício

Multiplique 00102 por 00112 usando a segunda versão do algoritmo de multiplicação.

Valores iniciais:Multiplicando = 0010Multiplicador = 0011Produto = 0000 0000

Page 52: 03 aritmetica  computacional

52Aritmética Computacional

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.

Page 53: 03 aritmetica  computacional

53Aritmética Computacional

Algoritmo: 3ª Versãoinício

1. teste do Produto0

1a. Some o multiplicando à metadeesquerda do produto

2. desloque o registrador de Produto 1 bit à direita

32 repetições?

Fim

Produto0=0Produto0=1

nãosim

Page 54: 03 aritmetica  computacional

54Aritmética Computacional

Hardware: 3ª Versão

Vantagens:ULA de 32 bits. Apenas 1 registrador de 64 bits.

Page 55: 03 aritmetica  computacional

55Aritmética Computacional

Exercício

Multiplique 00102 por 00112 usando a terceira versão do algoritmo de multiplicação.

Valores iniciais:Multiplicando = 0010Produto = 0000 0011

Page 56: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Divisão6Divide et impera.

Versão latina da velha máxima política “Divida e governe”, citada por Maquiavel em 1532

Page 57: 03 aritmetica  computacional

57Aritmética Computacional

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

Page 58: 03 aritmetica  computacional

58Aritmética Computacional

Divisãoinício

Teste doResto

2a. Desloque o Quociente 1 bit à esquerdaQ0 = 1

3. Desloque o Divisor 1 bit à direita

33 repetições?

Fim

Resto < 0Resto>=0

não

sim

1. Resto = Resto - Divisor

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

Q0 = 0

Page 59: 03 aritmetica  computacional

59Aritmética Computacional

Hardware da Divisão

DivisorDeslocamento à direita (64 bits)

UAL de 64 bitsQuociente Deslocamento

À esquerda (32 bits)

Teste decontrole

Resto

Escrita

64 bits

Page 60: 03 aritmetica  computacional

60Aritmética Computacional

Exercício

Dividir 0000 01112 por 00102. Valores iniciais:

Quociente = 0000Divisor = 0010 0000Resto = 0000 0111

Page 61: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Operações em Ponto Flutuante7

Page 62: 03 aritmetica  computacional

62Aritmética Computacional

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.

Page 63: 03 aritmetica  computacional

63Aritmética Computacional

Representação em Ponto Flutuante

s expoente mantissa

32 bits

1 8 23

ES FN 2)1(

S – sinal do número F – mantissa, normalizada E – expoente Tamanho: -2,0 1038 a 2,0 1038.

Page 64: 03 aritmetica  computacional

64Aritmética Computacional

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.

s expoente mantissa

64 bits

1 11 52

Representa números entre -2,0 10-308 a 2,0 10308.

Page 65: 03 aritmetica  computacional

65Aritmética Computacional

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.

ES MantissaN 2)1()1(

Page 66: 03 aritmetica  computacional

66Aritmética Computacional

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:

Peso para precisão dupla: 1.023.

)(2)1()1( PesoES MantissaN

Page 67: 03 aritmetica  computacional

67Aritmética Computacional

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.

Page 68: 03 aritmetica  computacional

68Aritmética Computacional

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

Em precisão simples:

Resultado:

Representação:

)(2)1()1( PesoES MantissaN

Page 69: 03 aritmetica  computacional

69Aritmética Computacional

Exemplo

Converter a palavra abaixo em ponto flutuante para número

Page 70: 03 aritmetica  computacional

70Aritmética Computacional

Resposta

Page 71: 03 aritmetica  computacional

Prof. Cláudio Faria e Lideir VianaPUC-Minas campus de Poços de

Caldas

Lendas e Falhas8

Page 72: 03 aritmetica  computacional

72Aritmética Computacional

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.

Page 73: 03 aritmetica  computacional

73Aritmética Computacional

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.

Page 74: 03 aritmetica  computacional

74Aritmética Computacional

+

Resultado 0

OP0OP1

CarryInBInvertido

A0

B0

CarryOut

0

1

0

1

2