Você está na página 1de 74

Aritmtica Computacional

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

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Introduo

Humanos: sistema decimal. Computadores: sistema binrio. Como representar nmeros negativos e nmeros reais? Qual o maior nmero representvel numa palavra de computador? O que acontece quando o resultado maior do que a capacidade do computador?
Aritmtica Computacional 2

Contedo
1.
2. 3. 4. 5. 6. 7.

8.
9.

Nmeros com sinal e nmeros sem sinal Adio e subtrao Operaes lgicas Construo de uma unidade aritmtica lgica Multiplicao Diviso Operaes em ponto flutuante Lendas e falhas Consideraes Finais
Aritmtica Computacional 3

Nmeros com sinal e nmeros sem sinal

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Nmeros com Sinal e Nmeros sem Sinal

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

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

Representao no Z80 (8 bits)

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

Aritmtica Computacional

Faixa de nmeros 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)
Aritmtica Computacional 6

Representao de nmeros

Nmeros reais: infinitos. No computador: finitos. Maioria: grande quantidade de zeros esquerda. Computador: pode lidar com nmeros at um certo tamanho. Overflow: tratado pelo sistema operacional. No computador: preciso representar nmeros com sinal.

Soluo: usar 1 bit (sinal magnitude).

Primeira tentativa: o bit mais significativos (MSB) usado para sinal.

Problema: duas representaes para o zero Soluo mais usada: complemento a 2

Aritmtica Computacional

Complemento a 2

A regra baseia-se no fato de que a soma de um nmero com sua representao invertida deve ser -1:

x x 1
x x 1 0 x 1 x

Aritmtica Computacional

Faixa de valores em complemento a 2 para 3 bits


000 111 110 -2 -3 -4 100 3 -1 0 1

001

010

101

011

Aritmtica Computacional

Complemento a 2: regra prtica

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


X = 1111 0111 1

-X = 1111 1000

Aritmtica Computacional

10

Interface Hardware/Software
Endereos: sempre positivos Os nmeros vo de 0 a 27FF (Z80), e no so nunca negativos. Em C: int e unsigned int.

Aritmtica Computacional

11

Exerccios
1.
2. 3. 4.

Converta -15(10) para binrio com representao em sinal/magnitude (16 bits). Converta -15(10) para binrio com representao em complemento a 2 (16 bits). Qual o nmero, em decimal, representado em complemento a 2 por 1010 0011(2)? Usando complemento a 2 qual a faixa de nmeros que podem ser representados com 8 bits?

Aritmtica Computacional

12

Adio e Subtrao

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Adio e Subtrao

No computador: soma semelhante soma no sistema decimal. Soma: soma cada bit, mais o vai-um.

Aritmtica Computacional

14

Adio e Subtrao (8 bits)

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


adio subtrao
Subtrao com complemento a 2

+ 0000 0111 0000 0110 0000 1101

0000 0111 0000 0110 0000 0001


Aritmtica Computacional

+ 0000 0111
1111 1010 0000 0001
15

Overflow

Ocorre sempre que o resultado de uma operao no pode ser representado no hardware disponvel.
Operao A+B A+B A-B A-B Operando A >= 0 <0 >=0 <0 Operando B >=0 <0 <0 >=0 Resultado <0 >=0 <0 >=0

Se um nmero for negativo, e o outro positivo, no ocorrer overflow.


Aritmtica Computacional 16

Exemplo de overflow Adio de 2 operandos positivos (8 bits)


+ 0100 0110 0110 0000 1010 0110 overflow

positivo positivo negativo

Isto significa que o resultado est correto se o bit de sinal for ignorado
Aritmtica Computacional 17

Exemplo de overflow Adio de 2 operandos negativos (8 bits)


+ 1000 0000 1010 0000 carry 1 0010 0000 overflow negativo negativo positivo

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


Aritmtica Computacional 18

Exemplo de overflow Adio de operandos com sinais opostos (8 bits)


+ 0100 0000 1010 0000 1110 0000
positivo negativo negativo

No ocorre overflow, o resultado negativo e est em complemento a 2


Aritmtica Computacional 19

