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. 2. 3. 4. 5. 6. 7. 8. 9.

Números com sinal e números sem sinal Adição e subtração Operações lógicas Construção de uma unidade aritmética lógica Multiplicação Divisão Operações em ponto flutuante Lendas e falhas Considerações Finais
Aritmética Computacional 3

1

Números com 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 110 -2 -3 -4 100 3 0 -1 1 001

2 010 011

101

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)
adição subtração
Subtração com complemento a 2

+ 0000 0111 0000 0110 0000 1101

-

0000 0111 0000 0110 0000 0001
Aritmética Computacional

+ 0000 0111
1111 1010 0000 0001
15

Overflow

Ocorre sempre que o resultado de uma operação não pode ser representado no hardware disponível.
Operação 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 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)
+ 0100 0110 0110 0000 1010 0110 overflow

positivo positivo negativo

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)
+ 1000 0000 1010 0000 carry 1 0010 0000 overflow  negativo negativo positivo

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)
+ 0100 0000 1010 0000 1110 0000
positivo negativo 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)
+ 0110 0000 1100 0000 carry 1 0010 0000
positivo negativo 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. 2. 3. 4.

+9 + 4 +9 - 4 -9 + 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

 Ver

apostila 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

4

Construção de 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
c=a
AND NOT (Inversora) a c
Entrada a 0 1
Entradas a b 0 0 0 1 1 0 1 1 Entrada a b 0 0 0 1 1 0 1 1

Saída c 1 0
Saída c 0 0 0 1 Saída c 0 1 1 1

a b

c

c = a.b c = a+b
Multiplexador OR

b

a

c

d a b 0 1
Aritmética Computacional

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

c

Entrada d 0 1

Saída c a b

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
A 0 0 0 0 1 1 1 1 B 0 0 1 1 0 0 1 1 Vem 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 0 1

Saídas
Soma Vai 1 0 0 0 1 0 1 1 1

Comentários
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+0 = 10 1+1+1 = 11
30

Aritmética Computacional

Exercício

Gerar a unidade lógica a seguir:
CarryIn

a b

+
CarryOut

Soma

Aritmética Computacional

31

UAL Simples de 1 bit

Aritmética Computacional

32

Exercícios
1.

2.

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

A0

0 Resultado 0

1 B0 0 1

+
CarryOut

2

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
1000 multiplicador x 1001 1000 0000 0000 1000____ produto 1001000
multiplicando

Número de dígitos: multiplicando + multiplicador. 32 bits x 32 bits = 64 bits.

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

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

Multiplicador0=0

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

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

Fim

32 repetições?

não

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

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

Produto0=0

2. desloque o registrador de Produto 1 bit à direita

32 repetições?
sim não

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

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
não

33 repetições?
sim

Fim
Aritmética Computacional 58

Hardware da Divisão
Divisor Deslocamento à direita (64 bits)

UAL de 64 bits

Quociente Deslocamento À esquerda (32 bits)

Resto Escrita

Teste de 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 1
   

expoente 8

mantissa 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 1 expoente mantissa 52

11 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:

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

( E − Peso )

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

Em precisão simples: Resultado: Representação:

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

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

+
CarryOut

2

Aritmética Computacional

74