47
Arquitetura e Organização de Computadores Aritmética Computacional Prof. Sílvio Fernandes UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO … · Aritmética Computacional Prof. Sílvio Fernandes ... •No sistema de numeração binária, é possível representar números inteiros

Embed Size (px)

Citation preview

Arquitetura e Organização de Computadores

Aritmética Computacional

Prof. Sílvio Fernandes

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS

CURSO DE CIÊNCIA DA COMPUTAÇÃO

Unidade Lógica e Aritmética (ULA)

• Do inglês ALU • Faz os cálculos. • Tudo o mais no computador existe para atender

a essa unidade. • Trata de inteiros. • Pode tratar de números de ponto flutuante

(reais). • Pode ser FPU separada (coprocessador

matemático). • Pode estar em chip de FPU separado (486DX +).

2

Unidade Lógica e Aritmética (ALU)

3

Representação de Números Inteiros

• No sistema de numeração binária, é possível representar números inteiros negativos usando:

– Dígitos 0 e 1

– Sinal de subtração

– Vírgula

• Exemplo:

-1101,01012 = -13,312510

4

Representação de Números Inteiros

• Para armazenar e processar números inteiros

negativos no computador, são usados apenas

os dígitos 0 e 1

• Se uma sequencia de n bits de dígitos binários

na-1 na-2 ... a1 a0 for um inteiro sem sinal A, seu

valor é

5

1

0

2n

i

i

i aA

Representação de Números Inteiros

• Como representar números negativos?

– Representação Sinal-Magnitude

– Representação em Complemento de Dois

6

Representação Sinal-Magnitude

• Em uma palavra de n bits

– O bit mais à esquerda representa o sinal do número inteiro

– Os n-1 bits mais à direita representam a magnitude do número inteiro

• Exemplo:

+18 = 00010010

-18 = 10010010 7

Representação Sinal-Magnitude

• Há duas representações para o zero

+0 = 00000000

-0 = 10000000

• É mais difícil testar se um valor é igual a zero do que no caso em que há apenas uma representação para o zero

• Por isso, essa representação raramente é usada na implementação da parte inteira de uma ULA

8

9

Representação em Complemento de Dois

– Para números inteiros positivos, an-1 = 0

– O número 0 é tratado como um número inteiro positivo

• Usada para representar números na faixa -2n ↔ 2n-1

• Usada quase universalmente para representar números inteiros dentro do µP

10

Representação em Complemento de Dois

2

0

1

1 22n

i

i

i

n

n aaA

Decimal S-M C-2

+8 - -

+7 0111 0111

+6 0110 0110

+5 0101 0101

+4 0100 0100

+3 0011 0011

+2 0010 0010

+1 0001 0001

+0 0000 0000

Decimal S-M C-2

-0 1000 -

-1 1001 1111

-2 1010 1110

-3 1011 1101

-4 1100 1100

-5 1101 1011

-6 1110 1010

-7 1111 1001

-8 - 1000

Representação em Complemento de Dois

• Conversão complemento de 2 → decimal

• Conversão decimal→ complemento de 2

-128 +2 +1 = -125

-120 =

12

Representação em Complemento de Dois

-128 64 32 16 8 4 2 1

1 0 0 0 0 0 1 1

-128 64 32 16 8 4 2 1

1 0 0 0 1 0 0 0

-128 +8

• Às vezes é desejável converter a representação de um número inteiro com n bits para sua representação com m bits, onde m > n

• Na representação sinal-magnitude, isso pode ser feito facilmente

– Basta mover o bit de sinal para a posição mais à esquerda e preencher as demais posições novas com 0

13

Representação em Complemento de Dois

Representação em Sinal-Magnitude

• Exemplos:

+18 = 00010010 (s-m, 8 bits)

+18 = 0000000000010010 (s-m, 16 bits)

-18 = 10010010 (s-m, 8 bits)

-18 = 1000000000010010 (s-m, 16 bits)

• Esse procedimento não funciona para números inteiros negativos representados em complemento de dois

14

• Exemplos:

+18 = 00010010 (c-2, 8 bits)

+18 = 0000000000010010 (c-2, 16 bits)

-18 = 11101110 (c-2, 8 bits)

-32.658 = 1000000001101110 (c-2, 16 bits)

• A regra é mover o bit de sinal para a posição mais à esquerda e preencher as demais com valor igual ao bit de sinal

15

Representação em Complemento de Dois

• Exemplos:

+18 = 00010010 (c-2, 8 bits)

+18 = 0000000000010010 (c-2, 16 bits)