Exemplo de overflow Adio de operandos com sinais opostos (8 bits)


+ 0110 0000 1100 0000 carry 1 0010 0000
positivo negativo positivo

No ocorre overflow, o carry ignorado e o resultado positivo


Aritmtica Computacional 20

Interface Hardware/Software

Na ocorrncia de overflow: a mquina precisa decidir como trat-lo.

Linguagem C: no toma conhecimento do overflows. A tarefa do programador. FORTRAN: trata o overflow

Aritmtica Computacional

21

Exerccios

Faa as operaes aritmticas abaixo utilizando nmeros binrios de 8 bits e complemento a 2:


+9 + 4 2. +9 - 4 3. -9 + 4 4. -9 - 4
1.

Aritmtica Computacional

22

Operaes Lgicas

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Operaes Lgicas
Em muitas aplicaes necessrio processar bits isolados dentro de uma palavra operaes lgicas Shifts: deslocamento esquerda ou direita instrues rlc, rrc, rl, rr

Ver

apostila de laboratrio: Aula 06 Instrues de Rotao e Funes

Aritmtica Computacional

24

Operaes AND e OR

Operao AND: atua bit a bit, deixando 1 como resultado somente no caso de ambos os bits correspondentes dos operandos serem 1 (aplicao de mscara) Operao OR: tambm atua bit a bit colocando 1 no resultado se qualquer um dos bits correspondentes do operando for 1.

Aritmtica Computacional

25

Construo de uma Unidade Aritmtica Lgica

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Introduo
Representa os msculos do computador: realiza operaes aritmticas como a adio e a subtrao ou operaes lgicas como AND e OR A partir de agora mostrar-se- como construir uma UAL para realizar as quatro operaes acima

Aritmtica Computacional

27

Blocos Construtivos Bsicos


ca
AND NOT (Inversora) a c
Entrada a 0 1
Entradas a b 0 0 0 1 1 0 1 1

Sada c 1 0
Sada c 0 0 0 1

a b

c a.b c ab
Multiplexador

OR

a b

Entrada a b 0 0 0 1 1 0 1 1

Sada c 0 1 1 1

d a b 0 1
Aritmtica Computacional
Entrada d 0 1 Sada c a b

Se d==0, c=a seno c=b

28

Uma UAL de 1 Bit

Unidade lgica de 1 bit:

Operao = 0 ou 1 AND ou OR.


Aritmtica Computacional 29

Somador de 1 bit

Soma A + B + vem 1 Gera Resultado e vai um Tabela Verdade:


Entradas
A 0 0 0 0 1 1 B 0 0 1 1 0 0 Vem 1 0 1 0 1 0 1 0 1 1 0 1 0

Sadas
Soma Vai 1 0 0 0 1 0 1

Comentrios
0+0+0 = 00 0+0+1 = 01 0+1+0 = 01 0+1+1 = 10 1+0+0 = 01 1+0+1 = 10

1
1

1
1

0
1

0
1

1
1

1+1+0 = 10
1+1+1 = 11
30

Aritmtica Computacional

Exerccio

Gerar a unidade lgica a seguir:


CarryIn

+
b CarryOut

Soma

Aritmtica Computacional

31

UAL Simples de 1 bit

Aritmtica Computacional

32

Exerccios
1.

2.

Alterar a UAL anterior para que ela gere o valor 0. Dica: a maneira mais fcil expandir o multiplexador controlado pela linha Operao. Como projetar uma UAL de 32 bits utilizando uma UAL de 1 bit?

Aritmtica Computacional

33

UAL de 32 bits

Aritmtica Computacional

34

Subtrao

A subtrao 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 inverte o valor de b. Falta ainda somar 1 ao valor de b invertido. Como faz-lo?

A0

1 B0 0 1

Resultado 0

+
CarryOut

Aritmtica Computacional

35

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

Aritmtica Computacional

36

Overflow

Como fazer a deteco de overflow?


Leia

o tpico Adaptao da UAL de 32 bits para o MIPS e faa o exerccio 4.23 do livro texto.

Aritmtica Computacional

37

Smbolo Geral da UAL

Aritmtica Computacional

38

Problema

