Organização e Arquitetura de computadores Aritmética computacional Prof. Dr. Luciano José enger Representação de valores Os valores expressos em números inteiros e fracionários necessitam ser representados de forma eficiente em sistemas computacionais, através de palavras binárias No hardware, os números são finitos, pois devem ser mapeados em palavras de tamanho fixo Além disso, o hardware necessita trabalhar com número com sinal (negativos e positivos) olução: usar 1 bit (sinal magnitude). Primeira tentativa: o bit mais significativos (MB) éusado para sinal. Problema: duas representações para o zero olução mais usada: complemento a 2 Notação em excesso (números em ponto flutuante) Representação de valores Faixa de valores em complemento de 2 para 3 bits 11 111-1 -2-3 3 11-4 11 1 Interface Hardware/oftware Endereços: sempre positivos Em C: int e unsignedint 1 1 2 1 Representação de valores Como o computador trabalha com bits, todos os valores precisam ser convertidos para uma representação interna que seja eficiente na economia dos bits e na realização de operações sobre os valores Questão: Que tipo de variável que pode conter 1... (dec) ocupa mais espaço na memória? int em C tring em C tring em java(que usa Unicode) Adição omador ripple carry(propagação de vai-um) Adição de alto desempenho Carrylookaheadadder(somador com previsão de excedente) O processo de somar as entradas de cada bit érápido O problema éque o a propagação do excedente (carry) leva um tempo longo para atravessar o circuito: números maiores levam mais tempo para serem somados.
Adição de alto desempenho Carrylookaheadadder(somador com previsão de excedente) Adição de alto desempenho Carrylookaheadadder(somador com previsão de excedente) Adição de alto desempenho Hardware para adição e subtração Overflow Detecção de overflow Ocorre sempre que o resultado de uma operação não pode ser representado no hardware disponível. Operação Operando A Operando B Resultado A+B >= >= < A+B < < >= A-B >= < < A-B < >= >= e um número for negativo, e o outro positivo, não ocorrerá overflow. Overflow Interface hardware/software O MIP detecta um overflowcomo uma exceção, também chamada de interrupção em muitos computadores Uma exceção ou interrupção corresponde basicamente a uma chamada de procedimento não planejada O endereço da instrução que gerou o overflowésalvo em registrador especial, e o computador desvia a execução para um endereço pré-definido, para invocar a rotina apropriada para essa exceção O MIP inclui um registrador, chamado de contador de programa de exceção (EPC) para conter o endereço da instrução que causou a exceção. A instrução move from system control(mfc) éusada para copiar o EPC para um registrador de uso geral, de modo que o software do MIP tem a opção de retornar àinstrução problemática por meio de uma instrução jump register Adição Interface hardware/software Na ocorrência de overflowa máquina precisa decidir como tratá-lo. Linguagem C: não toma conhecimento do overflows, assim o overflow deve ser tratado pelo programador. Outras linguagens, como ADA e FORTRAN, tratam o overflow Na arquitetura IA-32, o registrador de flagsnotifica se o resultado de uma operação aritmética gerou ou não um overflow; cabe ao software utilizar essa informação para o tratamento do overflow
A multiplicação, aocontráriodasoma e dasubtração, é uma operação complexa Realizada através da soma dos produtos parciais para cada dígito do multiplicador A soma deveser realizadaobservandoquecada produto parcial tem uma posição(deslocamento) na soma que deve ser respeitada A multiplicação de números inteiros binários de nbits resulta em um produto com até2nbits de tamanho 111 Multiplicando (11 decimal) x 111 Multiplicador (13 decimal) 111 produtos parciais Nota: se o bit do multiplicador 111 for igual a 1, copia-se o 111 multiplicando, senão 11111 produto (143 decimal) Nota: o resultado é expresso através de um número que tem o dobro do tamanho dos termos (p.e. se os termos têm 4 bits, o resultado deve ser expresso em 8 bits) Hardware de multiplicação Exemplo: Multiplicar 111 por 111 Diagrama de fluxo de dados para a multiplicação mais rápidar Replicação de somadores Não importa se o multiplicando deve ser somado ou não, isso é conhecido no início da multiplicação analisando cada um dos 32 bits do multiplicador Multiplicações mais rápidas são possíveis basicamente fornecendo um somador de 32 bits para cada bit do multiplicador: uma entrada éo AND do multiplicando pelo bit do multiplicador e a outra éa saída do somador anterior
mais rápidar Replicação de somadores Números negativos a técnica/hardware anterior não funciona para números negativos, expressos em complemento de 2 Primeira solução Converter o número negativo para um número positivo Multiplicar como descrito previamente e os sinais dos termos iniciais forem diferentes, efetuar a representação do resultado através de um número negativo egunda solução Diagrama de fluxo de dados para a multiplicação (Booth) O multiplicador e o multiplicando são armazenados nos registradores Q e M Existe um registrador de 1 bit, posicionado logicamente àdireita do bit menos significativo (Q ) do registrador Q e designado como Q -1 A e Q -1 são inicializadoscom zero A lógica de controle examina os bits do multiplicador, um de cada vez Quando o bit éexaminado, observa-se o bit a sua direita: se esses dois bits forem iguais (1-1 ou -), então todos os bits dos registradores A, Q e Q -1 são deslocados 1 bit para a direita; se eles forem diferentes, o multiplicando serásomado ou subtraído do registrador A, dependendo se os dois bits são -1 ou 1-, respectivamente Após a operação de adição ou subtração, ocorre o deslocamento de um bit para a direita, que éfeito de tal maneira que o bit mais a esquerda de A, denominado de A n-1, édeslocado para A n-2, mas também permanece em A n-1 Tal forma de deslocamento énecessária para preservar o sinal do número armazenado em A e Q; esses deslocamento éconhecido como deslocamento aritmético, porque preserva o bit de sinal Exemplo: Multiplicar 111 por 11
Divisão Algoritmo de divisão Mais complexo que o algoritmo de multiplicação Divisor Resto 111 111 1111 111 111 111 1111 111 1 Quociente Dividendo Resto Divisão Resto>= 2a. Desloque o Quociente 1 bit à esquerda Q = 1 início 1. Resto = Resto - Divisor Teste do Resto Resto < 2b. Resto = Resto + Divisor Desloque o Quociente um 1 bit à esquerda Q = Ponto flutuante Números reais não inteiros seguem a representação em ponto flutuante Na notação em ponto flutuante, os números seguem uma notação científica normalizada: Ocorrência de overflow e underflow E F 2 32 bits 3. Desloque o Divisor 1 bit à direita não 33 repetições? sim Fim s expoente mantissa 1 8 23 Precisão simples (float) Ponto flutuante Formato duplo (double) 64 bits s expoente mantissa 1 11 52 Esses formatos estão de acordo com o padrão IEEE 754, encontrado em praticamente todos os computadores desde 198 Para colocar mais bits no significando, o IEEE 754 deixa explícito o bit 1 inicial nos números binários. Logo, o número tem 24 bits de largura na precisão simples e 53 bits na precisão dupla O valor de expoente (reservado) indica o número zero E (1 + Mantissa) 2 Ponto flutuante Codificação do padrão IEEE 754 para os números em ponto flutuante Para facilitar a comparação entre valores, o bit de expoente érepresentado no início da palavra; além disso, a representação em excessode 127 para a precisão simples: -1:-1+127 = 126 1: 1+127 = 128 O biaspara o expoente éigual a 123 ( E Peso) E (8) ±1-254 ±255 255 (1 + Mantissa) 2 Precisão simples F (23) anything Precisão dupla E (11) ±1-246 ±247 247 F (52) anything Objeto representado zero () ± denormalized number ± floating point number ±infinity not a number (NaN)
Ponto Flutuante Faixas de representação NaN - - + -Normalized -Denorm +Denorm +Normalized Description exp frac Numeric Value Zero. mallest Pos. Denorm. 1 2 {23,52} X 2 {126,122} ingle 1.4 X 1 45 Double 4.9 X 1 324 Largest Denormalized 11 11 (1. ε) X 2 {126,122} ingle 1.18 X 1 38 Double 2.2 X 1 38 mallest Pos. Normalized 1 1. X 2 {126,122} Just larger than largest denormalized One 1 11 1. Largest Normalized 11 1 11 11 (2. ε) X 2 {127,123} ingle 3.4 X 1 38 Double 1.8 X 1 38 + NaN Ponto Flutuante exp E value Denormalized numbers Normalized numbers n/a 1-6 1/512 1-6 2/512 11-6 6/512 111-6 7/512 1-6 8/512 1 1-6 9/512 11 11-1 28/32 11 111-1 3/32 111 1 111 1 36/32 111 1 4/32 111 11 7 224 111 111 7 24 1111 n/a inf closest to zero largest denorm smallest norm closest to 1 below closest to 1 above largest norm Padrão IEEE 754 Exemplos: 1. Representar o número,75 1 em ponto flutuante e precisão simples. 2. Representar o número -,75 1 em ponto flutuante e dupla precisão. Convertendo para binário:,75 x 2 = 1,5 1,5 x 2 = 1, 1 -,75 1 = -,11 2 = -,11 x 2 = -1,1 x 2-1 Em precisão simples: Resultado: (1 + Mantissa) 2 ( E Peso) Ponto Flutuante Converter a palavra abaixo em ponto flutuante para número: Resposta Adição e em Ponto Flutuante Ponto Flutuante Na arquitetura MIP: Adição simples e dupla: add.s e add.d ubtração simples e dupla: sub.s e sub.d simples e dupla: mult.s e mult.d Aritmética de precisão Ao contrário dos números inteiros, os números em ponto flutuante são aproximações dos valores reais O arredondamento exige bits adicionais O IEEE 754 mantém 2 bits extras àdireita para adições intermediárias, chamados guarda e arredondamento Exemplo: soma 2,56 x 1^ + 2,34 x 1^2, supondo 3 dígitos decimais significativos 2,34 +,256 = 2,3656 Arredondamento: 2,37 em dígitos de guarda e arredondamento: 2,34 +,2 = 2,36
Vida Real: ponto flutuante do IA-32 IA-32 Início: de ponto flutuante 1987 Arquitetura de pilha: operandossão colocados na pilha e removidos para o processamento 8 bits são reservados para números em ponto flutuante (formato estendido); não utilizado pelas linguagens de programação tradicionais 79 78 64 63 s exp frac Considerações finais Considerações Replicação de somadores: melhor desempenho Trata números negativos diretamente Blocos de 1s e s são ignorados, sendo feita, em média, apenas uma adição ou subtração por bloco e divisão Menos freqüentes Ponto flutuante Aritmética complexa Registradores específicos Falácia: a adição em ponto flutuante é associativa; ou seja, x+(y+z)=(x+y)+z. Referências Patterson e Hennessy, cap. 3 talings, cap. 8 Murdocca, cap. 3 Wikipedia: http://en.wikipedia.org/wiki/ieee_floatingpoint_standard