-18 = 11101110 (c-2, 8 bits)

-18 = 1111111111101110 (c-2, 16 bits)

16

Representação em Complemento de Dois

• Negação

– Para representação s-m, basta inverter o valor do bit de sinal

– Para a representação em complemento de dois:

• Toma-se o complemento booleano de cada bit do número

• Adiciona-se 1 ao resultado

17

Representação em Complemento de Dois

• Exemplos:

+18 = 00010010 (c-2)

Complemento booleano = 11101101

+1

11101110 = -18

-18 = 11101110 (c-2)

Complemento booleano = 00010001

+1

00010010 = +18

18

Representação em Complemento de Dois

• Casos especiais de negação

0 = 00000000 (c-2)

Complemento booleano = 11111111

+1

100000000 = 0

Bit “vai um” (carry in) - é ignorado

19

Representação em Complemento de Dois

• Casos especiais de negação (cont.)

-128 = 10000000 (c-2)

Complemento booleano = 01111111

+1

10000000 = -128

– Anomalia se deve ao fato que uma palavra de n bits pode conter 2n representações distintas

• 2n é um número par

• Sendo representados números positivos, negativos e o 0, a qtde de números positivos e negativos são diferentes

20

Representação em Complemento de Dois

• Adição

1001 +0101 1110

(a) (-7) + (+5) = -2

1100 +0100 10000

(b) (-4) + (+4) = 0

0011 +0100 0111

(c) (+3) + (+4) = +7

1100 +1111 11011

(d) (-4) + (-1) = -5

0101 +0100 1001

(e) (+5) + (+4) = +9 (overflow)

1001 +1010 10011

(f) (-7) + (-6) = -13 (overflow) 21

Representação em Complemento de Dois

• Subtração

0010 +1001 1011

(a) M = 2 = 0010 S = 7 = 0111

-S = -7 = 1001 (+2) + (-7) = -5

1011 +1110 11001

(c) M = -5 = 1011 S = 2 = 0010

-S = -2 = 1110 (-5) + (-2) = -7

0111 +0111 1110

(e) M = 7 S = -7 = 1001 -S = 7 = 0111

(+7) + (+7) = 14 (overflow)

0101 +1110 10011

(b) M = 5 = 0101 S = 2 = 0010

-S = -2 = 1110 (+5) + (-2) = +3

0101 +0010 0111

(d) M = 5 = 0101 S = -2 = 1110 -S = 2 = 0010 (+5) + (+2) = +7

1010 +1100 10110

(f) M = -6 = 1010 S = 4 = 0100

-S = -4 = 1100 (-6) + (-4) = -10 (overflow)

22

Representação em Complemento de Dois

23

Representação em Complemento de Dois

Representação em Complemento de Dois

• Hardware para adição e subtração

24

Representação em Complemento de Dois

• Multiplicação

– Complexa.

– Calcule produto parcial para cada dígito.

– Cuidado com o valor da casa (coluna).

– Some produtos parciais.

25

Representação em Complemento de Dois

• Exemplo de Multiplicação

Nota: precisa de resultado com tamanho duplo.

26

Representação em Complemento de Dois

• Hardware para Multiplicação

27

Representação em Complemento de Dois

• Multiplicação de 1101 e 1011

28

Representação em Complemento de Dois

• Fluxograma para Multiplicação

29

Representação em Complemento de Dois

• Multiplicando número negativos

– Isso não funciona!

– Solução 1:

• Converta para positivo, se for preciso.

• Multiplique como antes.

• Se sinais diferentes, negue a resposta.

– Solução 2:

• Algoritmo de Booth.

30

Representação em Complemento de Dois

• Fluxograma do algoritmo de Booth

31

Representação em Complemento de Dois

• Exemplo do algoritmo de Booth (7 x 3)

32 Nota: É usado deslocamento aritmético para preservar o sinal

Representação em Complemento de Dois

• Exemplo do algoritmo de Booth para

negativos

33

Representação em Complemento de Dois

• Divisão

– Mais complexa que a multiplicação.

– Números negativos são realmente maus!

– Baseada na divisão longa.

34

Representação em Complemento de Dois

• Divisão de inteiros sem sinal

35

001111

1011

00001101

10010011

1011

001110

1011

1011

100

Quociente

Dividendo

Resto

Restos

Parciais

Divisor

Representação em Complemento de Dois

• Divisão de inteiros sem sinal

36

Representação de Ponto Flutuante

• Usada para representar números muito grandes ou muito pequenos

– Para números decimais, usa-se a notação científica

• 976.000.000.000.000 = 9,76 x 1014