Qual o problema de uma UAL projetada como a anterior?

Aritmtica 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 operao realizada no somador de 1 bit vizinho. Soluo:

CarryIn1=B0CarryIn0+a0CarryIn0+a0b0 ou C1=b0c0+a0.c0+a0b0 C2=b1c1+a1c1+a0b0

Aritmtica Computacional

40

Carry Lookahead
Problema deste mtodo: circuito ainda complexo para clculos de muitos bits e portanto caro. Qual a soluo?

Mtodo

de propagador e gerador. Veja livro

texto.

Aritmtica Computacional

41

Multiplicao

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Exemplo: como na prtica


1000 multiplicador x 1001 1000 0000 0000 1000____ produto 1001000
multiplicando

Nmero de dgitos: multiplicando + multiplicador. 32 bits x 32 bits = 64 bits.

Aritmtica Computacional

43

Algoritmo

Como na prtica Simplesmente coloque um cpia 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 verses do algoritmo de multiplicao para 32 bits (32 x 32 bits)

Aritmtica Computacional

44

Algoritmo: 1 Verso
incio
Multiplicador0=1

1. teste do Multiplicador0 1a. Produto = Produto + Multiplicando

Multiplicador0=0

2. desloque Multiplicando 1 bit esquerda

3. desloque Multiplicador 1 bit direita

no

32 repeties?
sim

Fim
Aritmtica Computacional 45

Hardware: 1 Verso

Aritmtica Computacional

46

Exerccio
Usando nmeros de 4 bits, com o intuito de economizar espao, multiplique 210 por 310 ou 00102 por 00112. Valores iniciais:

Multiplicando

= 0000 0010 Multiplicador = 0011 Produto = 0000 0000

Aritmtica Computacional

47

Desvantagens

UAL de 64 bits. 2 registradores de 64 bits Prxima verso:


Metade

dos bits do multiplicando da primeira verso so sempre zero, de modo que somente metade deles poderia conter informaes teis. A segunda verso utiliza-se desta informao para melhorar a performance da multiplicao.

Aritmtica Computacional

48

Algoritmo: 2 Verso
incio
Multiplicador0=1

1. teste do Multiplicador0 1a. Some o multiplicando metade esquerda do produto

Multiplicador0=0

2. desloque o registrador de Produto 1 bit direita

3. desloque o registrador Multiplicador 1 bit direita

sim

no

Fim

32 repeties?
Aritmtica Computacional 49

Hardware: 2 Verso

Aritmtica Computacional

50

Exerccio
Multiplique 00102 por 00112 usando a segunda verso do algoritmo de multiplicao. Valores iniciais:

Multiplicando

= 0010 Multiplicador = 0011 Produto = 0000 0000

Aritmtica Computacional

51

Verso Final do Algoritmo de Multiplicao

O registrador reservado ao produto desperdia tanto espao quanto o do multiplicador: medida que o desperdcio de espao do produto se reduzia, a mesma coisa acontecia com o multiplicador.

Aritmtica Computacional

52

Algoritmo: 3 Verso
incio
Produto0=1

1. teste do Produto0 1a. Some o multiplicando metade esquerda do produto

Produto0=0

2. desloque o registrador de Produto 1 bit direita

32 repeties?
no sim

Fim
Aritmtica Computacional 53

Hardware: 3 Verso
Vantagens: ULA de 32 bits. Apenas 1 registrador de 64 bits.

Aritmtica Computacional

54

Exerccio
Multiplique 00102 por 00112 usando a terceira verso do algoritmo de multiplicao. Valores iniciais:

Multiplicando

= 0010 Produto = 0000 0011

Aritmtica Computacional

55

Diviso
Divide et impera.

Verso latina da velha mxima poltica Divida e governe, citada por Maquiavel em 1532
Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Diviso

A operao recproca da multiplicao a diviso, operao que ainda menos freqente que a multiplicao e mais ardilosa. Alm disso, ela oferece uma rara oportunidade de se efetuar uma operao matemtica invlida: a diviso por zero.
dividendo = quociente x divisor + resto
Aritmtica Computacional 57

Diviso

incio

1. Resto = Resto - Divisor

