170 likes | 243 Views
Capítulo 3. Números. Bits são apenas bits (nenhum significado inerente) — convenções definem a relação entre bits e números Números binários (base 2) 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001... decimal: 0...2 n -1 Obviamente, torna-se mais complicado:
E N D
Capítulo 3 Hennessy • Patterson
Números • Bits são apenas bits (nenhum significado inerente) — convenções definem a relação entre bits e números • Números binários (base 2) 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001... decimal: 0...2n-1 • Obviamente, torna-se mais complicado: números são finitos (overflow) frações e números reais números negativos por exemplo, nenhuma instrução subi do MIPS; addi pode somar um número negativo • Como representamos os números negativos? Por exemplo, que padrões de bit representarão esses números? Hennessy • Patterson
Representações possíveis • Sinal e magnitude: Complemento a um Complemento a dois • 000 = +0 000 = +0 000 = +0001 = +1 001 = +1 001 = +1010 = +2 010 = +2 010 = +2011 = +3 011 = +3 011 = +3100 = -0 100 = -3 100 = -4101 = -1 101 = -2 101 = -3110 = -2 110 = -1 110 = -2111 = -3 111 = -0 111 = -1 • Questões: equilíbrio, número de zeros, facilidade de operações • Qual é o melhor? Por quê? Hennessy • Patterson
maxint maxint MIPS Números de 32 bits com sinal: Hennessy • Patterson
Operações de complemento a dois • Negar um número de complemento a dois: inverta todos os bits e some 1 • lembre-se: “negar” e “inverter” são muito diferentes! • Converter números de n bits em números com mais de n bits: • o campo imediato de 16 bits do MIPS é convertido em 32 bits para aritmética • copie o bit mais significativo (o bit de sinal) para os outros bits • 0010 -> 0000 0010 1010 -> 1111 1010 • “extensão de sinal” (lbu versus lb) Hennessy • Patterson
Adição e subtração • Exatamente como aprendemos na escola (emprestar/subir 1s) • 0111 0111 0110+ 0110 - 0110 - 0101 • Facilidade de operações do complemento a dois - subtração usando adição para números negativos 0111 + 1010 • Overflow (resultado muito grande para a word finita do computador): por exemplo, somar dois números de n bits não produz um número de n bits • 0111 + 0001 note que o termo overflow é um pouco confuso; 1000 ele não significa que um carry “transbordou” Hennessy • Patterson
Detectando overflow • Nenhum overflow quando somar um número positivo com um negativo • Nenhum overflow quando sinais são iguais para subtração • O overflow ocorre quando o valor afeta o sinal: - overflow ao somar dois positivos produz um negativo - ou, somar dois negativos produz um positivo - ou, subtraia um negativo de um positivo e obtenha um negativo - ou, subtraia um positivo de um negativo e obtenha um positivo • Considere as operações A + B e A B - Pode ocorrer overflow se B for 0? - Pode ocorrer overflow se A for 0? Hennessy • Patterson
Efeitos do overflow • Uma exceção (interrupção) ocorre - O controle salta para um endereço predefinido para exceção - O endereço interrompido é salvo para uma possível retomada • Detalhes baseados na linguagem/sistema de software - exemplo: controle de vôo versus dever de casa • Nem sempre desejamos detectar overflow — novas instruções MIPS: addu, addiu, subu Nota: addiu ainda com extensão de sinalNota: sltu, sltiu para comparações sem sinal Hennessy • Patterson
Multiplicação • Mais complexa do que a adição - realizada através de deslocamento e adição • Mais tempo e mais área • Vejamos três versões baseadas em um algoritmo da escola • 0010 (multiplicando) x 1011 (multiplicador) • Números negativos: converta e multiplique - existem técnicas melhores, que não serão tratadas aqui Hennessy • Patterson
Multiplicação: Implementação Caminho de dados Hennessy • Patterson
Multiplicação: Implementação controle Hennessy • Patterson
Versão final O multiplicador inicia na metade direita do produto O que entra aqui? Hennessy • Patterson
Ponto flutuante (um breve exame) • Precisamos de uma maneira de representar - números com frações, por exemplo, 3,1416 - números muito pequenos, por exemplo, 0,000000001 - números muito grandes, por exemplo, 3.15576 109 • Representação: - sinal, expoente, significando: (–1)sinalsignificando 2expoente - mais bits para o significando fornece mais precisão - mais bits para o expoente aumenta a faixa • Padrão de ponto flutuante IEEE 754: - precisão única: expoente de 8 bits, significando de 23 bits - precisão dupla: expoente de 11 bits, significando de 52 bits Hennessy • Patterson
Padrão de ponto flutuante IEEE 754 • O bit “1” inicial do significando está implícito • O expoente é “desviado” para facilitar a classificação - todos os 0s são o menor expoente, todos os 1s são o maior - desvio do 127 para precisão única e do 1023 para precisão dupla - resumo: (–1)sinal (1 + significando) 2expoente – desvio • Exemplo: - decimal: -0,75 = - ( ½ + ¼ ) - binário: -0,11 = -1.1 2-1 - ponto flutuante: expoente = 126 = 01111110 • precisão única IEEE: 10111111010000000000000000000000 Hennessy • Patterson
Adição de ponto flutuante Hennessy • Patterson
Complexidades do ponto flutuante • As operações são um pouco mais complicadas (veja o texto) • Além do overflow podemos ter o “underflow” • A precisão pode ser um grande problema - O IEEE 754 mantém dois bits extras, guarda e arredondamento - quatro modos de arredondamento - positivo dividido por zero produz “infinidade” - zero dividido por zero não produz um número - outras complexidades • Implementar o padrão pode ser arriscado • Não usar o padrão pode ser ainda pior - veja no texto a descrição do 80x86 e o bug do Pentium! Hennessy • Patterson
Resumo do Capítulo 3 • A aritmética de computador é restrita por uma precisão limitada • Os padrões de bit não têm um significado inerente mas existem padrões - complemento a dois - ponto flutuante IEEE 754 • As instruções de computador determinam o “significado” dos padrões de bit • O desempenho e a precisão são importantes; portanto, existem muitas complexidades nas máquinas reais • A escolha do algoritmo é importante e pode levar a otimizações de hardware para espaço e tempo (por exemplo, multiplicação) • Fazer uma revisão pode ser uma boa idéia (a Seção 3.10 é uma ótima leitura!) Hennessy • Patterson