• 0,0000000000000976 = 9,76 x 10-14

• Para números binários, temos:

EBM

Sinal Mantissa

Expoente

37

Representação de Ponto Flutuante

• Um mesmo número pode ser várias representações em ponto flutuante

24 = 0,110 x 25 = 110 x 22 = 0,0110 x 26

• Para simplificar as operações, é requerido que os números sejam normalizados

E

nbbbb 2...1,1 210

implícito

Dígitos binários

38

Representação de Ponto Flutuante

Expoente polarizado

Significando

23 bits 8 bits

32 bits Sinal da

mantissa • o sinal é armazenado no primeiro bit da palavra • o primeiro bit da significando verdadeira é sempre 1

- por isso não precisa ser armazenado • o valor 127 é adicionado ao expoente verdadeiro, sendo o resultado denominado Expoente Polarizado

Exemplos: • 856.064 = 0,11010001 x 210100 = 0 10010011 10100010000000000000000 • -856.064 = -0,11010001 x 210100 = 1 10010011 10100010000000000000000 • 209 x 2-28 = 0,11010001 x 2-10100 = 0 01101011 10100010000000000000000 • -209 x 2-28 = -0,11010001 x 2-10100 = 1 01101011 10100010000000000000000

39

Representação de Ponto Flutuante

• Intervalos de representação para 32 bits:

– Números negativos:

• [-(1-2-24) x 2128 , -0,5 x 2-127] -(1-2-24) x 2128 = 1 11111111 11111111111111111111111

-0,5 x 2-127 = 1 00000000 00000000000000000000000

– Números positivos:

• [0,5 x 2-127 , (1-2-24) x 2128] 0,5 x 2-127 = 0 00000000 00000000000000000000000

(1-2-24) x 2128 = 0 11111111 11111111111111111111111

40

Representação de Ponto Flutuante

Números positivos representáveis

Números negativos representáveis

-(1-2-24) x 2128 -0,5 x 2-127 -0,5 x 2-127 -(1-2-24) x 2128 0

Overflow em Números Negativos

Overflow em Números Positivos

Underflow em Números Negativos

Underflow em Números Positivos

Números inteiros representáveis

0 -231 231-1

Overflow em Números Negativos

Overflow em Números Positivos

41

Representação de Ponto Flutuante

• O underflow é menos crítico que o overflow, pois o valor pode ser aproximado para 0

• Não há, à princípio, representação para 0

– Na verdade, há um padrão de bits especial para representação do 0

• O número máximo de valores distintos representáveis continua sendo 232

– A representação em ponto flutuante apenas divide esses valores em duas faixas

42

Representação de Ponto Flutuante

• Há uma relação estreita entre os tamanhos dos campos reservados ao significando e ao expoente

• Para um tamanho fixo de palavra:

– Se o número de bits reservados ao significando aumentar, aumenta-se a precisão, mas diminui-se a faixa de valores representáveis

– Se o número de bits reservados ao expoente aumentar, aumenta-se a faixa de valores representáveis, mas diminui-se a precisão

43

Representação de Ponto Flutuante

• Padrão IEEE 754

44

Expoente polarizado

Significando

52 bits 11 bits

64 bits Sinal do

significando

Expoente polarizado

Significando

23 bits 8 bits

32 bits Sinal do

significando

Formato Simples

Formato Duplo

Representação de Ponto Flutuante

Sinal

Expoente Polarizado

Mantissa Valor Formato

Simples

Formato

Duplo

0 0 0 0 0

1 0 0 0 -0

0 255 2047 0 ∞

1 255 2047 0 -∞

0 ou 1 255 2047 ≠ 0 NaN

45

• Valores especiais definidos no IEEE 754

Representação de Ponto Flutuante

• Parâmetros do formato IEEE 754

46

Parâmetro Formato Simples Formato Duplo

Tamanho da palavra 32 64

Tamanho do expoente 8 11

Polarização do expoente 127 1023

Expoente máximo 127 1023

Expoente mínimo -126 -1022

Tamanho da mantissa 23 52

Número de expoentes 254 2046

Número de mantissas 223 252

Número de valores 1,98 x 231 1,99 x 263

Referências

• STALLINGS, W. Arquitetura e organização de computadores: projeto para o desempenho. 8. ed. Prentice Hall, 2009.

• DELGADO, J.; RIBEIRO, C. Arquitetura de Computadores. 2 ed. LTC, 2009.

• PATTERSON, D. A. ; HENNESSY, J.L. Organização e projeto de computadores – a interface hardware software. 3. ed. Editora Campus, 2005.

47