UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Arquitetura e Organização de Computadores Aritmética Computacional Prof. Sílvio Fernandes 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 é n 1 A 2 ai i i 0 5 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 Representação em Complemento de Dois 9 Representação em Complemento de Dois n2 A 2n 1 an 1 2i ai i 0 – 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 Decimal S-M C-2 Decimal S-M C-2 +8 +7 +6 +5 +4 +3 +2 +1 +0 0111 0110 0101 0100 0011 0010 0001 0000 0111 0110 0101 0100 0011 0010 0001 0000 -0 -1 -2 -3 -4 -5 -6 -7 -8 1000 1001 1010 1011 1100 1101 1110 1111 - 1111 1110 1101 1100 1011 1010 1001 1000 Representação em Complemento de Dois • Conversão complemento de 2 → decimal -128 64 32 16 8 4 2 1 1 0 0 0 0 0 1 1 +2 +1 = -125 -128 • Conversão decimal→ complemento de 2 -120 = -128 64 32 16 8 4 2 1 1 0 0 0 1 0 0 0 -128 +8 12 Representação em Complemento de Dois • À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 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 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) -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 20 diferentes 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 • 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) Nota: É usado deslocamento aritmético para preservar o sinal 32 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 Divisor 1011 00001101 Quociente 10010011 Dividendo 1011 Restos Parciais 001110 1011 001111 1011 100 Resto 35 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: M B Sinal Mantissa E Expoente 37 Representação de Ponto Flutuante • Um mesmo número pode ser representações em ponto flutuante várias 24 = 0,110 x 25 = 110 x 22 = 0,0110 x 26 • Para simplificar as operações, é requerido que os números sejam normalizados 1,1 b0b1b2 ...bn 2 E Dígitos binários implícito 38 Representação de Ponto Flutuante Sinal da mantissa 8 bits 23 bits Expoente polarizado Significando 32 bits • 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 • -856.064 = -0,11010001 x 210100 = 1 • 209 x 2-28 = 0,11010001 x 2-10100 = 0 • -209 x 2-28 = -0,11010001 x 2-10100 = 1 10010011 10010011 01101011 01101011 10100010000000000000000 10100010000000000000000 10100010000000000000000 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 Overflow em Números Negativos Overflow em Números Positivos Números inteiros representáveis -231 0 Underflow em Números Negativos 231-1 Underflow em Números Positivos Overflow em Números Negativos Overflow em Números Positivos Números negativos representáveis -(1-2-24) x 2128 -0,5 x 2-127 Números positivos representáveis 0 -0,5 x 2-127 -(1-2-24) x 2128 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 8 bits Formato Simples Expoente polarizado Sinal do significando Significando 32 bits Sinal do significando Formato Duplo 23 bits 11 bits 52 bits Expoente polarizado Significando 64 bits 44 Representação de Ponto Flutuante • Valores especiais definidos no IEEE 754 Expoente Polarizado Sinal Formato Simples Formato Duplo Mantissa Valor 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 Representação de Ponto Flutuante • Parâmetros do formato IEEE 754 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 46 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