Arquitetura de Computadores Prof. Fábio M. Costa Instituto de Informática – UFG 1S/2004 Representação de Dados e Aritimética Computacional Roteiro Números inteiros sinalizados e nãosinalizados Operações aritiméticas Números de ponto flutuante Unidade Lógico-Aritimética Executa cálculos Todos os demais componentes do computadores existem em função dela Manipula números inteiros Pode manipular números de ponto flutuante (números reais) – FPU (Floating Point Unit) integrado no chip do processador, ou em um co-processador separado (obsoleto) ULA (ALU): Entradas e Saídas Representação de inteiros Apenas 0 e 1 para representar tudo Números positivos são armazenados em repr. binária “direta” Ex.: 41 = 00101001 Sem sinal de menos Sem ponto decimal (vírgula) Duas representações possíveis: Sinal-e-magnitude Complemento de dois Representação em sinalmagnitude Bit mais à esquerda (mais significativo) é o bit de sinal 0: positivo 1: negativo Ex.: +18 = 00010010 -18 = 10010010 Problemas Em operações aritiméticas é preciso considerar ambos o sinal e a magnitude Duas representações para zero (+0 e -0 !!!) Representação em complemento de dois +3 = 00000011 +2 = 00000010 +1 = 00000001 0 = 00000000 -1 = 11111111 -2 = 11111110 -3 = 11111101 Complemento de dois: Benefícios Uma única representação para zero Aritimética mais simples (veja a seguir) Operação de negação torna-se mais simples: 3= 00000011 complemento booleano: 11111100 Soma 1 ao bit menos signific. (LSB): 11111101 Representação geométrica de inteiros em complemento de dois Negação: Caso especial 1 0= 00000000 Negação bit-a-bit 11111111 Soma 1 ao LSB +1 Result 1 00000000 Overflow é ignorado, então: -0=0√ Negação: Caso especial 2 -128 = 10000000 Negação bit-a-bit 01111111 Soma 1 ao LSB +1 Resultado = 10000000 Então: -(-128) = -128 X Monitorar MSB (bit de sinal): Ele deve mudar após uma negação! Faixa de números Complemento de 2 de 8 bits +127 = 01111111 = 27 -1 -128 = 10000000 = -27 Complemento de 2 de 16 bits +32767 = 011111111 11111111 = 215 - 1 -32768 = 100000000 00000000 = -215 Conversão entre tamanhos e Extensão de sinal Números positivos: zeros à esquerda +18 = 00010010 +18 = 00000000 00010010 Números negativos: 1’s à esquerda -18 = 11101110 -18 = 11111111 11101110 i.e. reproduz o bit de sinal à esquerda Adição e subtração Adição binária normal Monitorar o overflow do bit de sinal Subtração: Tome o complemento de dois do subtraendo e adicione-o ao minuendo i.e.: a – b = a + (-b) Assim, nós precisamos apenas de circuitos de adição e de complemento Hardware para adição e subtração Multiplicação Mais complexa: Opera-se o produto parcial para cada dígito (do multiplicador) Desloca cada produto parcial uma casa à esquerda Adiciona-se os produtos parciais Multiplicação de números inteiros de n bits: produto com até 2n bits Exemplo de multiplicação 1011 x 1101 1011 0000 1011 1011 10001111 Multiplicando (11 decimal) Multiplicador (13 decimal) Produtos parciais Obs.: se o bit multiplicador é 1, copia-se o multiplicando; do contrário: zero Produto (143 decimal) Obs.: requer resultado de tamanho duplo Multiplicação binária nãosinalizada Algoritmo direto Execução de um exemplo Multiplicação de números negativos Algoritmo direto (anterior) não funciona se um dos dois números for negativo Solução 1 converter para positivo, se necessário multiplicar como acima se os sinais forem diferentes, negar a resposta Solução 2 Algoritmo de Booth Algoritmo de Booth Exemplo (algoritmo de Booth) Divisão Mais complexa que a multiplicação Pior para números negativos Baseado na operação com “lápis e papel” Divisão de números inteiros não sinalizados - Exemplo 10010011 Dividendo 1011 001110 1011 Restos 001111 Parciais 1011 100 1011 00001101 Resto Divisor Quociente Números reais Números com frações Poderiam ser representados em binário puro 1001,1010 = 23 + 20 + 2-1 + 2-3 = 9,625 Onde fica o ponto binário? Fixo? muito limitado Móvel? como mostrar onde ele está? Bit sinal Ponto Flutuante Expoente Polarizado Mantissa +/- 0,<mantissa> X 2<expoente> O ponto é fixado entre o bit de sinal e o corpo da mantissa O expoente indica a posição (relativa) do ponto Representação Binária Polarizada Repr. Decimal Repr. Polarizada +8 +7 +6 +5 +4 +3 +2 +1 +0 0 1 2 3 4 5 6 7 8 1111 1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 0000 Vantagem principal: •comparação direta •lógica mais simples Uso na notação de Ponto Flutuante: •O expoente real é convertido para a forma polarizada Exemplos de números de ponto flutuante Faixa de Números Representáveis com 32 bits Referências Stallings (*) Cap. 8: Aritimética Computacional (*) referência principal Patterson & Hennessy Cap. 4: Aritimética Computacional Exercícios Stallings 8.4 a 8.6 8.14 a 8.16