Representando Instruções no Computador Humanos aprenderam a pensar na base 10 Números podem ser representados em qualquer base Números mantidos no hardware como série de sinais eletrônicos altos e baixos Base 2 (alto/baixo, ligado/desligado, V/F, 0/1) Números binários, compostos por dígitos binários (binary digit) Representando Instruções no Computador Instruções também mantidas como série de sinais eletrônicos altos e baixos Podem ser representados como número Na verdade cada parte da instrução pode ser considerada como um número individual Colocação lado a lado desses números forma a instrução Registradores fazem parte de quase todas as instruções Convenção para mapear nome de registradores em números MIPS: registradores $s0 a $s7: registradores 16 a 23 Registradores $t0 a $t7 mapeados nos registradores de 8 a 15 Representando Instruções no Computador Como é representada add $t0, $s1, $s2? Representação binária (formato da instrução): Cada um dos segmentos chamado de campo Primeiro (op: opcode) e último (funct: função) campos indicam operação de soma Segundo Quarto Quinto (rs) e terceiro (rt) campos indicam operandos campo (rd) indica registrador destino campo (shamt: shift amount) não usado nessa instrução Representando Instruções no Computador Versão numérica das instruções chamada de linguagem de máquina Sequência de instruções chamada de código de máquina Instruções MIPS: 32 bits E se instrução precisa de campos maiores que os mostrados? Conflito entre manter todas as instruções com o mesmo tamanho e o desejo de ter um formato de instrução único. Representando Instruções no Computador Princípio de projeto 4: um bom projeto exige bons compromissos Compromisso dos projetistas do MIPS: todas as instruções com o mesmo tamanho Tipos diferentes de instruções Formato anterior: tipo-R (operações envolvendo apenas registradores) Segundo tipo de instruções: tipo-I (imediato) Utilizada por instruções imediatas e de transferência de dados Ponto Flutuante Precisamos de representação para números reais Utilizaremos na representação números normalizados em notação científica Notação científica normalizada: possui único dígito à esquerda do ponto decimal (ou ponto binário, caso a base seja 2) Ex.: 1,0 x 10-9 Ponto Flutuante Ponto flutuante: aritmética computacional que representa os números em que o ponto binário não é fixo na forma 1,aaaaaa x 2bbbb Precisamos de compromisso entre tamanho da fração e do expoente Representados Aumento da precisão x aumento do intervalo dos números que podem ser representados Ponto Flutuante Números em ponto flutuante múltiplos do tamanho de uma palavra Precisão simples (floats em C): uma palavra usada na representação 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 s expoente fração Precisão dupla (doubles em C): duas palavras usadas na representação 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 s expoente fração 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 fração (continuação) Ponto Flutuante Representações anteriores chamada de sinal e magnitude Sinal possui um bit separado do restante do número Representação em precisão simples tão pequenos quanto 2 x 10-38 e tão grandes quanto 2 x 1038 Overflow ainda pode ocorrer Números Expoente positivo torna-se muito grande para caber no campo de expoente Também podemos ter underflow Expoente negativo torna-se muito grande para caber no campo de expoente Ponto Flutuante Representação em precisão dupla tão pequenos quanto 2 x 10-308 e tão grandes quanto 2 x 10308 Números Formato IEEE Mais de ponto flutuante do IEEE 754 bits podem ser colocados na fração Números sempre na forma 1,xxx Um implícito Bits da fração numerados da esquerda para direita Termo significando utilizado Ponto Flutuante Codificação para números PF Precisão Simples Expoente Fração 0 0 0 não zero 1-254 qualquer coisa 255 0 255 não zero Objeto Representado Precisão Dupla Expoente Fração 0 0 0 0 não zero ± número desnormalizado 1-2046 qualquer coisa ± númeroponto flutuante 2047 ± infinito 2047 não zero NaN (Not a Number) Ponto Flutuante Comparação de números seria simplificada se representação do expoente mais negativo fosse próxima a 0000....000 e expoente mais positivo como 1111...111 Ex: 1,0 x 2-1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 1 1 1 1 1 1 1 0 0 0 1,0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x 2+1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Ponto Flutuante Solução: uso de notação deslocada Bias adicionado ao expoente No padrão IEEE valor 127 utilizado como bias para precisão simples e 1023 para precisão dupla (-1)s x (1 + fração) x 2 (expoente - bias) No exemplo anterior: -1 + 127 = 126 => 0111 1110 +1 + 127 = 128 => 1000 0000 Ponto Flutuante Exemplo: Representar -0,75 em precisão simples e dupla -0,7510 = 0,112 Na notação científica normalizada: -1,1 x 2-1 Expoente: -1+127 = 126 => 01111110 Número negativo: sinal = 1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Ponto Flutuante Exemplo (cont.) Na precisão dupla, expoente igual a -1+1023 = 1022 => 01111111110 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Ponto Flutuante Que número decimal é representado por este float de precisão simples? 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 0 0 0 0 0 0 1 0 1 0 Bit 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 de sinal: 0 (número positivo) (-1)0 x (1 + 0,01) x 2(129 – 127) = 1 x 1,25 x 4 = 5,0 Ponto Flutuante Ponto Flutuante Números em PF normalmente são aproximações para um número Arrendondamento pode ser crítico IEEE 754 define dois bits extras para arredondamento durante operações Guarda e arredondamento Ponto Flutuante Somar 2,56 x 100 a 2,34 x 102, supondo 3 dígitos significativos Exemplo: Guarda e arredondamento garantem 5 bits durante operação 2,3400 + 0,0256 = 2,3656 = 2,37 Sem guarda e arredondamento teríamos: 2,34 + 0,02 = 2,36