Resto>=0

Teste do Resto

Resto < 0

2a. Desloque o Quociente 1 bit esquerda Q0 = 1

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

3. Desloque o Divisor 1 bit direita


no

33 repeties?
sim

Fim
Aritmtica Computacional 58

Hardware da Diviso
Divisor Deslocamento direita (64 bits)

UAL de 64 bits

Quociente Deslocamento esquerda (32 bits)

Resto Escrita

Teste de controle

64 bits

Aritmtica Computacional

59

Exerccio
Dividir 0000 01112 por 00102. Valores iniciais:

Quociente

= 0000 Divisor = 0010 0000 Resto = 0000 0111

Aritmtica Computacional

60

Operaes em Ponto Flutuante

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Operaes em Ponto Flutuante

Suporte a nmeros inteiros com e sem sinal. Suporte a nmeros fracionrios: 3,1414, 0,00001 etc. Notao cientfica: 1,34 x 103. Nmeros normalizados: 1 dgito antes do ponto decimal. Nmeros binrios tambm podem ser normalizados. Ponto decimal / ponto binrio. Aritmtica com nmeros normalizados: aritmtica de ponto flutuante. Em C: float. Formato: 1,xxxxxxxx2 2yyyy.

Aritmtica Computacional

62

Representao em Ponto Flutuante


N (1) S F 2 E
32 bits s 1

expoente 8

mantissa 23

S sinal do nmero F mantissa, normalizada E expoente Tamanho: -2,0 1038 a 2,0 1038.
Aritmtica Computacional 63

Overflow em Ponto Flutuante

Ocorre quando o expoente muito grande pra ser representado pelos 8 bits. Underflow: O mdulo do expoente negativo muito grande. Necessrio nmeros maiores: preciso dupla. Na linguagem C: double. 64 bits s 1 expoente
mantissa 52

11 Representa nmeros entre -2,0 10-308 a 2,0 10308.


Aritmtica Computacional 64

Padro IEEE 754


Torna implcito o 1 esquerda do ponto binrio. Quando o expoente for zero, o hardware no considera o primeiro bit 1 implcito, para permitir a representao do nmero 0 em ponto flutuante.

N (1) S (1 Mantissa) 2 E
Aritmtica Computacional 65

Padro IEEE 754

Deve permitir comparaes rpidas. Seria melhor: o menor coeficiente possvel valer 00000000, e o maior 11111111. Modificao:

Subtrair 127 (peso) do exponente. Representao de 1: -1+127=-1+01111111=01111110. +1=+1+127=100000002.

Formato:

N (1) S (1 Mantissa) 2( E Peso)

Peso para preciso dupla: 1.023.


Aritmtica Computacional 66

Exemplo 1
1.

2.

Representar o nmero -0,7510 em ponto flutuante e preciso simples. Representar o nmero -0,7510 em ponto flutuante e dupla preciso.

Aritmtica Computacional

67

Resposta da 1

1a fase: converter para binrio:


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 preciso simples:

Resultado: Representao:

Aritmtica Computacional

68

Exemplo

Converter a palavra abaixo em ponto flutuante para nmero

Aritmtica Computacional

69

Resposta

Aritmtica Computacional

70

Lendas e Falhas

Prof. Cludio Faria e Lideir Viana PUC-Minas campus de Poos de Caldas

Lendas e Falhas

Lenda: a adio em ponto flutuante associativa; ou seja, x+(y+z)=(x+y)+z. Lenda: assim como uma instruo de deslocamento esquerda pode substituir uma multiplicao inteira por uma diviso inteira por uma potncia de 2. Lenda: s os matemticos tericos se preocupam com a preciso das operaes em ponto flutuante.

Aritmtica Computacional

72

Bibliografia
Patterson, David A. e Hennessy, John L. Organizao e Projeto de Computadores: A Interface Hardware/Software. Ed. LTC, 732. Ed., 2000, Rio de Janeiro.

Aritmtica Computacional

73

BInvertido

CarryIn OP1 OP0

A0

1 B0 0 1

Resultado 0

+
CarryOut

Aritmtica Computacional

74

Você também pode gostar