William Stallings Arquitetura e Organização de Computadores 8 a Edição Capítulo 9 Aritmética do computador slide 1
Unidade aritmética e lógica 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 +). slide 2
Entradas e saídas da ALU slide 3
Conversão de base Figura retirada do livro Structured Computer Organization, 5th ed. slide 4
Representação de inteiros Só tem 0 & 1 para representar tudo. Números positivos armazenados em binário. P.e., 41=00101001. Sem sinal de menos. Sem ponto. Sinal-magnitude. Complemento a dois. slide 5
Sinal-magnitude Bit mais à esquerda é bit de sinal. 0 significa positivo. 1 significa negativo. +18 = 00010010. -18 = 10010010. Problemas: Precisa considerar sinal e magnitude na aritmética. Duas representações de zero (+0 e -0). slide 6
Complemento a dois +3 = 00000011 +2 = 00000010 +1 = 00000001 +0 = 00000000-1 = 11111111-2 = 11111110-3 = 11111101 slide 7
Benefícios Uma representação de zero. Aritmética funciona com facilidade (ver mais adiante). Negação é muito fácil. 3 = 00000011 Complemento Booleano gera 11111100 Some 1 ao LSB 11111101 slide 8
Representação geométrica dos inteiros de complemento a dois slide 9
Negação especial caso 1 0 = 00000000 Not bit a bit 11111111 Some 1 ao LSB +1 Resultado 1 00000000 Estouro ignorado, portanto: - 0 = 0 slide 10
Negação especial caso 2-128 = 10000000 Not bit a bit 01111111 Some 1 ao LSB +1 Resultado 10000000 Portanto: -(-128) = -128 X Monitore MSB (bit de sinal). Ele deve mudar durante a negação. slide 11
Intervalo de números Complemento a 2 com 8 bits: +127 = 01111111 = 2 7-1 -128 = 10000000 = -2 7 Complemento a 2 com 16 bits: +32767 = 011111111 11111111 = 2 15-1 -32768 = 100000000 00000000 = -2 15 slide 12
Conversão entre tamanhos Pacote de número positivo com zeros iniciais. +18 = 00010010 +18 = 00000000 00010010 Pacote de números negativos com uns iniciais. -18 = 10010010-18 = 11111111 10010010 Ou seja, pacote com MSB (bit de sinal). slide 13
Adição e subtração Adição binária normal. Monitore estouro no bit de sinal. Pegue o complemento a dois do subtraendo e some ao minuendo. Ou seja, a - b = a + (-b). Assim, só precisamos de circuitos de adição e complemento. slide 14
Hardware para adição e subtração slide 15
Subtração Regra básica slide 16
Exercícios Faça as operações aritméticas abaixo utilizando números binários de 8 bits e complemento de 2: 1. +9 + 4 2. +9-4 3. -9 + 4 4. -9-4 slide 17
Multiplicação Complexa. Calcule produto parcial para cada dígito. Cuidado com o valor da casa (coluna). Some produtos parciais. slide 18
Exemplo de multiplicação 1011 Multiplicando (11 dec) x 1101 Multiplicador (13 dec) 1011 Produtos parciais 0000 Nota: Se bit multiplicador for 1, copia. 1011 1011 Multiplicando (valor da casa) Caso contrário, zero. 10001111 Produto (143 dec) Nota: precisa de resultado com tamanho duplo. slide 19
Multiplicação binária sem sinal slide 20
Fluxograma para a multiplicação binária sem sinal slide 21
Multiplicando números 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. slide 22
Algoritmo de Booth slide 23
Exemplo do algoritmo de Booth Exemplo retirado: http://pt.wikipedia.org/wiki/algoritmo_de_multiplica%c3%a7%c3%a3o_de_booth slide 24
Exemplo do algoritmo de Booth -8 x 2 Exemplo retirado: http://pt.wikipedia.org/wiki/algoritmo_de_multiplica%c3%a7%c3%a3o_de_booth slide 25
Divisão Mais complexa que a multiplicação. Números negativos são realmente maus! Baseada na divisão longa. slide 26
Divisão de inteiros binários sem sinal Divisor Restos Parciais 1011 00001101 10010011 1011 001110 1011 001111 1011 100 Quociente Dividendo Resto slide 27
Fluxograma para divisão binária sem sinal slide 28
Números reais Números com frações. Poderia ser feito em binário puro. 1001.1010 = 2 4 + 2 0 +2-1 + 2-3 =9,625 Onde está o ponto binário? Fixo? Muito limitado. Móvel? Como você mostra onde ele está? slide 29
Ponto flutuante +/- significando x 2 exponente Nome impróprio Ponto é realmente fixo entre bit de sinal e corpo da mantissa Expoente indica valor da casa (posição do ponto) slide 30
Sinais para ponto flutuante Mantissa é armazenada em complemento a dois. Expoente está em notação de excesso ou viesado. P.e., excesso (viés) 128 significa campo de expoente com 8 bits. Intervalo de valor puro 0-255. Subtraia 128 para obter valor correto. Intervalo de -128 a +127. slide 31
Normalização Números de PF geralmente são normalizados, ou seja, expoente é ajustado de modo que bit inicial (MSB) da mantissa seja 1. Por ser sempre 1, não é preciso armazená-lo. (c.f. notação científica, onde os números são normalizados para um único dígito antes do ponto decimal, p.e., 3,123 x 10 3 ) slide 32
Intervalos de PF Para um número de 32 bits: Expoente de 8 bits. +/- 2 256 1,5 x 10 77 Precisão: O efeito de alterar LSB da mantissa. Mantissa de 23 bits 2-23 1,2 x 10-7. Cerca de 6 casas decimais. slide 33
Números representáveis slide 34
Representação de ponto flutuante em binário Vamos ao exemplo, representando, em binário, o número 0,625. 0,625 x 2 = 1,25, logo a primeira casa fracionária é 1. Resta representar o 0,25 que restou ao se retirar o 1 já representado. 0,25 x 2 = 0,5, logo a segunda casa é 0. Falta representar o 0,5. 0,5 x 2 = 1, logo a terceira casa é 1. 0,625 10 = 0,101 2 Quando o número tiver parte inteira e parte fracionária, podemos calcular, cada uma, separadamente. slide 35
Exemplo Representar o número -0,75 10 em ponto flutuante e precisão simples. 1 a fase: converter para binário: 0,75 x 2 = 1,5 1 0,5 x 2 = 1,0 1-0,75 10 = -0,11 2 = -0,11 x 2 0 = -1,1 x 2-1 Em precisão simples: N ( 1) S (1 Mantissa ) ( E Peso ) 2 Resultado: slide 36
IEEE 754 Padrão para armazenamento de ponto flutuante. Padrões de 32 e 64 bits. Expoente de 8 e 11 bits, respectivamente. Formatos estendidos (mantissa e expoente) para resultados intermediários. slide 37
Formatos IEEE 754 slide 38
Aritmética de ponto flutuante (+/-) Verifique zero. Alinhe significandos (ajustando expoentes). Soma ou subtraia significandos. Normalize resultado. slide 39
Fluxograma da adição e subtração de ponto flutuante slide 40
Aritmética de ponto flutuante (x/ ) Verifique zero. Soma/subtraia expoentes. Multiplique/divida significandos (observe sinal). Normalize. Arredonde. Todos os resultados intermediários devem ser em armazenamento de tamanho duplo. slide 41
Multiplicação de ponto flutuante slide 42
Divisão de ponto flutuante slide 43
Leitura recomendada Stallings, Capítulo 9. IEEE 754 no site do IEEE. slide 44